From 6a4f3ff1c08085e25d48f7a5ab23cca5cf5691fa Mon Sep 17 00:00:00 2001 From: Snogard Date: Mon, 10 Feb 2025 22:02:55 +0100 Subject: [PATCH] , two shaders amd bedrock camera mod --- .gitignore | 1 + .../data/crafting/recipes/manatosource.json | 18 + .../data/crafting/recipes/sourcetomana.json | 18 + datapacks/ArsFlora/pack.mcmeta | 1 + .../assets/ae2/blockstates/controller.json | 166 ++ .../assets/ae2/models/block/charger.json | 99 + .../controller_block_conflicted.json | 7 + .../controller/controller_block_lights.json | 23 + .../controller/controller_block_lights_x.json | 22 + .../controller/controller_block_lights_y.json | 22 + .../controller/controller_block_lights_z.json | 22 + .../controller/controller_block_offline.json | 7 + .../controller/controller_block_online.json | 7 + .../controller_horiztonal_x_conflicted.json | 6 + .../controller_horiztonal_x_offline.json | 6 + .../controller_horiztonal_x_online.json | 6 + .../controller_horiztonal_z_conflicted.json | 6 + .../controller_horiztonal_z_offline.json | 6 + .../controller_horiztonal_z_online.json | 6 + .../controller_vertical_conflicted.json | 6 + .../controller_vertical_offline.json | 6 + .../controller_vertical_online.json | 6 + .../inside_controller_block_conflicted.json | 7 + .../inside_controller_block_offline.json | 7 + .../inside_controller_block_online.json | 7 + .../assets/ae2/models/block/crank.json | 64 + .../assets/ae2/models/block/crank_base.json | 23 + .../assets/ae2/models/block/crank_handle.json | 49 + .../ae2/models/block/drive/drive_base.json | 92 + .../ae2/models/block/drive/drive_cell.json | 22 + .../ae2/models/block/sky_stone_tank.json | 342 +++ .../ae2/models/block/vibration_chamber.json | 25 + .../models/block/vibration_chamber_on.json | 25 + .../ae2/textures/block/cell_workbench.png | Bin 0 -> 464 bytes .../textures/block/cell_workbench_bottom.png | Bin 0 -> 413 bytes .../textures/block/cell_workbench_side.png | Bin 0 -> 514 bytes .../assets/ae2/textures/block/charger.png | Bin 0 -> 1755 bytes .../textures/block/chipped_budding_quartz.png | Bin 0 -> 273 bytes .../block/chiseled_quartz_block_side.png | Bin 0 -> 3860 bytes .../block/chiseled_quartz_block_top.png | Bin 0 -> 3861 bytes .../assets/ae2/textures/block/condenser.png | Bin 0 -> 458 bytes .../textures/block/controller/center_base.png | Bin 0 -> 533 bytes .../block/controller/center_conflicted.png | Bin 0 -> 514 bytes .../block/controller/center_lights.png | Bin 0 -> 1352 bytes .../block/controller/center_lights.png.mcmeta | 6 + .../block/controller/center_lights_e.png | Bin 0 -> 1196 bytes .../controller/center_lights_e.png.mcmeta | 6 + .../block/controller/horiztonal_base.png | Bin 0 -> 484 bytes .../controller/horiztonal_conflicted.png | Bin 0 -> 484 bytes .../block/controller/horiztonal_lights.png | Bin 0 -> 1008 bytes .../controller/horiztonal_lights.png.mcmeta | 6 + .../block/controller/horiztonal_lights_e.png | Bin 0 -> 932 bytes .../controller/horiztonal_lights_e.png.mcmeta | 6 + .../textures/block/controller/inside_base.png | Bin 0 -> 493 bytes .../block/controller/inside_conflicted.png | Bin 0 -> 470 bytes .../textures/block/controller/top_base.png | Bin 0 -> 537 bytes .../block/controller/top_conflicted.png | Bin 0 -> 512 bytes .../textures/block/controller/top_lights.png | Bin 0 -> 1337 bytes .../block/controller/top_lights.png.mcmeta | 6 + .../block/controller/top_lights_e.png | Bin 0 -> 1245 bytes .../block/controller/top_lights_e.png.mcmeta | 6 + .../block/controller/vertical_base.png | Bin 0 -> 485 bytes .../block/controller/vertical_conflicted.png | Bin 0 -> 485 bytes .../block/controller/vertical_lights.png | Bin 0 -> 1125 bytes .../controller/vertical_lights.png.mcmeta | 6 + .../block/controller/vertical_lights_e.png | Bin 0 -> 1002 bytes .../controller/vertical_lights_e.png.mcmeta | 6 + .../assets/ae2/textures/block/crank.png | Bin 0 -> 754 bytes .../assets/ae2/textures/block/crank_base.png | Bin 0 -> 435 bytes .../textures/block/creative_energy_cell.png | Bin 0 -> 464 bytes .../ae2/textures/block/cut_quartz_block.png | Bin 0 -> 3417 bytes .../textures/block/damaged_budding_quartz.png | Bin 0 -> 268 bytes .../ae2/textures/block/dense_energy_cell.png | Bin 0 -> 481 bytes .../textures/block/dense_energy_cell_0.png | Bin 0 -> 476 bytes .../textures/block/dense_energy_cell_1.png | Bin 0 -> 477 bytes .../textures/block/dense_energy_cell_2.png | Bin 0 -> 494 bytes .../textures/block/dense_energy_cell_3.png | Bin 0 -> 490 bytes .../textures/block/dense_energy_cell_4.png | Bin 0 -> 476 bytes .../block/drive/cells/16k_fluid_cell.png | Bin 0 -> 3756 bytes .../block/drive/cells/16k_item_cell.png | Bin 0 -> 3060 bytes .../block/drive/cells/1k_fluid_cell.png | Bin 0 -> 3665 bytes .../block/drive/cells/1k_item_cell.png | Bin 0 -> 3060 bytes .../block/drive/cells/256k_fluid_cell.png | Bin 0 -> 540 bytes .../block/drive/cells/256k_item_cell.png | Bin 0 -> 547 bytes .../block/drive/cells/4k_fluid_cell.png | Bin 0 -> 3756 bytes .../block/drive/cells/4k_item_cell.png | Bin 0 -> 3060 bytes .../block/drive/cells/64k_fluid_cell.png | Bin 0 -> 3756 bytes .../block/drive/cells/64k_item_cell.png | Bin 0 -> 3060 bytes .../block/drive/cells/creative_cell.png | Bin 0 -> 3048 bytes .../block/drive/cells/default_cell.png | Bin 0 -> 3060 bytes .../ae2/textures/block/drive/drive_bottom.png | Bin 0 -> 423 bytes .../block/drive/drive_cell_states.png | Bin 0 -> 2925 bytes .../ae2/textures/block/drive/drive_front.png | Bin 0 -> 457 bytes .../textures/block/drive/drive_front_flat.png | Bin 0 -> 457 bytes .../ae2/textures/block/drive/drive_inside.png | Bin 0 -> 447 bytes .../ae2/textures/block/drive/drive_side.png | Bin 0 -> 460 bytes .../ae2/textures/block/drive/drive_top.png | Bin 0 -> 442 bytes .../ae2/textures/block/energy_acceptor.png | Bin 0 -> 476 bytes .../assets/ae2/textures/block/energy_cell.png | Bin 0 -> 481 bytes .../ae2/textures/block/energy_cell_0.png | Bin 0 -> 476 bytes .../ae2/textures/block/energy_cell_1.png | Bin 0 -> 477 bytes .../ae2/textures/block/energy_cell_2.png | Bin 0 -> 494 bytes .../ae2/textures/block/energy_cell_3.png | Bin 0 -> 490 bytes .../ae2/textures/block/energy_cell_4.png | Bin 0 -> 476 bytes .../textures/block/flawed_budding_quartz.png | Bin 0 -> 277 bytes .../block/flawless_budding_quartz.png | Bin 0 -> 278 bytes .../assets/ae2/textures/block/fluix_block.png | Bin 0 -> 3706 bytes .../textures/block/glass/quartz_glass_a.png | Bin 0 -> 385 bytes .../textures/block/glass/quartz_glass_b.png | Bin 0 -> 384 bytes .../textures/block/glass/quartz_glass_c.png | Bin 0 -> 375 bytes .../textures/block/glass/quartz_glass_d.png | Bin 0 -> 363 bytes .../block/glass/quartz_glass_frame0001.png | Bin 0 -> 384 bytes .../block/glass/quartz_glass_frame0010.png | Bin 0 -> 384 bytes .../block/glass/quartz_glass_frame0011.png | Bin 0 -> 407 bytes .../block/glass/quartz_glass_frame0100.png | Bin 0 -> 384 bytes .../block/glass/quartz_glass_frame0101.png | Bin 0 -> 398 bytes .../block/glass/quartz_glass_frame0110.png | Bin 0 -> 405 bytes .../block/glass/quartz_glass_frame0111.png | Bin 0 -> 419 bytes .../block/glass/quartz_glass_frame1000.png | Bin 0 -> 392 bytes .../block/glass/quartz_glass_frame1001.png | Bin 0 -> 408 bytes .../block/glass/quartz_glass_frame1010.png | Bin 0 -> 408 bytes .../block/glass/quartz_glass_frame1011.png | Bin 0 -> 420 bytes .../block/glass/quartz_glass_frame1100.png | Bin 0 -> 407 bytes .../block/glass/quartz_glass_frame1101.png | Bin 0 -> 418 bytes .../block/glass/quartz_glass_frame1110.png | Bin 0 -> 417 bytes .../block/glass/quartz_glass_frame1111.png | Bin 0 -> 427 bytes .../ae2/textures/block/growth_accelerator.png | Bin 0 -> 464 bytes .../textures/block/growth_accelerator_on.png | Bin 0 -> 697 bytes .../block/growth_accelerator_on.png.mcmeta | 6 + .../block/growth_accelerator_side.png | Bin 0 -> 470 bytes .../block/growth_accelerator_side_on.png | Bin 0 -> 733 bytes .../growth_accelerator_side_on.png.mcmeta | 6 + .../ae2/textures/block/large_quartz_bud.png | Bin 0 -> 1112 bytes .../ae2/textures/block/medium_quartz_bud.png | Bin 0 -> 1069 bytes .../ae2/textures/block/metal_bottom.png | Bin 0 -> 428 bytes .../ae2/textures/block/metal_inside.png | Bin 0 -> 460 bytes .../assets/ae2/textures/block/metal_side.png | Bin 0 -> 451 bytes .../assets/ae2/textures/block/metal_top.png | Bin 0 -> 442 bytes .../ae2/textures/block/quartz_block.png | Bin 0 -> 256 bytes .../ae2/textures/block/quartz_block_side.png | Bin 0 -> 259 bytes .../ae2/textures/block/quartz_bricks.png | Bin 0 -> 3872 bytes .../textures/block/quartz_capstone_left.png | Bin 0 -> 3863 bytes .../textures/block/quartz_capstone_rigth.png | Bin 0 -> 3862 bytes .../ae2/textures/block/quartz_cluster.png | Bin 0 -> 1128 bytes .../ae2/textures/block/quartz_fixture.png | Bin 0 -> 265 bytes .../textures/block/quartz_fixture_metal.png | Bin 0 -> 445 bytes .../block/quartz_growth_accelerator.png | Bin 0 -> 464 bytes .../block/quartz_growth_accelerator_on.png | Bin 0 -> 697 bytes .../quartz_growth_accelerator_on.png.mcmeta | 6 + .../block/quartz_growth_accelerator_side.png | Bin 0 -> 470 bytes .../quartz_growth_accelerator_side_on.png | Bin 0 -> 733 bytes ...artz_growth_accelerator_side_on.png.mcmeta | 6 + .../ae2/textures/block/quartz_pillar_side.png | Bin 0 -> 3839 bytes .../ae2/textures/block/quartz_pillar_top.png | Bin 0 -> 3861 bytes .../ae2/textures/block/sky_stone_block.png | Bin 0 -> 443 bytes .../ae2/textures/block/sky_stone_brick.png | Bin 0 -> 460 bytes .../textures/block/sky_stone_small_brick.png | Bin 0 -> 463 bytes .../ae2/textures/block/sky_stone_tank.png | Bin 0 -> 467 bytes .../textures/block/sky_stone_tank_bottom.png | Bin 0 -> 465 bytes .../ae2/textures/block/sky_stone_tank_top.png | Bin 0 -> 432 bytes .../ae2/textures/block/skyblockchest.png | Bin 0 -> 898 bytes .../assets/ae2/textures/block/skychest.png | Bin 0 -> 898 bytes .../ae2/textures/block/small_quartz_bud.png | Bin 0 -> 1052 bytes .../textures/block/smooth_quartz_block.png | Bin 0 -> 3852 bytes .../textures/block/smooth_sky_stone_block.png | Bin 0 -> 456 bytes .../textures/block/spatial_anchor_bottom.png | Bin 0 -> 414 bytes .../textures/block/spatial_anchor_side.png | Bin 0 -> 487 bytes .../block/spatial_anchor_side_off.png | Bin 0 -> 487 bytes .../ae2/textures/block/spatial_anchor_top.png | Bin 0 -> 485 bytes .../textures/block/spatial_anchor_top_off.png | Bin 0 -> 485 bytes .../ae2/textures/block/spatial_pylon.png | Bin 0 -> 1057 bytes .../ae2/textures/block/spatial_pylon/base.png | Bin 0 -> 477 bytes .../textures/block/spatial_pylon/base_end.png | Bin 0 -> 465 bytes .../block/spatial_pylon/base_spanned.png | Bin 0 -> 418 bytes .../ae2/textures/block/spatial_pylon/dim.png | Bin 0 -> 448 bytes .../textures/block/spatial_pylon/dim_end.png | Bin 0 -> 468 bytes .../block/spatial_pylon/dim_spanned.png | Bin 0 -> 471 bytes .../ae2/textures/block/spatial_pylon/red.png | Bin 0 -> 448 bytes .../textures/block/spatial_pylon/red_end.png | Bin 0 -> 468 bytes .../block/spatial_pylon/red_spanned.png | Bin 0 -> 471 bytes .../assets/ae2/textures/block/tnt_bottom.png | Bin 0 -> 478 bytes .../assets/ae2/textures/block/tnt_side.png | Bin 0 -> 499 bytes .../assets/ae2/textures/block/tnt_top.png | Bin 0 -> 502 bytes .../ae2/textures/block/vibration_chamber.png | Bin 0 -> 569 bytes .../textures/block/vibration_chamber_back.png | Bin 0 -> 854 bytes .../block/vibration_chamber_back_on.png | Bin 0 -> 888 bytes .../vibration_chamber_back_on.png.mcmeta | 5 + .../block/vibration_chamber_bottom.png | Bin 0 -> 768 bytes .../block/vibration_chamber_front.png | Bin 0 -> 856 bytes .../block/vibration_chamber_front_on.png | Bin 0 -> 899 bytes .../vibration_chamber_front_on.png.mcmeta | 6 + .../textures/block/vibration_chamber_top.png | Bin 0 -> 811 bytes .../textures/gui/sprites/small_scroller.png | Bin 0 -> 429 bytes .../gui/sprites/small_scroller_disabled.png | Bin 0 -> 436 bytes .../assets/ae2/textures/guis/background.png | Bin 0 -> 775 bytes .../assets/ae2/textures/guis/checkbox.png | Bin 0 -> 592 bytes .../assets/ae2/textures/guis/crafting.png | Bin 0 -> 1986 bytes .../ae2/textures/guis/pattern_modes.png | Bin 0 -> 1911 bytes .../assets/ae2/textures/guis/states.png | Bin 0 -> 16310 bytes .../assets/ae2/textures/guis/terminal.png | Bin 0 -> 1827 bytes .../ae2/textures/item/advanced_card.png | Bin 0 -> 529 bytes .../ae2/textures/item/annihilation_core.png | Bin 0 -> 598 bytes .../assets/ae2/textures/item/basic_card.png | Bin 0 -> 519 bytes .../ae2/textures/item/blank_pattern.png | Bin 0 -> 308 bytes .../textures/item/calculation_processor.png | Bin 0 -> 521 bytes .../item/calculation_processor_press.png | Bin 0 -> 479 bytes .../ae2/textures/item/card_capacity.png | Bin 0 -> 556 bytes .../ae2/textures/item/card_crafting.png | Bin 0 -> 556 bytes .../assets/ae2/textures/item/card_energy.png | Bin 0 -> 566 bytes .../textures/item/card_equal_distribution.png | Bin 0 -> 563 bytes .../assets/ae2/textures/item/card_fuzzy.png | Bin 0 -> 562 bytes .../ae2/textures/item/card_inverter.png | Bin 0 -> 562 bytes .../ae2/textures/item/card_redstone.png | Bin 0 -> 559 bytes .../assets/ae2/textures/item/card_speed.png | Bin 0 -> 563 bytes .../assets/ae2/textures/item/card_void.png | Bin 0 -> 557 bytes .../ae2/textures/item/cell_component_16k.png | Bin 0 -> 555 bytes .../ae2/textures/item/cell_component_1k.png | Bin 0 -> 534 bytes .../ae2/textures/item/cell_component_256k.png | Bin 0 -> 923 bytes .../ae2/textures/item/cell_component_4k.png | Bin 0 -> 526 bytes .../ae2/textures/item/cell_component_64k.png | Bin 0 -> 583 bytes .../ae2/textures/item/certus_quartz_axe.png | Bin 0 -> 476 bytes .../textures/item/certus_quartz_crystal.png | Bin 0 -> 257 bytes .../item/certus_quartz_crystal_charged.png | Bin 0 -> 1929 bytes .../certus_quartz_crystal_charged.png.mcmeta | 5 + .../item/certus_quartz_cutting_knife.png | Bin 0 -> 457 bytes .../ae2/textures/item/certus_quartz_dust.png | Bin 0 -> 435 bytes .../ae2/textures/item/certus_quartz_hoe.png | Bin 0 -> 470 bytes .../textures/item/certus_quartz_pickaxe.png | Bin 0 -> 470 bytes .../textures/item/certus_quartz_shovel.png | Bin 0 -> 463 bytes .../ae2/textures/item/certus_quartz_sword.png | Bin 0 -> 480 bytes .../textures/item/certus_quartz_wrench.png | Bin 0 -> 449 bytes .../ae2/textures/item/crafting_pattern.png | Bin 0 -> 538 bytes .../textures/item/creative_storage_cell.png | Bin 0 -> 300 bytes .../textures/item/engineering_processor.png | Bin 0 -> 521 bytes .../item/engineering_processor_press.png | Bin 0 -> 483 bytes .../ae2/textures/item/fluid_cell_housing.png | Bin 0 -> 1803 bytes .../textures/item/fluid_storage_cell_16k.png | Bin 0 -> 661 bytes .../textures/item/fluid_storage_cell_1k.png | Bin 0 -> 671 bytes .../textures/item/fluid_storage_cell_256k.png | Bin 0 -> 671 bytes .../textures/item/fluid_storage_cell_4k.png | Bin 0 -> 671 bytes .../textures/item/fluid_storage_cell_64k.png | Bin 0 -> 671 bytes .../assets/ae2/textures/item/fluix_axe.png | Bin 0 -> 805 bytes .../ae2/textures/item/fluix_crystal.png | Bin 0 -> 3976 bytes .../assets/ae2/textures/item/fluix_dust.png | Bin 0 -> 445 bytes .../assets/ae2/textures/item/fluix_hoe.png | Bin 0 -> 796 bytes .../assets/ae2/textures/item/fluix_pearl.png | Bin 0 -> 469 bytes .../ae2/textures/item/fluix_pickaxe.png | Bin 0 -> 799 bytes .../assets/ae2/textures/item/fluix_shovel.png | Bin 0 -> 794 bytes .../assets/ae2/textures/item/fluix_sword.png | Bin 0 -> 802 bytes .../item/fluix_upgrade_smithing_template.png | Bin 0 -> 802 bytes .../ae2/textures/item/formation_core.png | Bin 0 -> 598 bytes .../ae2/textures/item/item_cell_housing.png | Bin 0 -> 269 bytes .../textures/item/item_storage_cell_16k.png | Bin 0 -> 299 bytes .../textures/item/item_storage_cell_1k.png | Bin 0 -> 309 bytes .../textures/item/item_storage_cell_256k.png | Bin 0 -> 678 bytes .../textures/item/item_storage_cell_4k.png | Bin 0 -> 309 bytes .../textures/item/item_storage_cell_64k.png | Bin 0 -> 309 bytes .../ae2/textures/item/logic_processor.png | Bin 0 -> 521 bytes .../textures/item/logic_processor_press.png | Bin 0 -> 473 bytes .../ae2/textures/item/nether_quartz_axe.png | Bin 0 -> 464 bytes .../item/nether_quartz_cutting_knife.png | Bin 0 -> 448 bytes .../ae2/textures/item/nether_quartz_hoe.png | Bin 0 -> 463 bytes .../textures/item/nether_quartz_pickaxe.png | Bin 0 -> 476 bytes .../textures/item/nether_quartz_shovel.png | Bin 0 -> 464 bytes .../ae2/textures/item/nether_quartz_sword.png | Bin 0 -> 485 bytes .../textures/item/nether_quartz_wrench.png | Bin 0 -> 459 bytes .../item/printed_calculation_processor.png | Bin 0 -> 470 bytes .../item/printed_engineering_processor.png | Bin 0 -> 470 bytes .../textures/item/printed_logic_processor.png | Bin 0 -> 470 bytes .../ae2/textures/item/printed_silicon.png | Bin 0 -> 470 bytes .../ae2/textures/item/processing_pattern.png | Bin 0 -> 510 bytes .../assets/ae2/textures/item/quartz_glass.png | Bin 0 -> 446 bytes .../assets/ae2/textures/item/silicon.png | Bin 0 -> 469 bytes .../ae2/textures/item/silicon_press.png | Bin 0 -> 479 bytes .../assets/ae2/textures/item/singularity.png | Bin 0 -> 1488 bytes .../ae2/textures/item/singularity.png.mcmeta | 5 + .../assets/ae2/textures/item/sky_dust.png | Bin 0 -> 448 bytes .../textures/item/smithing_table_pattern.png | Bin 0 -> 535 bytes .../item/spatial_cell_component_128.png | Bin 0 -> 550 bytes .../item/spatial_cell_component_16.png | Bin 0 -> 520 bytes .../item/spatial_cell_component_2.png | Bin 0 -> 517 bytes .../ae2/textures/item/spatial_pylon.png | Bin 0 -> 516 bytes .../item/spatial_storage_cell_128.png | Bin 0 -> 305 bytes .../textures/item/spatial_storage_cell_16.png | Bin 0 -> 351 bytes .../textures/item/spatial_storage_cell_2.png | Bin 0 -> 303 bytes .../textures/item/stonecutting_pattern.png | Bin 0 -> 535 bytes .../assets/ae2/textures/item/view_cell.png | Bin 0 -> 305 bytes .../ae2/textures/item/wireless_receiver.png | Bin 0 -> 504 bytes .../ae2/textures/models/skyblockchest.png | Bin 0 -> 898 bytes .../assets/ae2/textures/models/skychest.png | Bin 0 -> 898 bytes datapacks/ReApplied/pack.mcmeta | 6 + datapacks/ReApplied/pack.png | Bin 0 -> 27218 bytes .../data/idas/advancements/ancient_mines.json | 44 + .../idas/advancements/apothecary_abode.json | 43 + .../data/idas/advancements/bearclaw_inn.json | 43 + .../data/idas/advancements/castle.json | 43 + .../idas/advancements/enchantingtower.json | 43 + .../idas/advancements/fishermans_lodge.json | 43 + .../data/idas/advancements/hunters_cabin.json | 43 + .../data/idas/advancements/idas_root.json | 22 + .../data/idas/advancements/labyrinth.json | 44 + .../idas/advancements/necromancers_spire.json | 43 + .../data/idas/advancements/nexus.json | 44 + .../idas/advancements/pillager_fortress.json | 44 + .../data/idas/advancements/redhorn_guild.json | 43 + .../data/idas/advancements/sunken_ship.json | 43 + .../idas/advancements/tinkers_workshop.json | 44 + .../data/idas/advancements/winter_wagon.json | 43 + .../idas/advancements/witches_treestump.json | 43 + .../data/idas/advancements/wizardtower.json | 43 + .../ancient_mines_bottom.json | 8 + .../ancient_mines_top.json | 16 + .../generic.json | 16 + .../labyrinth.json | 12 + .../integrated_structure_spawners/nexus.json | 8 + .../pillager.json | 8 + .../sunken_ship.json | 8 + .../tinkers_workshop.json | 16 + .../tinkers_workshop_tuff.json | 8 + .../wizard_tower.json | 8 + .../chests/abandonedhouse/abandonedhouse.json | 462 +++ .../abandonedhouse/abandonedhouse_create.json | 313 ++ .../abandonedhouse_library.json | 157 + .../chests/ancient_mines/minesbasic.json | 395 +++ .../chests/ancient_mines/minescreate.json | 313 ++ .../chests/ancient_mines/mineshall.json | 749 +++++ .../ancient_portal/ancient_portal_nether.json | 350 +++ .../ancient_portal_overworld.json | 350 +++ .../ancient_statue/ancient_statue_jungle.json | 400 +++ .../ancient_statue_treasure_desert.json | 348 +++ .../ancient_statue_treasure_jungle.json | 195 ++ .../ancient_statue_treasure_plains.json | 195 ++ .../apothecary_abode/apothecary_abode.json | 525 ++++ .../apothecary_abode_books.json | 157 + .../loot_tables/chests/bazaar/bazaar.json | 499 ++++ .../chests/bazaar/bazaar_food.json | 244 ++ .../chests/bazaar/bazaar_tools.json | 275 ++ .../bearclaw_inn/bearclaw_inn_bedroom.json | 564 ++++ .../bearclaw_inn/bearclaw_inn_food.json | 264 ++ .../beekeepers_house/beekeepers_bedroom.json | 358 +++ .../beekeepers_house/beekeepers_food.json | 249 ++ .../beekeepers_house/beekeepers_tools.json | 275 ++ .../chests/brickhouse/brickhouse.json | 462 +++ .../chests/brickhouse/brickhouse_library.json | 157 + .../brickhouse/brickhouse_windmill.json | 107 + .../loot_tables/chests/castle/castle.json | 462 +++ .../chests/castle/castle_library.json | 157 + .../chests/castle/castle_throne.json | 267 ++ .../loot_tables/chests/cottage/cottage.json | 220 ++ .../enchantingtower_basic.json | 462 +++ .../enchantingtower_library.json | 157 + .../enchantingtower/enchantingtower_top.json | 266 ++ .../chests/farmhouse/farmhouse.json | 379 +++ .../chests/farmhouse/farmhouse_bedroom.json | 307 ++ .../chests/farmhouse/farmhouse_food.json | 240 ++ .../chests/farmhouse/farmhouse_mill.json | 107 + .../fishermans_lodge/fishermans_lodge.json | 227 ++ .../fishermans_lodge_tools.json | 256 ++ .../chests/haunted_manor/haunted_manor.json | 252 ++ .../haunted_manor/haunted_manor_library.json | 157 + .../haunted_manor/haunted_manor_tools.json | 288 ++ .../haunted_manor/haunted_manor_treasure.json | 251 ++ .../chests/hauntedhouse/bophauntedhouse.json | 247 ++ .../chests/hauntedhouse/hauntedhouse.json | 247 ++ .../chests/hermits_hollow/hollow_bedroom.json | 307 ++ .../chests/hermits_hollow/hollow_food.json | 240 ++ .../chests/hunters_cabin/hunters_cabin.json | 350 +++ .../hunters_cabin/hunters_cabin_library.json | 157 + .../hunters_cabin/hunters_cabin_tools.json | 270 ++ .../chests/labyrinth/labyrinth.json | 401 +++ .../chests/labyrinth/labyrinth_croc.json | 242 ++ .../chests/labyrinth/labyrinth_library.json | 157 + .../chests/labyrinth/labyrinth_tomb.json | 403 +++ .../chests/labyrinth/labyrinth_treasure.json | 267 ++ .../necromancers_spire.json | 305 ++ .../idas/loot_tables/chests/nexus/nexus.json | 296 ++ .../chests/pillager_camp/pillager_camp.json | 354 +++ .../pillager_fortress/pillager_basic.json | 462 +++ .../pillager_fortress/pillager_bedroom.json | 392 +++ .../pillager_fortress/pillager_jail.json | 404 +++ .../pillager_fortress/pillager_library.json | 156 + .../chests/redhorn_guild/redhorn_guild.json | 462 +++ .../redhorn_guild/redhorn_guild_bedroom.json | 463 +++ .../redhorn_guild/redhorn_guild_tools.json | 256 ++ .../sunken_ship/sunken_ship_supply.json | 692 +++++ .../sunken_ship/sunken_ship_treasure.json | 211 ++ .../tinkers_workshop/tinkers_workshop.json | 361 +++ .../tinkers_workshop_basic.json | 462 +++ .../tinkers_workshop_bedroom.json | 463 +++ .../tinkers_workshop_tools.json | 337 +++ .../tinkers_workshop_vault.json | 264 ++ .../chests/treetop_tavern/treetop_tavern.json | 246 ++ .../treetop_tavern_bedroom.json | 321 ++ .../treetop_tavern/treetop_tavern_food.json | 238 ++ .../treetop_tavern/treetop_tavern_tools.json | 231 ++ .../chests/winter_wagon/winter_wagon.json | 425 +++ .../winter_wagon/winter_wagon_tools.json | 275 ++ .../witches_treestump/witches_treestump.json | 468 +++ .../chests/wizardtower/wizardtower_basic.json | 462 +++ .../wizardtower/wizardtower_library.json | 157 + .../chests/wizardtower/wizardtower_top.json | 266 ++ .../idas/structures/labyrinth/bopfloor2.nbt | Bin 0 -> 118191 bytes .../data/idas/structures/labyrinth/floor2.nbt | Bin 0 -> 121453 bytes .../template_pool/animal_den/forest_den.json | 24 + datapacks/idasalexsmobs-1.20/pack.mcmeta | 7 + mods/bedrock-camera-command-1.0.0.jar | Bin 0 -> 83898 bytes .../ComplementaryUnbound_r5.4/.gitignore | 1 + .../HOW TO INSTALL.txt | 5 + .../ComplementaryUnbound_r5.4/License.txt | 92 + .../shaderFile_1/shaderFile_L.placebo | Bin 0 -> 17614 bytes .../shaderFile_2/shaderFile_R.placebo | 1 + .../shaderFile_A.placebo | 1 + .../shaderFile_B.placebo | 1 + .../shaderFile_C.placebo | 1 + .../shaderFile_D.placebo | 1 + .../shaderFile_Versions.txt | 2 + .../shaders/block.properties | 454 +++ .../shaders/dimension.properties | 8 + .../shaders/entity.properties | 39 + .../shaders/item.properties | 65 + .../shaders/lang/en_US.lang | 1051 +++++++ .../shaders/lib/antialiasing/fxaa.glsl | 151 + .../shaders/lib/antialiasing/jitter.glsl | 19 + .../shaders/lib/antialiasing/taa.glsl | 156 + .../lib/atmospherics/auroraBorealis.glsl | 72 + .../lib/atmospherics/clouds/cloudCoord.glsl | 30 + .../lib/atmospherics/clouds/mainClouds.glsl | 108 + .../atmospherics/clouds/reimaginedClouds.glsl | 142 + .../atmospherics/clouds/unboundClouds.glsl | 217 ++ .../shaders/lib/atmospherics/enderBeams.glsl | 57 + .../shaders/lib/atmospherics/enderStars.glsl | 29 + .../lib/atmospherics/fog/bloomFog.glsl | 42 + .../lib/atmospherics/fog/caveFactor.glsl | 7 + .../lib/atmospherics/fog/coloredLightFog.glsl | 51 + .../shaders/lib/atmospherics/fog/mainFog.glsl | 258 ++ .../lib/atmospherics/fog/waterFog.glsl | 19 + .../shaders/lib/atmospherics/netherStorm.glsl | 83 + .../shaders/lib/atmospherics/nightNebula.glsl | 106 + .../shaders/lib/atmospherics/rainbow.glsl | 56 + .../shaders/lib/atmospherics/sky.glsl | 127 + .../shaders/lib/atmospherics/stars.glsl | 39 + .../lib/atmospherics/volumetricLight.glsl | 338 +++ .../shaders/lib/colors/blocklightColors.glsl | 220 ++ .../shaders/lib/colors/cloudColors.glsl | 3 + .../shaders/lib/colors/colorMultipliers.glsl | 58 + .../lib/colors/lightAndAmbientColors.glsl | 77 + .../lib/colors/moonPhaseInfluence.glsl | 13 + .../shaders/lib/colors/skyColors.glsl | 52 + .../shaders/lib/common.glsl | 764 +++++ .../shaders/lib/lighting/ggx.glsl | 60 + .../shaders/lib/lighting/mainLighting.glsl | 615 ++++ .../shaders/lib/lighting/shadowSampling.glsl | 118 + .../blockEntityMaterials.glsl | 107 + .../materialHandling/customMaterials.glsl | 157 + .../materialHandling/deferredMaterials.glsl | 72 + .../materialHandling/entityMaterials.glsl | 209 ++ .../materialHandling/irisMaterials.glsl | 226 ++ .../materialHandling/terrainMaterials.glsl | 2625 +++++++++++++++++ .../translucentMaterials.glsl | 140 + .../materialMethods/anisotropicFiltering.glsl | 60 + .../materialMethods/coatedTextures.glsl | 30 + .../materialMethods/connectedGlass.glsl | 117 + .../materialMethods/customEmission.glsl | 35 + .../materialMethods/generatedNormals.glsl | 85 + .../materials/materialMethods/pomEffects.glsl | 121 + .../materialMethods/reflections.glsl | 245 ++ .../materials/materialMethods/refraction.glsl | 42 + .../materials/materialMethods/snowyWorld.glsl | 19 + .../materialMethods/wavingBlocks.glsl | 178 ++ .../entities/glowItemFrame.glsl | 1 + .../specificMaterials/entities/itemFrame.glsl | 1 + .../entities/lightningBolt.glsl | 6 + .../others/endPortalEffect.glsl | 101 + .../specificMaterials/others/signText.glsl | 15 + .../specificMaterials/others/trident.glsl | 4 + .../planks/acaciaPlanks.glsl | 6 + .../planks/bambooPlanks.glsl | 3 + .../specificMaterials/planks/birchPlanks.glsl | 6 + .../planks/cherryPlanks.glsl | 6 + .../planks/crimsonPlanks.glsl | 6 + .../planks/darkOakPlanks.glsl | 6 + .../planks/junglePlanks.glsl | 7 + .../planks/mangrovePlanks.glsl | 3 + .../specificMaterials/planks/oakPlanks.glsl | 7 + .../planks/paleOakPlanks.glsl | 6 + .../planks/sprucePlanks.glsl | 7 + .../planks/warpedPlanks.glsl | 6 + .../specificMaterials/terrain/anvil.glsl | 6 + .../specificMaterials/terrain/blackstone.glsl | 2 + .../specificMaterials/terrain/candle.glsl | 7 + .../terrain/cobblestone.glsl | 3 + .../terrain/copperBlock.glsl | 10 + .../specificMaterials/terrain/copperBulb.glsl | 20 + .../specificMaterials/terrain/coral.glsl | 7 + .../terrain/cryingObsidian.glsl | 11 + .../specificMaterials/terrain/deepslate.glsl | 3 + .../terrain/diamondBlock.glsl | 25 + .../specificMaterials/terrain/dirt.glsl | 1 + .../terrain/emeraldBlock.glsl | 14 + .../terrain/endPortalFrame.glsl | 3 + .../specificMaterials/terrain/endStone.glsl | 7 + .../specificMaterials/terrain/froglights.glsl | 14 + .../specificMaterials/terrain/goldBlock.glsl | 20 + .../specificMaterials/terrain/ironBlock.glsl | 14 + .../terrain/lanternMetal.glsl | 6 + .../specificMaterials/terrain/lapisBlock.glsl | 6 + .../specificMaterials/terrain/lava.glsl | 30 + .../specificMaterials/terrain/leaves.glsl | 26 + .../terrain/netheriteBlock.glsl | 8 + .../specificMaterials/terrain/netherrack.glsl | 7 + .../specificMaterials/terrain/oakWood.glsl | 3 + .../specificMaterials/terrain/obsidian.glsl | 13 + .../terrain/paleOakWood.glsl | 2 + .../specificMaterials/terrain/pumpkin.glsl | 1 + .../terrain/quartzBlock.glsl | 19 + .../terrain/rawCopperBlock.glsl | 4 + .../terrain/rawGoldBlock.glsl | 3 + .../terrain/rawIronBlock.glsl | 3 + .../terrain/redstoneBlock.glsl | 11 + .../terrain/redstoneTorch.glsl | 19 + .../specificMaterials/terrain/snow.glsl | 12 + .../specificMaterials/terrain/stone.glsl | 7 + .../specificMaterials/translucents/glass.glsl | 22 + .../translucents/netherPortal.glsl | 68 + .../translucents/stainedGlass.glsl | 3 + .../specificMaterials/translucents/water.glsl | 271 ++ .../shaders/lib/misc/colorCodedPrograms.glsl | 46 + .../shaders/lib/misc/darkOutline.glsl | 52 + .../shaders/lib/misc/distantLightBokeh.glsl | 21 + .../shaders/lib/misc/handSway.glsl | 13 + .../shaders/lib/misc/lensFlare.glsl | 121 + .../shaders/lib/misc/pixelation.glsl | 112 + .../shaders/lib/misc/puddleVoxelization.glsl | 35 + .../shaders/lib/misc/showLightLevels.glsl | 42 + .../shaders/lib/misc/voxelization.glsl | 322 ++ .../shaders/lib/misc/worldOutline.glsl | 43 + .../shaders/lib/pipelineSettings.glsl | 31 + .../lib/textRendering/error_apple_acl.glsl | 53 + .../textRendering/error_coordinates_acl.glsl | 36 + .../lib/textRendering/error_optifine_acl.glsl | 78 + .../lib/textRendering/error_optifine_af.glsl | 55 + .../error_shadowdistance_acl.glsl | 46 + .../lib/textRendering/textRenderer.glsl | 329 +++ .../shaders/lib/textures/cloud-water.png | Bin 0 -> 104834 bytes .../lib/textures/cloud-water.png.mcmeta | 7 + .../shaders/lib/textures/cucumber.png | Bin 0 -> 2952 bytes .../shaders/lib/textures/cucumber.png.mcmeta | 7 + .../shaders/lib/textures/noise.png | Bin 0 -> 48135 bytes .../shaders/lib/textures/noise.png.mcmeta | 7 + .../shaders/lib/uniforms.glsl | 161 + .../shaders/lib/util/commonFunctions.glsl | 259 ++ .../shaders/lib/util/dFdxdFdy.glsl | 6 + .../shaders/lib/util/dither.glsl | 13 + .../shaders/lib/util/miplevel.glsl | 15 + .../shaders/lib/util/spaceConversion.glsl | 28 + .../shaders/program/composite.glsl | 268 ++ .../shaders/program/composite2.glsl | 141 + .../shaders/program/composite3.glsl | 188 ++ .../shaders/program/composite4.glsl | 96 + .../shaders/program/composite5.glsl | 222 ++ .../shaders/program/composite6.glsl | 79 + .../shaders/program/composite7.glsl | 58 + .../shaders/program/deferred1.glsl | 548 ++++ .../shaders/program/dh_terrain.glsl | 187 ++ .../shaders/program/dh_water.glsl | 239 ++ .../shaders/program/final.glsl | 156 + .../shaders/program/gbuffers_armor_glint.glsl | 73 + .../shaders/program/gbuffers_basic.glsl | 178 ++ .../shaders/program/gbuffers_beaconbeam.glsl | 103 + .../shaders/program/gbuffers_block.glsl | 288 ++ .../shaders/program/gbuffers_clouds.glsl | 150 + .../program/gbuffers_damagedblock.glsl | 63 + .../shaders/program/gbuffers_entities.glsl | 303 ++ .../shaders/program/gbuffers_hand.glsl | 263 ++ .../shaders/program/gbuffers_skybasic.glsl | 214 ++ .../shaders/program/gbuffers_skytextured.glsl | 153 + .../shaders/program/gbuffers_spidereyes.glsl | 75 + .../shaders/program/gbuffers_terrain.glsl | 491 +++ .../shaders/program/gbuffers_textured.glsl | 241 ++ .../shaders/program/gbuffers_water.glsl | 373 +++ .../shaders/program/gbuffers_weather.glsl | 95 + .../shaders/program/shadow.glsl | 317 ++ .../shaders/program/shadowcomp.glsl | 137 + .../shaders/program/template.glsl | 42 + .../shaders/shaders.properties | 209 ++ .../shaders/world-1/composite.fsh | 7 + .../shaders/world-1/composite.vsh | 7 + .../shaders/world-1/composite2.fsh | 7 + .../shaders/world-1/composite2.vsh | 7 + .../shaders/world-1/composite3.fsh | 7 + .../shaders/world-1/composite3.vsh | 7 + .../shaders/world-1/composite4.fsh | 7 + .../shaders/world-1/composite4.vsh | 7 + .../shaders/world-1/composite5.fsh | 7 + .../shaders/world-1/composite5.vsh | 7 + .../shaders/world-1/composite6.fsh | 7 + .../shaders/world-1/composite6.vsh | 7 + .../shaders/world-1/composite7.fsh | 7 + .../shaders/world-1/composite7.vsh | 7 + .../shaders/world-1/deferred1.fsh | 7 + .../shaders/world-1/deferred1.vsh | 7 + .../shaders/world-1/dh_terrain.fsh | 7 + .../shaders/world-1/dh_terrain.vsh | 7 + .../shaders/world-1/dh_water.fsh | 7 + .../shaders/world-1/dh_water.vsh | 7 + .../shaders/world-1/final.fsh | 7 + .../shaders/world-1/final.vsh | 7 + .../shaders/world-1/gbuffers_armor_glint.fsh | 7 + .../shaders/world-1/gbuffers_armor_glint.vsh | 7 + .../shaders/world-1/gbuffers_basic.fsh | 7 + .../shaders/world-1/gbuffers_basic.vsh | 7 + .../shaders/world-1/gbuffers_beaconbeam.fsh | 7 + .../shaders/world-1/gbuffers_beaconbeam.vsh | 7 + .../shaders/world-1/gbuffers_block.fsh | 7 + .../shaders/world-1/gbuffers_block.vsh | 7 + .../shaders/world-1/gbuffers_clouds.fsh | 7 + .../shaders/world-1/gbuffers_clouds.vsh | 7 + .../shaders/world-1/gbuffers_damagedblock.fsh | 7 + .../shaders/world-1/gbuffers_damagedblock.vsh | 7 + .../shaders/world-1/gbuffers_entities.fsh | 7 + .../shaders/world-1/gbuffers_entities.vsh | 7 + .../world-1/gbuffers_entities_glowing.fsh | 8 + .../world-1/gbuffers_entities_glowing.vsh | 8 + .../shaders/world-1/gbuffers_hand.fsh | 7 + .../shaders/world-1/gbuffers_hand.vsh | 7 + .../shaders/world-1/gbuffers_line.fsh | 8 + .../shaders/world-1/gbuffers_line.vsh | 8 + .../shaders/world-1/gbuffers_skybasic.fsh | 7 + .../shaders/world-1/gbuffers_skybasic.vsh | 7 + .../shaders/world-1/gbuffers_skytextured.fsh | 7 + .../shaders/world-1/gbuffers_skytextured.vsh | 7 + .../shaders/world-1/gbuffers_spidereyes.fsh | 7 + .../shaders/world-1/gbuffers_spidereyes.vsh | 7 + .../shaders/world-1/gbuffers_terrain.fsh | 7 + .../shaders/world-1/gbuffers_terrain.vsh | 7 + .../shaders/world-1/gbuffers_textured.fsh | 7 + .../shaders/world-1/gbuffers_textured.vsh | 7 + .../shaders/world-1/gbuffers_water.fsh | 7 + .../shaders/world-1/gbuffers_water.vsh | 7 + .../shaders/world-1/gbuffers_weather.fsh | 7 + .../shaders/world-1/gbuffers_weather.vsh | 7 + .../shaders/world-1/shadow.fsh | 7 + .../shaders/world-1/shadow.vsh | 7 + .../shaders/world-1/shadowcomp.csh | 7 + .../shaders/world0/composite.fsh | 7 + .../shaders/world0/composite.vsh | 7 + .../shaders/world0/composite2.fsh | 7 + .../shaders/world0/composite2.vsh | 7 + .../shaders/world0/composite3.fsh | 7 + .../shaders/world0/composite3.vsh | 7 + .../shaders/world0/composite4.fsh | 7 + .../shaders/world0/composite4.vsh | 7 + .../shaders/world0/composite5.fsh | 7 + .../shaders/world0/composite5.vsh | 7 + .../shaders/world0/composite6.fsh | 7 + .../shaders/world0/composite6.vsh | 7 + .../shaders/world0/composite7.fsh | 7 + .../shaders/world0/composite7.vsh | 7 + .../shaders/world0/deferred1.fsh | 7 + .../shaders/world0/deferred1.vsh | 7 + .../shaders/world0/dh_terrain.fsh | 7 + .../shaders/world0/dh_terrain.vsh | 7 + .../shaders/world0/dh_water.fsh | 7 + .../shaders/world0/dh_water.vsh | 7 + .../shaders/world0/final.fsh | 7 + .../shaders/world0/final.vsh | 7 + .../shaders/world0/gbuffers_armor_glint.fsh | 7 + .../shaders/world0/gbuffers_armor_glint.vsh | 7 + .../shaders/world0/gbuffers_basic.fsh | 7 + .../shaders/world0/gbuffers_basic.vsh | 7 + .../shaders/world0/gbuffers_beaconbeam.fsh | 7 + .../shaders/world0/gbuffers_beaconbeam.vsh | 7 + .../shaders/world0/gbuffers_block.fsh | 7 + .../shaders/world0/gbuffers_block.vsh | 7 + .../shaders/world0/gbuffers_clouds.fsh | 7 + .../shaders/world0/gbuffers_clouds.vsh | 7 + .../shaders/world0/gbuffers_damagedblock.fsh | 7 + .../shaders/world0/gbuffers_damagedblock.vsh | 7 + .../shaders/world0/gbuffers_entities.fsh | 7 + .../shaders/world0/gbuffers_entities.vsh | 7 + .../world0/gbuffers_entities_glowing.fsh | 8 + .../world0/gbuffers_entities_glowing.vsh | 8 + .../shaders/world0/gbuffers_hand.fsh | 7 + .../shaders/world0/gbuffers_hand.vsh | 7 + .../shaders/world0/gbuffers_line.fsh | 8 + .../shaders/world0/gbuffers_line.vsh | 8 + .../shaders/world0/gbuffers_skybasic.fsh | 7 + .../shaders/world0/gbuffers_skybasic.vsh | 7 + .../shaders/world0/gbuffers_skytextured.fsh | 7 + .../shaders/world0/gbuffers_skytextured.vsh | 7 + .../shaders/world0/gbuffers_spidereyes.fsh | 7 + .../shaders/world0/gbuffers_spidereyes.vsh | 7 + .../shaders/world0/gbuffers_terrain.fsh | 7 + .../shaders/world0/gbuffers_terrain.vsh | 7 + .../shaders/world0/gbuffers_textured.fsh | 7 + .../shaders/world0/gbuffers_textured.vsh | 7 + .../shaders/world0/gbuffers_water.fsh | 7 + .../shaders/world0/gbuffers_water.vsh | 7 + .../shaders/world0/gbuffers_weather.fsh | 7 + .../shaders/world0/gbuffers_weather.vsh | 7 + .../shaders/world0/shadow.fsh | 7 + .../shaders/world0/shadow.vsh | 7 + .../shaders/world0/shadowcomp.csh | 7 + .../shaders/world1/composite.fsh | 7 + .../shaders/world1/composite.vsh | 7 + .../shaders/world1/composite2.fsh | 7 + .../shaders/world1/composite2.vsh | 7 + .../shaders/world1/composite3.fsh | 7 + .../shaders/world1/composite3.vsh | 7 + .../shaders/world1/composite4.fsh | 7 + .../shaders/world1/composite4.vsh | 7 + .../shaders/world1/composite5.fsh | 7 + .../shaders/world1/composite5.vsh | 7 + .../shaders/world1/composite6.fsh | 7 + .../shaders/world1/composite6.vsh | 7 + .../shaders/world1/composite7.fsh | 7 + .../shaders/world1/composite7.vsh | 7 + .../shaders/world1/deferred1.fsh | 7 + .../shaders/world1/deferred1.vsh | 7 + .../shaders/world1/dh_terrain.fsh | 7 + .../shaders/world1/dh_terrain.vsh | 7 + .../shaders/world1/dh_water.fsh | 7 + .../shaders/world1/dh_water.vsh | 7 + .../shaders/world1/final.fsh | 7 + .../shaders/world1/final.vsh | 7 + .../shaders/world1/gbuffers_armor_glint.fsh | 7 + .../shaders/world1/gbuffers_armor_glint.vsh | 7 + .../shaders/world1/gbuffers_basic.fsh | 7 + .../shaders/world1/gbuffers_basic.vsh | 7 + .../shaders/world1/gbuffers_beaconbeam.fsh | 7 + .../shaders/world1/gbuffers_beaconbeam.vsh | 7 + .../shaders/world1/gbuffers_block.fsh | 7 + .../shaders/world1/gbuffers_block.vsh | 7 + .../shaders/world1/gbuffers_clouds.fsh | 7 + .../shaders/world1/gbuffers_clouds.vsh | 7 + .../shaders/world1/gbuffers_damagedblock.fsh | 7 + .../shaders/world1/gbuffers_damagedblock.vsh | 7 + .../shaders/world1/gbuffers_entities.fsh | 7 + .../shaders/world1/gbuffers_entities.vsh | 7 + .../world1/gbuffers_entities_glowing.fsh | 8 + .../world1/gbuffers_entities_glowing.vsh | 8 + .../shaders/world1/gbuffers_hand.fsh | 7 + .../shaders/world1/gbuffers_hand.vsh | 7 + .../shaders/world1/gbuffers_line.fsh | 8 + .../shaders/world1/gbuffers_line.vsh | 8 + .../shaders/world1/gbuffers_skybasic.fsh | 7 + .../shaders/world1/gbuffers_skybasic.vsh | 7 + .../shaders/world1/gbuffers_skytextured.fsh | 7 + .../shaders/world1/gbuffers_skytextured.vsh | 7 + .../shaders/world1/gbuffers_spidereyes.fsh | 7 + .../shaders/world1/gbuffers_spidereyes.vsh | 7 + .../shaders/world1/gbuffers_terrain.fsh | 7 + .../shaders/world1/gbuffers_terrain.vsh | 7 + .../shaders/world1/gbuffers_textured.fsh | 7 + .../shaders/world1/gbuffers_textured.vsh | 7 + .../shaders/world1/gbuffers_water.fsh | 7 + .../shaders/world1/gbuffers_water.vsh | 7 + .../shaders/world1/gbuffers_weather.fsh | 7 + .../shaders/world1/gbuffers_weather.vsh | 7 + .../shaders/world1/shadow.fsh | 7 + .../shaders/world1/shadow.vsh | 7 + .../shaders/world1/shadowcomp.csh | 7 + shaderpacks/MakeUp-UltraFast-9.1c/Credits | 49 + .../MakeUp-UltraFast-9.1c/ForDevelopers.EN.md | 108 + shaderpacks/MakeUp-UltraFast-9.1c/LICENSE | 165 ++ .../ParaDesarrolladores.ES.md | 109 + shaderpacks/MakeUp-UltraFast-9.1c/README.md | 34 + shaderpacks/MakeUp-UltraFast-9.1c/helpful.txt | 30 + .../shaders/block.properties | 78 + .../shaders/common/basic_blocks_fragment.glsl | 15 + .../shaders/common/basic_blocks_vertex.glsl | 59 + .../common/clouds_blocks_fragment.glsl | 38 + .../shaders/common/clouds_blocks_vertex.glsl | 40 + .../shaders/common/composite1_fragment.glsl | 66 + .../shaders/common/composite1_vertex.glsl | 12 + .../shaders/common/composite2_fragment.glsl | 110 + .../shaders/common/composite2_vertex.glsl | 12 + .../shaders/common/composite_fragment.glsl | 239 ++ .../shaders/common/composite_vertex.glsl | 115 + .../shaders/common/damage_fragment.glsl | 17 + .../shaders/common/damage_vertex.glsl | 27 + .../shaders/common/deferred_fragment.glsl | 199 ++ .../shaders/common/deferred_vertex.glsl | 59 + .../shaders/common/final_fragment.glsl | 150 + .../shaders/common/final_vertex.glsl | 35 + .../shaders/common/glint_blocks_fragment.glsl | 19 + .../shaders/common/glint_blocks_vertex.glsl | 24 + .../shaders/common/line_blocks_fragment.glsl | 13 + .../shaders/common/line_blocks_vertex.glsl | 29 + .../shaders/common/prepare_fragment.glsl | 57 + .../shaders/common/prepare_vertex.glsl | 37 + .../shaders/common/shadow_fragment.glsl | 27 + .../shaders/common/shadow_vertex.glsl | 41 + .../shaders/common/skybasic_fragment.glsl | 92 + .../shaders/common/skybasic_vertex.glsl | 64 + .../shaders/common/skytextured_fragment.glsl | 45 + .../shaders/common/skytextured_vertex.glsl | 46 + .../shaders/common/solid_blocks_fragment.glsl | 233 ++ .../shaders/common/solid_blocks_vertex.glsl | 184 ++ .../common/solid_dh_blocks_fragment.glsl | 84 + .../common/solid_dh_blocks_vertex.glsl | 65 + .../common/solid_dh_water_fragment.glsl | 233 ++ .../shaders/common/solid_dh_water_vertex.glsl | 87 + .../common/spidereyes_blocks_fragment.glsl | 18 + .../common/spidereyes_blocks_vertex.glsl | 27 + .../shaders/common/water_blocks_fragment.glsl | 276 ++ .../shaders/common/water_blocks_vertex.glsl | 135 + .../shaders/composite.fsh | 15 + .../shaders/composite.vsh | 15 + .../shaders/composite1.fsh | 15 + .../shaders/composite1.vsh | 15 + .../shaders/composite2.fsh | 16 + .../shaders/composite2.vsh | 15 + .../shaders/deferred.fsh | 16 + .../shaders/deferred.vsh | 15 + .../shaders/entity.properties | 3 + .../MakeUp-UltraFast-9.1c/shaders/final.fsh | 16 + .../MakeUp-UltraFast-9.1c/shaders/final.vsh | 16 + .../shaders/gbuffers_armor_glint.fsh | 16 + .../shaders/gbuffers_armor_glint.vsh | 17 + .../shaders/gbuffers_basic.fsh | 16 + .../shaders/gbuffers_basic.vsh | 17 + .../shaders/gbuffers_beaconbeam.fsh | 15 + .../shaders/gbuffers_beaconbeam.vsh | 15 + .../shaders/gbuffers_block.fsh | 15 + .../shaders/gbuffers_block.vsh | 15 + .../shaders/gbuffers_clouds.fsh | 17 + .../shaders/gbuffers_clouds.vsh | 16 + .../shaders/gbuffers_damagedblock.fsh | 16 + .../shaders/gbuffers_damagedblock.vsh | 16 + .../shaders/gbuffers_entities.fsh | 15 + .../shaders/gbuffers_entities.vsh | 16 + .../shaders/gbuffers_entities_glowing.fsh | 15 + .../shaders/gbuffers_entities_glowing.vsh | 15 + .../shaders/gbuffers_hand.fsh | 15 + .../shaders/gbuffers_hand.vsh | 15 + .../shaders/gbuffers_hand_water.fsh | 16 + .../shaders/gbuffers_hand_water.vsh | 15 + .../shaders/gbuffers_line.fsh | 16 + .../shaders/gbuffers_line.vsh | 18 + .../shaders/gbuffers_skybasic.fsh | 16 + .../shaders/gbuffers_skybasic.vsh | 16 + .../shaders/gbuffers_skytextured.fsh | 16 + .../shaders/gbuffers_skytextured.vsh | 16 + .../shaders/gbuffers_spidereyes.fsh | 16 + .../shaders/gbuffers_spidereyes.vsh | 16 + .../shaders/gbuffers_terrain.fsh | 16 + .../shaders/gbuffers_terrain.vsh | 17 + .../shaders/gbuffers_textured.fsh | 15 + .../shaders/gbuffers_textured.vsh | 15 + .../shaders/gbuffers_water.fsh | 16 + .../shaders/gbuffers_water.vsh | 16 + .../shaders/gbuffers_weather.fsh | 16 + .../shaders/gbuffers_weather.vsh | 15 + .../shaders/item.properties | 5 + .../shaders/lang/en_US.lang | 292 ++ .../shaders/lang/ko_KR.lang | 291 ++ .../shaders/lang/sv_SE.lang | 290 ++ .../shaders/lang/tr_TR.lang | 287 ++ .../shaders/lang/zh_CN.lang | 292 ++ .../shaders/lib/aberration.glsl | 17 + .../MakeUp-UltraFast-9.1c/shaders/lib/ao.glsl | 46 + .../shaders/lib/basic_utils.glsl | 73 + .../shaders/lib/bloom.glsl | 30 + .../shaders/lib/blur.glsl | 36 + .../shaders/lib/color_blindness.glsl | 40 + .../shaders/lib/color_conversion.glsl | 57 + .../shaders/lib/color_utils.glsl | 181 ++ .../shaders/lib/color_utils_end.glsl | 49 + .../shaders/lib/color_utils_nether.glsl | 45 + .../shaders/lib/config.alternate.glsl | 323 ++ .../shaders/lib/config.glsl | 323 ++ .../shaders/lib/day_blend.glsl | 19 + .../shaders/lib/depth.glsl | 9 + .../shaders/lib/depth_dh.glsl | 9 + .../shaders/lib/dither.glsl | 266 ++ .../shaders/lib/fast_taa.glsl | 98 + .../shaders/lib/luma.glsl | 13 + .../shaders/lib/material_gloss_fragment.glsl | 28 + .../shaders/lib/motion_blur.glsl | 39 + .../shaders/lib/mu_ftransform.glsl | 18 + .../shaders/lib/post.glsl | 19 + .../shaders/lib/projection_utils.glsl | 15 + .../shaders/lib/shadow_frag.glsl | 156 + .../shaders/lib/shadow_vertex.glsl | 20 + .../shaders/lib/tone_maps.glsl | 26 + .../shaders/lib/vector_utils.glsl | 17 + .../shaders/lib/volumetric_clouds.glsl | 146 + .../shaders/lib/volumetric_clouds_end.glsl | 142 + .../shaders/lib/volumetric_clouds_vertex.glsl | 51 + .../shaders/lib/volumetric_light.glsl | 130 + .../shaders/lib/water.glsl | 324 ++ .../shaders/lib/water_dh.glsl | 135 + .../MakeUp-UltraFast-9.1c/shaders/prepare.fsh | 18 + .../MakeUp-UltraFast-9.1c/shaders/prepare.vsh | 17 + .../shaders/shaders.properties | 210 ++ .../MakeUp-UltraFast-9.1c/shaders/shadow.fsh | 13 + .../MakeUp-UltraFast-9.1c/shaders/shadow.vsh | 13 + .../shaders/src/basiccoords_vertex.glsl | 9 + .../shaders/src/basiccoords_vertex_dh.glsl | 7 + .../shaders/src/cloudfinalcolor.glsl | 6 + .../shaders/src/finalcolor.glsl | 41 + .../shaders/src/finalcolor_dh.glsl | 15 + .../shaders/src/fog_vertex.glsl | 47 + .../shaders/src/hi_sky.glsl | 18 + .../shaders/src/light_vertex.glsl | 148 + .../shaders/src/light_vertex_dh.glsl | 98 + .../shaders/src/low_sky.glsl | 18 + .../shaders/src/position_vertex.glsl | 87 + .../shaders/src/position_vertex_dh.glsl | 35 + .../shaders/src/position_vertex_water.glsl | 16 + .../shaders/src/shadow_src_vertex.glsl | 70 + .../shaders/src/taa_offset.glsl | 22 + .../shaders/src/writebuffers.glsl | 20 + .../shaders/textures/bluenoise_64.png | Bin 0 -> 5525 bytes .../shaders/textures/bluenoise_64.png.mcmeta | 7 + .../textures/clouds_blocky_512_R_8bit.png | Bin 0 -> 5954 bytes .../clouds_blocky_512_R_8bit.png.mcmeta | 7 + .../textures/clouds_natural_512_R_8bit.png | Bin 0 -> 93630 bytes .../clouds_natural_512_R_8bit.png.mcmeta | 7 + .../shaders/textures/water_256_RG_8bit.png | Bin 0 -> 68594 bytes .../textures/water_256_RG_8bit.png.mcmeta | 7 + .../shaders/world-1/composite.fsh | 12 + .../shaders/world-1/composite.vsh | 12 + .../shaders/world-1/composite1.fsh | 12 + .../shaders/world-1/composite1.vsh | 12 + .../shaders/world-1/composite2.fsh | 12 + .../shaders/world-1/composite2.vsh | 12 + .../shaders/world-1/deferred.fsh | 13 + .../shaders/world-1/deferred.vsh | 12 + .../shaders/world-1/dh_terrain.fsh | 11 + .../shaders/world-1/dh_terrain.vsh | 11 + .../shaders/world-1/dh_water.fsh | 11 + .../shaders/world-1/dh_water.vsh | 11 + .../shaders/world-1/final.fsh | 12 + .../shaders/world-1/final.vsh | 14 + .../shaders/world-1/gbuffers_armor_glint.fsh | 13 + .../shaders/world-1/gbuffers_armor_glint.vsh | 14 + .../shaders/world-1/gbuffers_basic.fsh | 12 + .../shaders/world-1/gbuffers_basic.vsh | 13 + .../shaders/world-1/gbuffers_beaconbeam.fsh | 11 + .../shaders/world-1/gbuffers_beaconbeam.vsh | 11 + .../shaders/world-1/gbuffers_block.fsh | 12 + .../shaders/world-1/gbuffers_block.vsh | 12 + .../shaders/world-1/gbuffers_clouds.fsh | 12 + .../shaders/world-1/gbuffers_clouds.vsh | 12 + .../shaders/world-1/gbuffers_damagedblock.fsh | 12 + .../shaders/world-1/gbuffers_damagedblock.vsh | 12 + .../shaders/world-1/gbuffers_entities.fsh | 12 + .../shaders/world-1/gbuffers_entities.vsh | 13 + .../world-1/gbuffers_entities_glowing.fsh | 13 + .../world-1/gbuffers_entities_glowing.vsh | 13 + .../shaders/world-1/gbuffers_hand.fsh | 12 + .../shaders/world-1/gbuffers_hand.vsh | 12 + .../shaders/world-1/gbuffers_hand_water.fsh | 13 + .../shaders/world-1/gbuffers_hand_water.vsh | 12 + .../shaders/world-1/gbuffers_line.fsh | 12 + .../shaders/world-1/gbuffers_line.vsh | 14 + .../shaders/world-1/gbuffers_skybasic.fsh | 12 + .../shaders/world-1/gbuffers_skybasic.vsh | 12 + .../shaders/world-1/gbuffers_skytextured.fsh | 12 + .../shaders/world-1/gbuffers_skytextured.vsh | 12 + .../shaders/world-1/gbuffers_spidereyes.fsh | 12 + .../shaders/world-1/gbuffers_spidereyes.vsh | 12 + .../shaders/world-1/gbuffers_terrain.fsh | 13 + .../shaders/world-1/gbuffers_terrain.vsh | 14 + .../shaders/world-1/gbuffers_textured.fsh | 12 + .../shaders/world-1/gbuffers_textured.vsh | 12 + .../shaders/world-1/gbuffers_water.fsh | 13 + .../shaders/world-1/gbuffers_water.vsh | 13 + .../shaders/world-1/gbuffers_weather.fsh | 13 + .../shaders/world-1/gbuffers_weather.vsh | 12 + .../shaders/world-1/prepare.fsh | 13 + .../shaders/world-1/prepare.vsh | 12 + .../shaders/world0/composite.fsh | 10 + .../shaders/world0/composite.vsh | 10 + .../shaders/world0/composite1.fsh | 10 + .../shaders/world0/composite1.vsh | 10 + .../shaders/world0/composite2.fsh | 11 + .../shaders/world0/composite2.vsh | 10 + .../shaders/world0/deferred.fsh | 11 + .../shaders/world0/deferred.vsh | 10 + .../shaders/world0/dh_terrain.fsh | 10 + .../shaders/world0/dh_terrain.vsh | 10 + .../shaders/world0/dh_water.fsh | 10 + .../shaders/world0/dh_water.vsh | 10 + .../shaders/world0/entity.properties | 3 + .../shaders/world0/final.fsh | 11 + .../shaders/world0/final.vsh | 10 + .../shaders/world0/gbuffers_armor_glint.fsh | 11 + .../shaders/world0/gbuffers_armor_glint.vsh | 12 + .../shaders/world0/gbuffers_basic.fsh | 11 + .../shaders/world0/gbuffers_basic.vsh | 12 + .../shaders/world0/gbuffers_beaconbeam.fsh | 10 + .../shaders/world0/gbuffers_beaconbeam.vsh | 10 + .../shaders/world0/gbuffers_block.fsh | 10 + .../shaders/world0/gbuffers_block.vsh | 10 + .../shaders/world0/gbuffers_clouds.fsh | 12 + .../shaders/world0/gbuffers_clouds.vsh | 11 + .../shaders/world0/gbuffers_damagedblock.fsh | 11 + .../shaders/world0/gbuffers_damagedblock.vsh | 11 + .../shaders/world0/gbuffers_entities.fsh | 10 + .../shaders/world0/gbuffers_entities.vsh | 11 + .../world0/gbuffers_entities_glowing.fsh | 12 + .../world0/gbuffers_entities_glowing.vsh | 12 + .../shaders/world0/gbuffers_hand.fsh | 10 + .../shaders/world0/gbuffers_hand.vsh | 10 + .../shaders/world0/gbuffers_hand_water.fsh | 11 + .../shaders/world0/gbuffers_hand_water.vsh | 10 + .../shaders/world0/gbuffers_line.fsh | 10 + .../shaders/world0/gbuffers_line.vsh | 13 + .../shaders/world0/gbuffers_skybasic.fsh | 11 + .../shaders/world0/gbuffers_skybasic.vsh | 11 + .../shaders/world0/gbuffers_skytextured.fsh | 11 + .../shaders/world0/gbuffers_skytextured.vsh | 11 + .../shaders/world0/gbuffers_spidereyes.fsh | 11 + .../shaders/world0/gbuffers_spidereyes.vsh | 11 + .../shaders/world0/gbuffers_terrain.fsh | 11 + .../shaders/world0/gbuffers_terrain.vsh | 12 + .../shaders/world0/gbuffers_textured.fsh | 12 + .../shaders/world0/gbuffers_textured.vsh | 10 + .../shaders/world0/gbuffers_water.fsh | 11 + .../shaders/world0/gbuffers_water.vsh | 11 + .../shaders/world0/gbuffers_weather.fsh | 11 + .../shaders/world0/gbuffers_weather.vsh | 10 + .../shaders/world0/prepare.fsh | 12 + .../shaders/world0/prepare.vsh | 11 + .../shaders/world0/shadow.fsh | 10 + .../shaders/world0/shadow.vsh | 10 + .../shaders/world1/composite.fsh | 11 + .../shaders/world1/composite.vsh | 11 + .../shaders/world1/composite1.fsh | 11 + .../shaders/world1/composite1.vsh | 11 + .../shaders/world1/composite2.fsh | 12 + .../shaders/world1/composite2.vsh | 11 + .../shaders/world1/deferred.fsh | 12 + .../shaders/world1/deferred.vsh | 11 + .../shaders/world1/dh_terrain.fsh | 11 + .../shaders/world1/dh_terrain.vsh | 11 + .../shaders/world1/dh_water.fsh | 11 + .../shaders/world1/dh_water.vsh | 11 + .../shaders/world1/final.fsh | 12 + .../shaders/world1/final.vsh | 13 + .../shaders/world1/gbuffers_armor_glint.fsh | 12 + .../shaders/world1/gbuffers_armor_glint.vsh | 13 + .../shaders/world1/gbuffers_basic.fsh | 12 + .../shaders/world1/gbuffers_basic.vsh | 13 + .../shaders/world1/gbuffers_beaconbeam.fsh | 11 + .../shaders/world1/gbuffers_beaconbeam.vsh | 11 + .../shaders/world1/gbuffers_block.fsh | 11 + .../shaders/world1/gbuffers_block.vsh | 11 + .../shaders/world1/gbuffers_clouds.fsh | 13 + .../shaders/world1/gbuffers_clouds.vsh | 12 + .../shaders/world1/gbuffers_damagedblock.fsh | 12 + .../shaders/world1/gbuffers_damagedblock.vsh | 12 + .../shaders/world1/gbuffers_entities.fsh | 11 + .../shaders/world1/gbuffers_entities.vsh | 12 + .../world1/gbuffers_entities_glowing.fsh | 13 + .../world1/gbuffers_entities_glowing.vsh | 13 + .../shaders/world1/gbuffers_hand.fsh | 11 + .../shaders/world1/gbuffers_hand.vsh | 11 + .../shaders/world1/gbuffers_hand_water.fsh | 12 + .../shaders/world1/gbuffers_hand_water.vsh | 11 + .../shaders/world1/gbuffers_line.fsh | 11 + .../shaders/world1/gbuffers_line.vsh | 14 + .../shaders/world1/gbuffers_skybasic.fsh | 12 + .../shaders/world1/gbuffers_skybasic.vsh | 12 + .../shaders/world1/gbuffers_skytextured.fsh | 12 + .../shaders/world1/gbuffers_skytextured.vsh | 12 + .../shaders/world1/gbuffers_spidereyes.fsh | 12 + .../shaders/world1/gbuffers_spidereyes.vsh | 12 + .../shaders/world1/gbuffers_terrain.fsh | 12 + .../shaders/world1/gbuffers_terrain.vsh | 13 + .../shaders/world1/gbuffers_textured.fsh | 11 + .../shaders/world1/gbuffers_textured.vsh | 11 + .../shaders/world1/gbuffers_water.fsh | 12 + .../shaders/world1/gbuffers_water.vsh | 12 + .../shaders/world1/gbuffers_weather.fsh | 12 + .../shaders/world1/gbuffers_weather.vsh | 11 + .../shaders/world1/prepare.fsh | 13 + .../shaders/world1/prepare.vsh | 12 + .../shaders/world1/shadow.fsh | 11 + .../shaders/world1/shadow.vsh | 11 + 1083 files changed, 59481 insertions(+) create mode 100644 datapacks/ArsFlora/data/crafting/recipes/manatosource.json create mode 100644 datapacks/ArsFlora/data/crafting/recipes/sourcetomana.json create mode 100644 datapacks/ArsFlora/pack.mcmeta create mode 100644 datapacks/ReApplied/assets/ae2/blockstates/controller.json create mode 100644 datapacks/ReApplied/assets/ae2/models/block/charger.json create mode 100644 datapacks/ReApplied/assets/ae2/models/block/controller/controller_block_conflicted.json create mode 100644 datapacks/ReApplied/assets/ae2/models/block/controller/controller_block_lights.json create mode 100644 datapacks/ReApplied/assets/ae2/models/block/controller/controller_block_lights_x.json create mode 100644 datapacks/ReApplied/assets/ae2/models/block/controller/controller_block_lights_y.json create mode 100644 datapacks/ReApplied/assets/ae2/models/block/controller/controller_block_lights_z.json create mode 100644 datapacks/ReApplied/assets/ae2/models/block/controller/controller_block_offline.json create mode 100644 datapacks/ReApplied/assets/ae2/models/block/controller/controller_block_online.json create mode 100644 datapacks/ReApplied/assets/ae2/models/block/controller/controller_horiztonal_x_conflicted.json create mode 100644 datapacks/ReApplied/assets/ae2/models/block/controller/controller_horiztonal_x_offline.json create mode 100644 datapacks/ReApplied/assets/ae2/models/block/controller/controller_horiztonal_x_online.json create mode 100644 datapacks/ReApplied/assets/ae2/models/block/controller/controller_horiztonal_z_conflicted.json create mode 100644 datapacks/ReApplied/assets/ae2/models/block/controller/controller_horiztonal_z_offline.json create mode 100644 datapacks/ReApplied/assets/ae2/models/block/controller/controller_horiztonal_z_online.json create mode 100644 datapacks/ReApplied/assets/ae2/models/block/controller/controller_vertical_conflicted.json create mode 100644 datapacks/ReApplied/assets/ae2/models/block/controller/controller_vertical_offline.json create mode 100644 datapacks/ReApplied/assets/ae2/models/block/controller/controller_vertical_online.json create mode 100644 datapacks/ReApplied/assets/ae2/models/block/controller/inside_controller_block_conflicted.json create mode 100644 datapacks/ReApplied/assets/ae2/models/block/controller/inside_controller_block_offline.json create mode 100644 datapacks/ReApplied/assets/ae2/models/block/controller/inside_controller_block_online.json create mode 100644 datapacks/ReApplied/assets/ae2/models/block/crank.json create mode 100644 datapacks/ReApplied/assets/ae2/models/block/crank_base.json create mode 100644 datapacks/ReApplied/assets/ae2/models/block/crank_handle.json create mode 100644 datapacks/ReApplied/assets/ae2/models/block/drive/drive_base.json create mode 100644 datapacks/ReApplied/assets/ae2/models/block/drive/drive_cell.json create mode 100644 datapacks/ReApplied/assets/ae2/models/block/sky_stone_tank.json create mode 100644 datapacks/ReApplied/assets/ae2/models/block/vibration_chamber.json create mode 100644 datapacks/ReApplied/assets/ae2/models/block/vibration_chamber_on.json create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/cell_workbench.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/cell_workbench_bottom.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/cell_workbench_side.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/charger.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/chipped_budding_quartz.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/chiseled_quartz_block_side.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/chiseled_quartz_block_top.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/condenser.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/controller/center_base.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/controller/center_conflicted.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/controller/center_lights.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/controller/center_lights.png.mcmeta create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/controller/center_lights_e.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/controller/center_lights_e.png.mcmeta create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/controller/horiztonal_base.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/controller/horiztonal_conflicted.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/controller/horiztonal_lights.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/controller/horiztonal_lights.png.mcmeta create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/controller/horiztonal_lights_e.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/controller/horiztonal_lights_e.png.mcmeta create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/controller/inside_base.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/controller/inside_conflicted.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/controller/top_base.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/controller/top_conflicted.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/controller/top_lights.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/controller/top_lights.png.mcmeta create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/controller/top_lights_e.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/controller/top_lights_e.png.mcmeta create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/controller/vertical_base.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/controller/vertical_conflicted.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/controller/vertical_lights.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/controller/vertical_lights.png.mcmeta create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/controller/vertical_lights_e.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/controller/vertical_lights_e.png.mcmeta create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/crank.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/crank_base.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/creative_energy_cell.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/cut_quartz_block.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/damaged_budding_quartz.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/dense_energy_cell.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/dense_energy_cell_0.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/dense_energy_cell_1.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/dense_energy_cell_2.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/dense_energy_cell_3.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/dense_energy_cell_4.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/drive/cells/16k_fluid_cell.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/drive/cells/16k_item_cell.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/drive/cells/1k_fluid_cell.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/drive/cells/1k_item_cell.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/drive/cells/256k_fluid_cell.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/drive/cells/256k_item_cell.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/drive/cells/4k_fluid_cell.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/drive/cells/4k_item_cell.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/drive/cells/64k_fluid_cell.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/drive/cells/64k_item_cell.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/drive/cells/creative_cell.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/drive/cells/default_cell.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/drive/drive_bottom.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/drive/drive_cell_states.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/drive/drive_front.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/drive/drive_front_flat.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/drive/drive_inside.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/drive/drive_side.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/drive/drive_top.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/energy_acceptor.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/energy_cell.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/energy_cell_0.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/energy_cell_1.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/energy_cell_2.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/energy_cell_3.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/energy_cell_4.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/flawed_budding_quartz.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/flawless_budding_quartz.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/fluix_block.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_a.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_b.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_c.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_d.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame0001.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame0010.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame0011.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame0100.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame0101.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame0110.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame0111.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame1000.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame1001.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame1010.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame1011.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame1100.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame1101.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame1110.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame1111.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/growth_accelerator.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/growth_accelerator_on.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/growth_accelerator_on.png.mcmeta create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/growth_accelerator_side.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/growth_accelerator_side_on.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/growth_accelerator_side_on.png.mcmeta create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/large_quartz_bud.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/medium_quartz_bud.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/metal_bottom.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/metal_inside.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/metal_side.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/metal_top.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/quartz_block.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/quartz_block_side.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/quartz_bricks.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/quartz_capstone_left.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/quartz_capstone_rigth.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/quartz_cluster.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/quartz_fixture.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/quartz_fixture_metal.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/quartz_growth_accelerator.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/quartz_growth_accelerator_on.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/quartz_growth_accelerator_on.png.mcmeta create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/quartz_growth_accelerator_side.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/quartz_growth_accelerator_side_on.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/quartz_growth_accelerator_side_on.png.mcmeta create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/quartz_pillar_side.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/quartz_pillar_top.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/sky_stone_block.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/sky_stone_brick.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/sky_stone_small_brick.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/sky_stone_tank.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/sky_stone_tank_bottom.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/sky_stone_tank_top.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/skyblockchest.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/skychest.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/small_quartz_bud.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/smooth_quartz_block.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/smooth_sky_stone_block.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/spatial_anchor_bottom.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/spatial_anchor_side.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/spatial_anchor_side_off.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/spatial_anchor_top.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/spatial_anchor_top_off.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/spatial_pylon.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/spatial_pylon/base.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/spatial_pylon/base_end.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/spatial_pylon/base_spanned.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/spatial_pylon/dim.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/spatial_pylon/dim_end.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/spatial_pylon/dim_spanned.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/spatial_pylon/red.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/spatial_pylon/red_end.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/spatial_pylon/red_spanned.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/tnt_bottom.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/tnt_side.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/tnt_top.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/vibration_chamber.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/vibration_chamber_back.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/vibration_chamber_back_on.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/vibration_chamber_back_on.png.mcmeta create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/vibration_chamber_bottom.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/vibration_chamber_front.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/vibration_chamber_front_on.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/vibration_chamber_front_on.png.mcmeta create mode 100644 datapacks/ReApplied/assets/ae2/textures/block/vibration_chamber_top.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/gui/sprites/small_scroller.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/gui/sprites/small_scroller_disabled.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/guis/background.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/guis/checkbox.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/guis/crafting.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/guis/pattern_modes.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/guis/states.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/guis/terminal.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/advanced_card.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/annihilation_core.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/basic_card.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/blank_pattern.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/calculation_processor.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/calculation_processor_press.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/card_capacity.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/card_crafting.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/card_energy.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/card_equal_distribution.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/card_fuzzy.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/card_inverter.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/card_redstone.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/card_speed.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/card_void.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/cell_component_16k.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/cell_component_1k.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/cell_component_256k.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/cell_component_4k.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/cell_component_64k.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/certus_quartz_axe.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/certus_quartz_crystal.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/certus_quartz_crystal_charged.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/certus_quartz_crystal_charged.png.mcmeta create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/certus_quartz_cutting_knife.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/certus_quartz_dust.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/certus_quartz_hoe.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/certus_quartz_pickaxe.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/certus_quartz_shovel.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/certus_quartz_sword.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/certus_quartz_wrench.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/crafting_pattern.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/creative_storage_cell.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/engineering_processor.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/engineering_processor_press.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/fluid_cell_housing.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/fluid_storage_cell_16k.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/fluid_storage_cell_1k.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/fluid_storage_cell_256k.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/fluid_storage_cell_4k.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/fluid_storage_cell_64k.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/fluix_axe.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/fluix_crystal.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/fluix_dust.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/fluix_hoe.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/fluix_pearl.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/fluix_pickaxe.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/fluix_shovel.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/fluix_sword.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/fluix_upgrade_smithing_template.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/formation_core.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/item_cell_housing.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/item_storage_cell_16k.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/item_storage_cell_1k.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/item_storage_cell_256k.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/item_storage_cell_4k.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/item_storage_cell_64k.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/logic_processor.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/logic_processor_press.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/nether_quartz_axe.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/nether_quartz_cutting_knife.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/nether_quartz_hoe.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/nether_quartz_pickaxe.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/nether_quartz_shovel.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/nether_quartz_sword.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/nether_quartz_wrench.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/printed_calculation_processor.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/printed_engineering_processor.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/printed_logic_processor.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/printed_silicon.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/processing_pattern.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/quartz_glass.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/silicon.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/silicon_press.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/singularity.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/singularity.png.mcmeta create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/sky_dust.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/smithing_table_pattern.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/spatial_cell_component_128.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/spatial_cell_component_16.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/spatial_cell_component_2.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/spatial_pylon.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/spatial_storage_cell_128.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/spatial_storage_cell_16.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/spatial_storage_cell_2.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/stonecutting_pattern.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/view_cell.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/item/wireless_receiver.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/models/skyblockchest.png create mode 100644 datapacks/ReApplied/assets/ae2/textures/models/skychest.png create mode 100644 datapacks/ReApplied/pack.mcmeta create mode 100644 datapacks/ReApplied/pack.png create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/advancements/ancient_mines.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/advancements/apothecary_abode.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/advancements/bearclaw_inn.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/advancements/castle.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/advancements/enchantingtower.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/advancements/fishermans_lodge.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/advancements/hunters_cabin.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/advancements/idas_root.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/advancements/labyrinth.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/advancements/necromancers_spire.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/advancements/nexus.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/advancements/pillager_fortress.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/advancements/redhorn_guild.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/advancements/sunken_ship.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/advancements/tinkers_workshop.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/advancements/winter_wagon.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/advancements/witches_treestump.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/advancements/wizardtower.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/ancient_mines_bottom.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/ancient_mines_top.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/generic.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/labyrinth.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/nexus.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/pillager.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/sunken_ship.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/tinkers_workshop.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/tinkers_workshop_tuff.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/wizard_tower.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/abandonedhouse/abandonedhouse.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/abandonedhouse/abandonedhouse_create.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/abandonedhouse/abandonedhouse_library.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_mines/minesbasic.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_mines/minescreate.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_mines/mineshall.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_portal/ancient_portal_nether.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_portal/ancient_portal_overworld.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_statue/ancient_statue_jungle.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_statue/ancient_statue_treasure_desert.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_statue/ancient_statue_treasure_jungle.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_statue/ancient_statue_treasure_plains.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/apothecary_abode/apothecary_abode.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/apothecary_abode/apothecary_abode_books.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/bazaar/bazaar.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/bazaar/bazaar_food.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/bazaar/bazaar_tools.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/bearclaw_inn/bearclaw_inn_bedroom.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/bearclaw_inn/bearclaw_inn_food.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/beekeepers_house/beekeepers_bedroom.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/beekeepers_house/beekeepers_food.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/beekeepers_house/beekeepers_tools.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/brickhouse/brickhouse.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/brickhouse/brickhouse_library.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/brickhouse/brickhouse_windmill.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/castle/castle.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/castle/castle_library.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/castle/castle_throne.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/cottage/cottage.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/enchantingtower/enchantingtower_basic.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/enchantingtower/enchantingtower_library.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/enchantingtower/enchantingtower_top.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/farmhouse/farmhouse.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/farmhouse/farmhouse_bedroom.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/farmhouse/farmhouse_food.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/farmhouse/farmhouse_mill.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/fishermans_lodge/fishermans_lodge.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/fishermans_lodge/fishermans_lodge_tools.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/haunted_manor/haunted_manor.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/haunted_manor/haunted_manor_library.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/haunted_manor/haunted_manor_tools.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/haunted_manor/haunted_manor_treasure.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/hauntedhouse/bophauntedhouse.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/hauntedhouse/hauntedhouse.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/hermits_hollow/hollow_bedroom.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/hermits_hollow/hollow_food.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/hunters_cabin/hunters_cabin.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/hunters_cabin/hunters_cabin_library.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/hunters_cabin/hunters_cabin_tools.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/labyrinth/labyrinth.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/labyrinth/labyrinth_croc.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/labyrinth/labyrinth_library.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/labyrinth/labyrinth_tomb.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/labyrinth/labyrinth_treasure.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/necromancers_spire/necromancers_spire.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/nexus/nexus.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/pillager_camp/pillager_camp.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/pillager_fortress/pillager_basic.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/pillager_fortress/pillager_bedroom.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/pillager_fortress/pillager_jail.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/pillager_fortress/pillager_library.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/redhorn_guild/redhorn_guild.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/redhorn_guild/redhorn_guild_bedroom.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/redhorn_guild/redhorn_guild_tools.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/sunken_ship/sunken_ship_supply.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/sunken_ship/sunken_ship_treasure.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/tinkers_workshop/tinkers_workshop.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/tinkers_workshop/tinkers_workshop_basic.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/tinkers_workshop/tinkers_workshop_bedroom.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/tinkers_workshop/tinkers_workshop_tools.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/tinkers_workshop/tinkers_workshop_vault.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/treetop_tavern/treetop_tavern.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/treetop_tavern/treetop_tavern_bedroom.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/treetop_tavern/treetop_tavern_food.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/treetop_tavern/treetop_tavern_tools.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/winter_wagon/winter_wagon.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/winter_wagon/winter_wagon_tools.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/witches_treestump/witches_treestump.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/wizardtower/wizardtower_basic.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/wizardtower/wizardtower_library.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/wizardtower/wizardtower_top.json create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/structures/labyrinth/bopfloor2.nbt create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/structures/labyrinth/floor2.nbt create mode 100644 datapacks/idasalexsmobs-1.20/data/idas/worldgen/template_pool/animal_den/forest_den.json create mode 100644 datapacks/idasalexsmobs-1.20/pack.mcmeta create mode 100644 mods/bedrock-camera-command-1.0.0.jar create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/.gitignore create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/HOW TO INSTALL.txt create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/License.txt create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaderFile_1/shaderFile_L.placebo create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaderFile_2/shaderFile_R.placebo create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaderFile_A.placebo create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaderFile_B.placebo create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaderFile_C.placebo create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaderFile_D.placebo create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaderFile_Versions.txt create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/block.properties create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/dimension.properties create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/entity.properties create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/item.properties create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lang/en_US.lang create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/antialiasing/fxaa.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/antialiasing/jitter.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/antialiasing/taa.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/auroraBorealis.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/clouds/cloudCoord.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/clouds/mainClouds.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/clouds/reimaginedClouds.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/clouds/unboundClouds.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/enderBeams.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/enderStars.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/fog/bloomFog.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/fog/caveFactor.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/fog/coloredLightFog.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/fog/mainFog.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/fog/waterFog.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/netherStorm.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/nightNebula.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/rainbow.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/sky.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/stars.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/volumetricLight.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/colors/blocklightColors.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/colors/cloudColors.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/colors/colorMultipliers.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/colors/lightAndAmbientColors.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/colors/moonPhaseInfluence.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/colors/skyColors.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/common.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/lighting/ggx.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/lighting/mainLighting.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/lighting/shadowSampling.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialHandling/blockEntityMaterials.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialHandling/customMaterials.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialHandling/deferredMaterials.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialHandling/entityMaterials.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialHandling/irisMaterials.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialHandling/terrainMaterials.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialHandling/translucentMaterials.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/anisotropicFiltering.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/coatedTextures.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/connectedGlass.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/customEmission.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/generatedNormals.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/pomEffects.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/reflections.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/refraction.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/snowyWorld.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/wavingBlocks.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/entities/glowItemFrame.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/entities/itemFrame.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/entities/lightningBolt.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/others/endPortalEffect.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/others/signText.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/others/trident.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/acaciaPlanks.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/bambooPlanks.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/birchPlanks.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/cherryPlanks.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/crimsonPlanks.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/darkOakPlanks.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/junglePlanks.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/mangrovePlanks.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/oakPlanks.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/paleOakPlanks.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/sprucePlanks.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/warpedPlanks.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/anvil.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/blackstone.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/candle.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/cobblestone.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/copperBlock.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/copperBulb.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/coral.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/cryingObsidian.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/deepslate.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/diamondBlock.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/dirt.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/emeraldBlock.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/endPortalFrame.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/endStone.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/froglights.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/goldBlock.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/ironBlock.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/lanternMetal.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/lapisBlock.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/lava.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/leaves.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/netheriteBlock.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/netherrack.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/oakWood.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/obsidian.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/paleOakWood.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/pumpkin.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/quartzBlock.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/rawCopperBlock.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/rawGoldBlock.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/rawIronBlock.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/redstoneBlock.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/redstoneTorch.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/snow.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/stone.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/translucents/glass.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/translucents/netherPortal.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/translucents/stainedGlass.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/translucents/water.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/colorCodedPrograms.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/darkOutline.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/distantLightBokeh.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/handSway.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/lensFlare.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/pixelation.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/puddleVoxelization.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/showLightLevels.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/voxelization.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/worldOutline.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/pipelineSettings.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textRendering/error_apple_acl.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textRendering/error_coordinates_acl.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textRendering/error_optifine_acl.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textRendering/error_optifine_af.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textRendering/error_shadowdistance_acl.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textRendering/textRenderer.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textures/cloud-water.png create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textures/cloud-water.png.mcmeta create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textures/cucumber.png create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textures/cucumber.png.mcmeta create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textures/noise.png create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textures/noise.png.mcmeta create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/uniforms.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/util/commonFunctions.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/util/dFdxdFdy.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/util/dither.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/util/miplevel.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/util/spaceConversion.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/composite.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/composite2.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/composite3.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/composite4.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/composite5.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/composite6.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/composite7.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/deferred1.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/dh_terrain.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/dh_water.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/final.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_armor_glint.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_basic.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_beaconbeam.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_block.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_clouds.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_damagedblock.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_entities.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_hand.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_skybasic.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_skytextured.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_spidereyes.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_terrain.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_textured.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_water.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_weather.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/shadow.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/shadowcomp.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/program/template.glsl create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/shaders.properties create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite2.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite2.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite3.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite3.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite4.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite4.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite5.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite5.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite6.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite6.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite7.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite7.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/deferred1.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/deferred1.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/dh_terrain.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/dh_terrain.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/dh_water.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/dh_water.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/final.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/final.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_armor_glint.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_armor_glint.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_basic.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_basic.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_beaconbeam.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_beaconbeam.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_block.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_block.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_clouds.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_clouds.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_damagedblock.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_damagedblock.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_entities.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_entities.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_entities_glowing.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_entities_glowing.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_hand.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_hand.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_line.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_line.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_skybasic.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_skybasic.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_skytextured.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_skytextured.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_spidereyes.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_spidereyes.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_terrain.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_terrain.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_textured.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_textured.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_water.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_water.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_weather.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_weather.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/shadow.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/shadow.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/shadowcomp.csh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite2.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite2.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite3.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite3.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite4.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite4.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite5.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite5.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite6.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite6.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite7.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite7.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/deferred1.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/deferred1.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/dh_terrain.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/dh_terrain.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/dh_water.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/dh_water.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/final.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/final.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_armor_glint.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_armor_glint.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_basic.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_basic.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_beaconbeam.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_beaconbeam.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_block.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_block.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_clouds.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_clouds.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_damagedblock.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_damagedblock.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_entities.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_entities.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_entities_glowing.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_entities_glowing.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_hand.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_hand.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_line.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_line.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_skybasic.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_skybasic.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_skytextured.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_skytextured.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_spidereyes.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_spidereyes.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_terrain.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_terrain.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_textured.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_textured.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_water.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_water.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_weather.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_weather.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/shadow.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/shadow.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/shadowcomp.csh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite2.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite2.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite3.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite3.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite4.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite4.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite5.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite5.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite6.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite6.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite7.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite7.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/deferred1.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/deferred1.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/dh_terrain.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/dh_terrain.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/dh_water.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/dh_water.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/final.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/final.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_armor_glint.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_armor_glint.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_basic.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_basic.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_beaconbeam.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_beaconbeam.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_block.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_block.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_clouds.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_clouds.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_damagedblock.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_damagedblock.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_entities.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_entities.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_entities_glowing.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_entities_glowing.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_hand.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_hand.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_line.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_line.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_skybasic.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_skybasic.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_skytextured.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_skytextured.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_spidereyes.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_spidereyes.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_terrain.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_terrain.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_textured.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_textured.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_water.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_water.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_weather.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_weather.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/shadow.fsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/shadow.vsh create mode 100644 shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/shadowcomp.csh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/Credits create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/ForDevelopers.EN.md create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/LICENSE create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/ParaDesarrolladores.ES.md create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/README.md create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/helpful.txt create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/block.properties create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/basic_blocks_fragment.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/basic_blocks_vertex.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/clouds_blocks_fragment.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/clouds_blocks_vertex.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/composite1_fragment.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/composite1_vertex.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/composite2_fragment.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/composite2_vertex.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/composite_fragment.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/composite_vertex.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/damage_fragment.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/damage_vertex.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/deferred_fragment.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/deferred_vertex.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/final_fragment.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/final_vertex.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/glint_blocks_fragment.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/glint_blocks_vertex.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/line_blocks_fragment.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/line_blocks_vertex.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/prepare_fragment.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/prepare_vertex.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/shadow_fragment.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/shadow_vertex.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/skybasic_fragment.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/skybasic_vertex.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/skytextured_fragment.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/skytextured_vertex.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/solid_blocks_fragment.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/solid_blocks_vertex.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/solid_dh_blocks_fragment.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/solid_dh_blocks_vertex.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/solid_dh_water_fragment.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/solid_dh_water_vertex.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/spidereyes_blocks_fragment.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/spidereyes_blocks_vertex.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/water_blocks_fragment.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/water_blocks_vertex.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/composite.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/composite.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/composite1.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/composite1.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/composite2.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/composite2.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/deferred.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/deferred.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/entity.properties create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/final.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/final.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_armor_glint.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_armor_glint.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_basic.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_basic.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_beaconbeam.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_beaconbeam.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_block.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_block.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_clouds.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_clouds.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_damagedblock.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_damagedblock.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_entities.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_entities.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_entities_glowing.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_entities_glowing.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_hand.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_hand.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_hand_water.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_hand_water.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_line.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_line.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_skybasic.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_skybasic.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_skytextured.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_skytextured.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_spidereyes.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_spidereyes.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_terrain.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_terrain.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_textured.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_textured.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_water.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_water.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_weather.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_weather.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/item.properties create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lang/en_US.lang create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lang/ko_KR.lang create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lang/sv_SE.lang create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lang/tr_TR.lang create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lang/zh_CN.lang create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/aberration.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/ao.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/basic_utils.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/bloom.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/blur.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/color_blindness.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/color_conversion.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/color_utils.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/color_utils_end.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/color_utils_nether.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/config.alternate.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/config.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/day_blend.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/depth.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/depth_dh.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/dither.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/fast_taa.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/luma.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/material_gloss_fragment.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/motion_blur.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/mu_ftransform.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/post.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/projection_utils.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/shadow_frag.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/shadow_vertex.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/tone_maps.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/vector_utils.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/volumetric_clouds.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/volumetric_clouds_end.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/volumetric_clouds_vertex.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/volumetric_light.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/water.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/water_dh.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/prepare.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/prepare.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/shaders.properties create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/shadow.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/shadow.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/basiccoords_vertex.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/basiccoords_vertex_dh.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/cloudfinalcolor.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/finalcolor.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/finalcolor_dh.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/fog_vertex.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/hi_sky.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/light_vertex.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/light_vertex_dh.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/low_sky.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/position_vertex.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/position_vertex_dh.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/position_vertex_water.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/shadow_src_vertex.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/taa_offset.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/writebuffers.glsl create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/textures/bluenoise_64.png create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/textures/bluenoise_64.png.mcmeta create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/textures/clouds_blocky_512_R_8bit.png create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/textures/clouds_blocky_512_R_8bit.png.mcmeta create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/textures/clouds_natural_512_R_8bit.png create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/textures/clouds_natural_512_R_8bit.png.mcmeta create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/textures/water_256_RG_8bit.png create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/textures/water_256_RG_8bit.png.mcmeta create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/composite.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/composite.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/composite1.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/composite1.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/composite2.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/composite2.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/deferred.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/deferred.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/dh_terrain.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/dh_terrain.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/dh_water.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/dh_water.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/final.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/final.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_armor_glint.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_armor_glint.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_basic.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_basic.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_beaconbeam.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_beaconbeam.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_block.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_block.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_clouds.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_clouds.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_damagedblock.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_damagedblock.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_entities.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_entities.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_entities_glowing.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_entities_glowing.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_hand.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_hand.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_hand_water.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_hand_water.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_line.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_line.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_skybasic.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_skybasic.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_skytextured.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_skytextured.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_spidereyes.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_spidereyes.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_terrain.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_terrain.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_textured.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_textured.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_water.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_water.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_weather.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/gbuffers_weather.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/prepare.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world-1/prepare.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/composite.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/composite.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/composite1.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/composite1.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/composite2.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/composite2.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/deferred.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/deferred.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/dh_terrain.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/dh_terrain.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/dh_water.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/dh_water.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/entity.properties create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/final.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/final.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_armor_glint.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_armor_glint.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_basic.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_basic.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_beaconbeam.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_beaconbeam.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_block.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_block.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_clouds.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_clouds.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_damagedblock.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_damagedblock.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_entities.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_entities.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_entities_glowing.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_entities_glowing.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_hand.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_hand.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_hand_water.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_hand_water.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_line.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_line.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_skybasic.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_skybasic.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_skytextured.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_skytextured.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_spidereyes.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_spidereyes.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_terrain.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_terrain.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_textured.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_textured.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_water.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_water.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_weather.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/gbuffers_weather.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/prepare.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/prepare.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/shadow.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world0/shadow.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/composite.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/composite.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/composite1.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/composite1.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/composite2.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/composite2.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/deferred.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/deferred.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/dh_terrain.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/dh_terrain.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/dh_water.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/dh_water.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/final.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/final.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_armor_glint.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_armor_glint.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_basic.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_basic.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_beaconbeam.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_beaconbeam.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_block.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_block.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_clouds.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_clouds.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_damagedblock.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_damagedblock.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_entities.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_entities.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_entities_glowing.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_entities_glowing.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_hand.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_hand.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_hand_water.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_hand_water.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_line.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_line.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_skybasic.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_skybasic.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_skytextured.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_skytextured.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_spidereyes.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_spidereyes.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_terrain.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_terrain.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_textured.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_textured.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_water.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_water.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_weather.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/gbuffers_weather.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/prepare.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/prepare.vsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/shadow.fsh create mode 100644 shaderpacks/MakeUp-UltraFast-9.1c/shaders/world1/shadow.vsh diff --git a/.gitignore b/.gitignore index 1ab95b0..6bd9543 100644 --- a/.gitignore +++ b/.gitignore @@ -53,3 +53,4 @@ config/minemenu-common.toml config/oculus.properties config/sodiumextras-client.toml .qmenu_opened.marker +mods/generated-pack/ \ No newline at end of file diff --git a/datapacks/ArsFlora/data/crafting/recipes/manatosource.json b/datapacks/ArsFlora/data/crafting/recipes/manatosource.json new file mode 100644 index 0000000..82324b7 --- /dev/null +++ b/datapacks/ArsFlora/data/crafting/recipes/manatosource.json @@ -0,0 +1,18 @@ +{ + "type": "create:mixing", + "ingredients": [ + { + "item": "ars_nouveau:source_gem" + }, + { + "fluid": "blasmatech:mana", + "amount": 500 + } + ], + "results": [ + { + "fluid": "starbunclemania:source_fluid", + "amount": 500 + } + ] +} \ No newline at end of file diff --git a/datapacks/ArsFlora/data/crafting/recipes/sourcetomana.json b/datapacks/ArsFlora/data/crafting/recipes/sourcetomana.json new file mode 100644 index 0000000..bfa12bd --- /dev/null +++ b/datapacks/ArsFlora/data/crafting/recipes/sourcetomana.json @@ -0,0 +1,18 @@ +{ + "type": "create:mixing", + "ingredients": [ + { + "tag": "botania:mystical_flowers" + }, + { + "fluid": "starbunclemania:source_fluid", + "amount": 100 + } + ], + "results": [ + { + "fluid": "blasmatech:mana", + "amount": 100 + } + ] +} \ No newline at end of file diff --git a/datapacks/ArsFlora/pack.mcmeta b/datapacks/ArsFlora/pack.mcmeta new file mode 100644 index 0000000..c421ba2 --- /dev/null +++ b/datapacks/ArsFlora/pack.mcmeta @@ -0,0 +1 @@ +{"pack":{"pack_format":9,"description":"Generated with TheDestruc7i0n's Crafting Generator: https://crafting.thedestruc7i0n.ca"}} \ No newline at end of file diff --git a/datapacks/ReApplied/assets/ae2/blockstates/controller.json b/datapacks/ReApplied/assets/ae2/blockstates/controller.json new file mode 100644 index 0000000..5867b13 --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/blockstates/controller.json @@ -0,0 +1,166 @@ +{ + "multipart": [ + { + "apply": { + "model": "ae2:block/controller/controller_block_offline" + }, + "when": { + "state": "offline", + "type": "block" + } + }, + { + "apply": { + "model": "ae2:block/controller/controller_block_online" + }, + "when": { + "state": "online", + "type": "block" + } + }, + { + "apply": { + "model": "ae2:block/controller/controller_block_conflicted" + }, + "when": { + "state": "conflicted", + "type": "block" + } + }, + { + "apply": { + "model": "ae2:block/controller/controller_horiztonal_x_offline" + }, + "when": { + "state": "offline", + "type": "column_x" + } + }, + { + "apply": { + "model": "ae2:block/controller/controller_vertical_offline" + }, + "when": { + "state": "offline", + "type": "column_y" + } + }, + { + "apply": { + "model": "ae2:block/controller/controller_horiztonal_z_offline" + }, + "when": { + "state": "offline", + "type": "column_z" + } + }, + { + "apply": { + "model": "ae2:block/controller/controller_horiztonal_x_online" + }, + "when": { + "state": "online", + "type": "column_x" + } + }, + { + "apply": { + "model": "ae2:block/controller/controller_vertical_online" + }, + "when": { + "state": "online", + "type": "column_y" + } + }, + { + "apply": { + "model": "ae2:block/controller/controller_horiztonal_z_online" + }, + "when": { + "state": "online", + "type": "column_z" + } + }, + { + "apply": { + "model": "ae2:block/controller/controller_horiztonal_x_conflicted" + }, + "when": { + "state": "conflicted", + "type": "column_x" + } + }, + { + "apply": { + "model": "ae2:block/controller/controller_vertical_conflicted" + }, + "when": { + "state": "conflicted", + "type": "column_y" + } + }, + { + "apply": { + "model": "ae2:block/controller/controller_horiztonal_z_conflicted" + }, + "when": { + "state": "conflicted", + "type": "column_z" + } + }, + { + "apply": { + "model": "ae2:block/controller/inside_controller_block_offline" + }, + "when": { + "state": "offline", + "type": "inside_a" + } + }, + { + "apply": { + "model": "ae2:block/controller/inside_controller_block_offline" + }, + "when": { + "state": "offline", + "type": "inside_b" + } + }, + { + "apply": { + "model": "ae2:block/controller/inside_controller_block_online" + }, + "when": { + "state": "online", + "type": "inside_a" + } + }, + { + "apply": { + "model": "ae2:block/controller/inside_controller_block_online" + }, + "when": { + "state": "online", + "type": "inside_b" + } + }, + { + "apply": { + "model": "ae2:block/controller/inside_controller_block_conflicted" + }, + "when": { + "state": "conflicted", + "type": "inside_a" + } + }, + { + "apply": { + "model": "ae2:block/controller/inside_controller_block_conflicted" + }, + "when": { + "state": "conflicted", + "type": "inside_b" + } + } + ] +} diff --git a/datapacks/ReApplied/assets/ae2/models/block/charger.json b/datapacks/ReApplied/assets/ae2/models/block/charger.json new file mode 100644 index 0000000..ce997bb --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/models/block/charger.json @@ -0,0 +1,99 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/orientable", + "texture_size": [64, 64], + "textures": { + "3": "ae2:block/charger", + "particle": "ae2:block/metal_top" + }, + "elements": [ + { + "from": [2, 0, 2], + "to": [14, 3, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [10.25, 11.25, 13.25, 12], "texture": "#3"}, + "east": {"uv": [8.75, 3.25, 12.25, 4], "texture": "#3"}, + "south": {"uv": [8.75, 7.25, 11.75, 8], "texture": "#3"}, + "west": {"uv": [12.5, 3.25, 16, 4], "texture": "#3"}, + "up": {"uv": [3, 3.5, 0, 0], "texture": "#3"}, + "down": {"uv": [6, 3.5, 3, 7], "texture": "#3"} + } + }, + { + "from": [2, 13, 2], + "to": [14, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [10.25, 8, 13.25, 8.75], "texture": "#3"}, + "east": {"uv": [8.75, 0, 12.25, 0.75], "texture": "#3"}, + "south": {"uv": [8.75, 4, 11.75, 4.75], "texture": "#3"}, + "west": {"uv": [12.5, 0, 16, 0.75], "texture": "#3"}, + "up": {"uv": [3, 7, 0, 3.5], "texture": "#3"}, + "down": {"uv": [6, 0, 3, 3.5], "texture": "#3"} + } + }, + { + "from": [2, 3, 5], + "to": [4, 13, 16], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [12.75, 8.75, 13.25, 11.25], "texture": "#3"}, + "east": {"uv": [7.5, 8.75, 10.25, 11.25], "texture": "#3"}, + "south": {"uv": [8.75, 4.75, 9.25, 7.25], "texture": "#3"}, + "west": {"uv": [13.25, 0.75, 16, 3.25], "texture": "#3"} + } + }, + { + "from": [12, 3, 5], + "to": [14, 13, 16], + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [10.25, 8.75, 10.75, 11.25], "texture": "#3"}, + "east": {"uv": [8.75, 0.75, 11.5, 3.25], "texture": "#3"}, + "south": {"uv": [11.25, 4.75, 11.75, 7.25], "texture": "#3"}, + "west": {"uv": [13.25, 8.75, 16, 11.25], "texture": "#3"} + } + }, + { + "from": [4, 3, 14], + "to": [12, 13, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [10.75, 8.75, 12.75, 11.25], "texture": "#3"}, + "south": {"uv": [9.25, 4.75, 11.25, 7.25], "texture": "#3"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/datapacks/ReApplied/assets/ae2/models/block/controller/controller_block_conflicted.json b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_block_conflicted.json new file mode 100644 index 0000000..9365091 --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_block_conflicted.json @@ -0,0 +1,7 @@ +{ + "parent": "ae2:block/controller/controller_block_lights", + "textures": { + "0": "ae2:block/controller/center_conflicted", + "1": "ae2:block/controller/top_conflicted" + } +} diff --git a/datapacks/ReApplied/assets/ae2/models/block/controller/controller_block_lights.json b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_block_lights.json new file mode 100644 index 0000000..b9a9740 --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_block_lights.json @@ -0,0 +1,23 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "0": "ae2:block/controller/center_base", + "1": "ae2:block/controller/top_base", + "particle": "ae2:block/controller/center_base" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "north"}, + "east": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "east"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "south"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "west"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#1", "cullface": "up"}, + "down": {"uv": [16, 0, 0, 16], "texture": "#1", "cullface": "down"} + } + } + ] +} \ No newline at end of file diff --git a/datapacks/ReApplied/assets/ae2/models/block/controller/controller_block_lights_x.json b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_block_lights_x.json new file mode 100644 index 0000000..5f0ebad --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_block_lights_x.json @@ -0,0 +1,22 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "0": "ae2:block/controller/horiztonal/lights", + "particle": "ae2:block/controller/horiztonal/lights" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "north"}, + "east": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "east"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "south"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "west"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "up"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "down"} + } + } + ] +} \ No newline at end of file diff --git a/datapacks/ReApplied/assets/ae2/models/block/controller/controller_block_lights_y.json b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_block_lights_y.json new file mode 100644 index 0000000..b653004 --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_block_lights_y.json @@ -0,0 +1,22 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "0": "ae2:block/controller/vertical/lights", + "particle": "ae2:block/controller/vertical/lights" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "north"}, + "east": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "east"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "south"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "west"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "up"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "down"} + } + } + ] +} \ No newline at end of file diff --git a/datapacks/ReApplied/assets/ae2/models/block/controller/controller_block_lights_z.json b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_block_lights_z.json new file mode 100644 index 0000000..e7313b0 --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_block_lights_z.json @@ -0,0 +1,22 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "0": "ae2:block/controller/horiztonal/lights", + "particle": "ae2:block/controller/horiztonal/lights" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "north"}, + "east": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "east"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "south"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "west"}, + "up": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#0", "cullface": "up"}, + "down": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#0", "cullface": "down"} + } + } + ] +} \ No newline at end of file diff --git a/datapacks/ReApplied/assets/ae2/models/block/controller/controller_block_offline.json b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_block_offline.json new file mode 100644 index 0000000..79eec00 --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_block_offline.json @@ -0,0 +1,7 @@ +{ + "parent": "ae2:block/controller/controller_block_lights", + "textures": { + "0": "ae2:block/controller/center_base", + "1": "ae2:block/controller/top_base" + } +} diff --git a/datapacks/ReApplied/assets/ae2/models/block/controller/controller_block_online.json b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_block_online.json new file mode 100644 index 0000000..baaef99 --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_block_online.json @@ -0,0 +1,7 @@ +{ + "parent": "ae2:block/controller/controller_block_lights", + "textures": { + "0": "ae2:block/controller/center_lights", + "1": "ae2:block/controller/top_lights" + } +} diff --git a/datapacks/ReApplied/assets/ae2/models/block/controller/controller_horiztonal_x_conflicted.json b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_horiztonal_x_conflicted.json new file mode 100644 index 0000000..5bc5ca9 --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_horiztonal_x_conflicted.json @@ -0,0 +1,6 @@ +{ + "parent": "ae2:block/controller/controller_block_lights_x", + "textures": { + "0": "ae2:block/controller/horiztonal_conflicted" + } +} diff --git a/datapacks/ReApplied/assets/ae2/models/block/controller/controller_horiztonal_x_offline.json b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_horiztonal_x_offline.json new file mode 100644 index 0000000..704086d --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_horiztonal_x_offline.json @@ -0,0 +1,6 @@ +{ + "parent": "ae2:block/controller/controller_block_lights_x", + "textures": { + "0": "ae2:block/controller/horiztonal_base" + } +} diff --git a/datapacks/ReApplied/assets/ae2/models/block/controller/controller_horiztonal_x_online.json b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_horiztonal_x_online.json new file mode 100644 index 0000000..77d0c3d --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_horiztonal_x_online.json @@ -0,0 +1,6 @@ +{ + "parent": "ae2:block/controller/controller_block_lights_x", + "textures": { + "0": "ae2:block/controller/horiztonal_lights" + } +} diff --git a/datapacks/ReApplied/assets/ae2/models/block/controller/controller_horiztonal_z_conflicted.json b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_horiztonal_z_conflicted.json new file mode 100644 index 0000000..051a098 --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_horiztonal_z_conflicted.json @@ -0,0 +1,6 @@ +{ + "parent": "ae2:block/controller/controller_block_lights_z", + "textures": { + "0": "ae2:block/controller/horiztonal_conflicted" + } +} diff --git a/datapacks/ReApplied/assets/ae2/models/block/controller/controller_horiztonal_z_offline.json b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_horiztonal_z_offline.json new file mode 100644 index 0000000..a11157c --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_horiztonal_z_offline.json @@ -0,0 +1,6 @@ +{ + "parent": "ae2:block/controller/controller_block_lights_z", + "textures": { + "0": "ae2:block/controller/horiztonal_base" + } +} diff --git a/datapacks/ReApplied/assets/ae2/models/block/controller/controller_horiztonal_z_online.json b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_horiztonal_z_online.json new file mode 100644 index 0000000..572c5f6 --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_horiztonal_z_online.json @@ -0,0 +1,6 @@ +{ + "parent": "ae2:block/controller/controller_block_lights_z", + "textures": { + "0": "ae2:block/controller/horiztonal_lights" + } +} diff --git a/datapacks/ReApplied/assets/ae2/models/block/controller/controller_vertical_conflicted.json b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_vertical_conflicted.json new file mode 100644 index 0000000..8799d99 --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_vertical_conflicted.json @@ -0,0 +1,6 @@ +{ + "parent": "ae2:block/controller/controller_block_lights_y", + "textures": { + "0": "ae2:block/controller/vertical_conflicted" + } +} diff --git a/datapacks/ReApplied/assets/ae2/models/block/controller/controller_vertical_offline.json b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_vertical_offline.json new file mode 100644 index 0000000..44e4a49 --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_vertical_offline.json @@ -0,0 +1,6 @@ +{ + "parent": "ae2:block/controller/controller_block_lights_y", + "textures": { + "0": "ae2:block/controller/vertical_base" + } +} diff --git a/datapacks/ReApplied/assets/ae2/models/block/controller/controller_vertical_online.json b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_vertical_online.json new file mode 100644 index 0000000..879b253 --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/models/block/controller/controller_vertical_online.json @@ -0,0 +1,6 @@ +{ + "parent": "ae2:block/controller/controller_block_lights_y", + "textures": { + "0": "ae2:block/controller/vertical_lights" + } +} diff --git a/datapacks/ReApplied/assets/ae2/models/block/controller/inside_controller_block_conflicted.json b/datapacks/ReApplied/assets/ae2/models/block/controller/inside_controller_block_conflicted.json new file mode 100644 index 0000000..dafbddd --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/models/block/controller/inside_controller_block_conflicted.json @@ -0,0 +1,7 @@ +{ + "parent": "ae2:block/controller/controller_block_lights", + "textures": { + "0": "ae2:block/controller/inside_conflicted", + "1": "ae2:block/controller/inside_conflicted" + } +} diff --git a/datapacks/ReApplied/assets/ae2/models/block/controller/inside_controller_block_offline.json b/datapacks/ReApplied/assets/ae2/models/block/controller/inside_controller_block_offline.json new file mode 100644 index 0000000..d59b4a6 --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/models/block/controller/inside_controller_block_offline.json @@ -0,0 +1,7 @@ +{ + "parent": "ae2:block/controller/controller_block_lights", + "textures": { + "0": "ae2:block/controller/inside_base", + "1": "ae2:block/controller/inside_base" + } +} diff --git a/datapacks/ReApplied/assets/ae2/models/block/controller/inside_controller_block_online.json b/datapacks/ReApplied/assets/ae2/models/block/controller/inside_controller_block_online.json new file mode 100644 index 0000000..42e2c09 --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/models/block/controller/inside_controller_block_online.json @@ -0,0 +1,7 @@ +{ + "parent": "ae2:block/controller/controller_block_lights", + "textures": { + "0": "ae2:block/controller/inside_lights", + "1": "ae2:block/controller/inside_lights" + } +} diff --git a/datapacks/ReApplied/assets/ae2/models/block/crank.json b/datapacks/ReApplied/assets/ae2/models/block/crank.json new file mode 100644 index 0000000..0c2117e --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/models/block/crank.json @@ -0,0 +1,64 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "1": "ae2:block/crank_base", + "particle": "ae2:block/crank", + "wood": "ae2:block/crank" + }, + "elements": [ + { + "name": "Connector", + "from": [5, 0, 5], + "to": [11, 3, 11], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [10, 10, 16, 7], "rotation": 180, "texture": "#1"}, + "east": {"uv": [10, 7, 16, 10], "texture": "#1"}, + "south": {"uv": [10, 7, 16, 10], "texture": "#1"}, + "west": {"uv": [10, 10, 16, 7], "rotation": 180, "texture": "#1"}, + "up": {"uv": [4, 10, 10, 16], "rotation": 180, "texture": "#1"}, + "down": {"uv": [10, 10, 16, 16], "texture": "#1"} + } + }, + { + "name": "Arm", + "from": [-3, 5, 8], + "to": [13, 8, 10], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 8, 8]}, + "faces": { + "east": {"uv": [2, 6, 5, 8], "rotation": 270, "texture": "#wood"}, + "south": {"uv": [0, 10, 16, 13], "rotation": 180, "texture": "#wood"}, + "west": {"uv": [9, 0, 6, 2], "rotation": 90, "texture": "#wood"}, + "up": {"uv": [0, 0, 16, 2], "rotation": 180, "texture": "#wood"}, + "down": {"uv": [0, 11, 16, 9], "texture": "#wood"} + } + }, + { + "name": "Arm", + "from": [-3, 5, 6], + "to": [13, 8, 8], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 10, 16, 13], "rotation": 180, "texture": "#wood"}, + "east": {"uv": [6, 2, 9, 0], "rotation": 270, "texture": "#wood"}, + "west": {"uv": [5, 8, 2, 6], "rotation": 90, "texture": "#wood"}, + "up": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#wood"}, + "down": {"uv": [0, 9, 16, 11], "texture": "#wood"} + } + }, + { + "name": "Grip", + "from": [6, 3, 7], + "to": [10, 5, 9], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [11, 4, 15, 6], "rotation": 180, "texture": "#wood"}, + "east": {"uv": [12, 6, 10, 4], "texture": "#wood"}, + "south": {"uv": [11, 6, 15, 4], "texture": "#wood"}, + "west": {"uv": [12, 4, 10, 6], "rotation": 180, "texture": "#wood"}, + "down": {"uv": [12, 9, 8, 11], "texture": "#wood"} + } + } + ] +} \ No newline at end of file diff --git a/datapacks/ReApplied/assets/ae2/models/block/crank_base.json b/datapacks/ReApplied/assets/ae2/models/block/crank_base.json new file mode 100644 index 0000000..b3785cb --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/models/block/crank_base.json @@ -0,0 +1,23 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "wood": "ae2:block/crank_base" + }, + "elements": [ + { + "name": "Connector", + "from": [5, 0, 5], + "to": [11, 3, 11], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [10, 10, 16, 7], "rotation": 180, "texture": "#wood"}, + "east": {"uv": [10, 7, 16, 10], "texture": "#wood"}, + "south": {"uv": [10, 7, 16, 10], "texture": "#wood"}, + "west": {"uv": [10, 10, 16, 7], "rotation": 180, "texture": "#wood"}, + "up": {"uv": [4, 10, 10, 16], "rotation": 180, "texture": "#wood"}, + "down": {"uv": [10, 10, 16, 16], "texture": "#wood"} + } + } + ] +} \ No newline at end of file diff --git a/datapacks/ReApplied/assets/ae2/models/block/crank_handle.json b/datapacks/ReApplied/assets/ae2/models/block/crank_handle.json new file mode 100644 index 0000000..a9c8ae9 --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/models/block/crank_handle.json @@ -0,0 +1,49 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "particle": "ae2:block/crank", + "wood": "ae2:block/crank" + }, + "elements": [ + { + "name": "Arm", + "from": [-3, 5, 8], + "to": [13, 8, 10], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 8, 8]}, + "faces": { + "east": {"uv": [2, 6, 5, 8], "rotation": 270, "texture": "#wood"}, + "south": {"uv": [0, 13, 16, 10], "texture": "#wood"}, + "west": {"uv": [9, 0, 6, 2], "rotation": 90, "texture": "#wood"}, + "up": {"uv": [0, 0, 16, 2], "rotation": 180, "texture": "#wood"}, + "down": {"uv": [0, 11, 16, 9], "texture": "#wood"} + } + }, + { + "name": "Arm", + "from": [-3, 5, 6], + "to": [13, 8, 8], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 10, 16, 13], "rotation": 180, "texture": "#wood"}, + "east": {"uv": [6, 2, 9, 0], "rotation": 270, "texture": "#wood"}, + "west": {"uv": [5, 8, 2, 6], "rotation": 90, "texture": "#wood"}, + "up": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#wood"}, + "down": {"uv": [0, 9, 16, 11], "texture": "#wood"} + } + }, + { + "name": "Grip", + "from": [6, 3, 7], + "to": [10, 5, 9], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [11, 4, 15, 6], "rotation": 180, "texture": "#wood"}, + "east": {"uv": [12, 6, 10, 4], "texture": "#wood"}, + "south": {"uv": [11, 6, 15, 4], "texture": "#wood"}, + "west": {"uv": [12, 4, 10, 6], "rotation": 180, "texture": "#wood"}, + "down": {"uv": [12, 9, 8, 11], "texture": "#wood"} + } + } + ] +} \ No newline at end of file diff --git a/datapacks/ReApplied/assets/ae2/models/block/drive/drive_base.json b/datapacks/ReApplied/assets/ae2/models/block/drive/drive_base.json new file mode 100644 index 0000000..898b021 --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/models/block/drive/drive_base.json @@ -0,0 +1,92 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "inside": "ae2:block/drive/drive_inside", + "particle": "ae2:block/drive/drive_side", + "side": "ae2:block/drive/drive_side", + "bottom": "ae2:block/drive/drive_bottom", + "top": "ae2:block/drive/drive_top", + "front": "ae2:block/drive/drive_front_flat" + }, + "elements": [ + { + "name": "Right Side Panel", + "from": [0, 1, 0], + "to": [1, 15, 16], + "faces": { + "north": {"uv": [15, 1, 16, 15], "texture": "#front", "cullface": "north"}, + "east": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#inside", "cullface": "north"}, + "south": {"uv": [0, 1, 1, 15], "texture": "#side", "cullface": "south"}, + "west": {"uv": [0, 1, 16, 15], "texture": "#side", "cullface": "west"} + } + }, + { + "name": "Left Side Panel", + "from": [15, 1, 0], + "to": [16, 15, 16], + "faces": { + "north": {"uv": [0, 1, 1, 15], "texture": "#front", "cullface": "north"}, + "east": {"uv": [0, 1, 16, 15], "texture": "#side", "cullface": "east"}, + "south": {"uv": [15, 1, 16, 15], "texture": "#side", "cullface": "south"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#inside", "cullface": "north"} + } + }, + { + "name": "Back Panel", + "from": [1, 1, 16], + "to": [15, 15, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 9]}, + "faces": { + "north": {"uv": [2, 1, 14, 15], "texture": "#bottom", "cullface": "south"}, + "south": {"uv": [1, 1, 15, 15], "texture": "#side", "cullface": "south"} + } + }, + { + "name": "Back Panel", + "from": [1, 1, 2], + "to": [15, 15, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [1, 1, 15, 15], "texture": "#front", "cullface": "north"} + } + }, + { + "name": "Back Panel", + "from": [7, 1, 0], + "to": [9, 15, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 6]}, + "faces": { + "north": {"uv": [7, 1, 9, 15], "texture": "#front", "cullface": "north"}, + "east": {"uv": [9, 1, 7, 15], "texture": "#front", "cullface": "north"}, + "west": {"uv": [9, 1, 7, 15], "texture": "#front", "cullface": "north"} + } + }, + { + "name": "Bottom Panel", + "from": [0, 0, 0], + "to": [16, 1, 16], + "faces": { + "north": {"uv": [0, 15, 16, 16], "texture": "#front", "cullface": "north"}, + "east": {"uv": [0, 15, 16, 16], "texture": "#side", "cullface": "east"}, + "south": {"uv": [0, 15, 16, 16], "texture": "#side", "cullface": "south"}, + "west": {"uv": [0, 15, 16, 16], "texture": "#side", "cullface": "west"}, + "up": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#bottom", "cullface": "north"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#bottom", "cullface": "down"} + } + }, + { + "name": "Top Panel", + "from": [0, 15, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [0, 0, 16, 1], "texture": "#front", "cullface": "north"}, + "east": {"uv": [0, 0, 16, 1], "texture": "#side", "cullface": "east"}, + "south": {"uv": [0, 0, 16, 1], "texture": "#side", "cullface": "south"}, + "west": {"uv": [0, 0, 16, 1], "texture": "#side", "cullface": "west"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#top", "cullface": "up"}, + "down": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#bottom", "cullface": "north"} + } + } + ] +} \ No newline at end of file diff --git a/datapacks/ReApplied/assets/ae2/models/block/drive/drive_cell.json b/datapacks/ReApplied/assets/ae2/models/block/drive/drive_cell.json new file mode 100644 index 0000000..e1d2dc6 --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/models/block/drive/drive_cell.json @@ -0,0 +1,22 @@ +{ + "credit": "Made with Blockbench", + "ambientocclusion": false, + "textures": { + "cell": "ae2:block/drive/cells/default_cell" + }, + "elements": [ + { + "name": "Cell Backdrop", + "from": [0, 0, 0], + "to": [6, 2, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [9, 8, 8]}, + "faces": { + "north": {"uv": [0, 2, 6, 4], "texture": "#cell", "cullface": "north"}, + "east": {"uv": [6, 2, 8, 4], "texture": "#cell", "cullface": "north"}, + "west": {"uv": [4, 2, 6, 4], "texture": "#cell", "cullface": "north"}, + "up": {"uv": [6, 2, 0, 4], "texture": "#cell", "cullface": "north"}, + "down": {"uv": [6, 2, 0, 4], "texture": "#cell", "cullface": "north"} + } + } + ] +} \ No newline at end of file diff --git a/datapacks/ReApplied/assets/ae2/models/block/sky_stone_tank.json b/datapacks/ReApplied/assets/ae2/models/block/sky_stone_tank.json new file mode 100644 index 0000000..c01f6a1 --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/models/block/sky_stone_tank.json @@ -0,0 +1,342 @@ +{ + "credit": "Made with Blockbench", + "parent": "minecraft:block/cube_all", + "textures": { + "0": "ae2:block/sky_stone_tank", + "2": "ae2:block/sky_stone_tank_top", + "3": "ae2:block/sky_stone_tank_bottom", + "particle": "ae2:block/sky_stone_tank" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "north"}, + "east": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "east"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "south"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "west"}, + "up": {"uv": [16, 16, 0, 0], "texture": "#2", "cullface": "up"}, + "down": {"uv": [16, 16, 0, 0], "texture": "#3", "cullface": "down"} + } + }, + { + "from": [0, 15, 0], + "to": [16, 15, 16], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 8, 8]}, + "faces": { + "down": {"uv": [16, 0, 0, 16], "rotation": 180, "texture": "#3", "cullface": "up"} + } + }, + { + "from": [0, 1, 0], + "to": [16, 1, 16], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 8, 8]}, + "faces": { + "up": {"uv": [16, 0, 0, 16], "rotation": 180, "texture": "#2", "cullface": "down"} + } + }, + { + "from": [0, 0, 15], + "to": [16, 16, 15], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [16, 0, 0, 16], "texture": "#0", "cullface": "south"} + } + }, + { + "from": [0, 2, 15], + "to": [16, 2, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, + "faces": { + "up": {"uv": [16, 15, 0, 14], "rotation": 180, "texture": "#0", "cullface": "south"} + } + }, + { + "from": [0, 3, 15], + "to": [16, 3, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "up": {"uv": [16, 14, 0, 13], "rotation": 180, "texture": "#0", "cullface": "south"} + } + }, + { + "from": [0, 14, 15], + "to": [16, 14, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "down": {"uv": [0, 2, 16, 1], "texture": "#0"} + } + }, + { + "from": [0, 13, 15], + "to": [16, 13, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 5, 8]}, + "faces": { + "down": {"uv": [0, 3, 16, 2], "texture": "#0"} + } + }, + { + "from": [14, 0, 15], + "to": [14, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "west": {"uv": [1, 0, 0, 16], "texture": "#0", "cullface": "south"} + } + }, + { + "from": [3, 0, 15], + "to": [3, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "east": {"uv": [14, 0, 13, 16], "texture": "#0", "cullface": "south"} + } + }, + { + "from": [12, 0, 15], + "to": [12, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "west": {"uv": [2, 0, 1, 16], "texture": "#0", "cullface": "south"} + } + }, + { + "from": [1, 0, 0], + "to": [1, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "east": {"uv": [16, 0, 0, 16], "texture": "#0", "cullface": "west"} + } + }, + { + "from": [0, 2, 0], + "to": [1, 2, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, + "faces": { + "up": {"uv": [16, 15, 0, 14], "rotation": 270, "texture": "#0", "cullface": "west"} + } + }, + { + "from": [0, 3, 0], + "to": [1, 3, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "up": {"uv": [16, 14, 0, 13], "rotation": 270, "texture": "#0", "cullface": "west"} + } + }, + { + "from": [0, 14, 0], + "to": [1, 14, 16], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 6, 8]}, + "faces": { + "down": {"uv": [0, 2, 16, 1], "rotation": 270, "texture": "#0", "cullface": "west"} + } + }, + { + "from": [0, 13, 0], + "to": [1, 13, 16], + "rotation": {"angle": 0, "axis": "x", "origin": [8, 5, 8]}, + "faces": { + "down": {"uv": [0, 3, 16, 2], "rotation": 270, "texture": "#0", "cullface": "west"} + } + }, + { + "from": [0, 0, 14], + "to": [1, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [1, 0, 0, 16], "texture": "#0", "cullface": "west"} + } + }, + { + "from": [0, 0, 12], + "to": [1, 16, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [2, 0, 1, 16], "texture": "#0", "cullface": "west"} + } + }, + { + "from": [0, 0, 3], + "to": [1, 16, 3], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "south": {"uv": [14, 0, 13, 16], "texture": "#0", "cullface": "west"} + } + }, + { + "from": [0, 0, 1], + "to": [16, 16, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "south": {"uv": [16, 0, 0, 16], "texture": "#0", "cullface": "north"} + } + }, + { + "from": [0, 3, 0], + "to": [16, 3, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "up": {"uv": [16, 14, 0, 13], "texture": "#0", "cullface": "north"} + } + }, + { + "from": [0, 2, 0], + "to": [16, 2, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, + "faces": { + "up": {"uv": [16, 15, 0, 14], "texture": "#0", "cullface": "north"} + } + }, + { + "from": [0, 14, 0], + "to": [16, 14, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "down": {"uv": [0, 2, 16, 1], "rotation": 180, "texture": "#0", "cullface": "north"} + } + }, + { + "from": [0, 13, 0], + "to": [16, 13, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 5, 8]}, + "faces": { + "down": {"uv": [0, 3, 16, 2], "rotation": 180, "texture": "#0", "cullface": "north"} + } + }, + { + "from": [2, 0, 0], + "to": [2, 16, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "east": {"uv": [1, 0, 0, 16], "texture": "#0", "cullface": "north"} + } + }, + { + "from": [4, 0, 0], + "to": [4, 16, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "east": {"uv": [2, 0, 1, 16], "texture": "#0", "cullface": "north"} + } + }, + { + "from": [13, 0, 0], + "to": [13, 16, 1], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "west": {"uv": [14, 0, 13, 16], "texture": "#0", "cullface": "north"} + } + }, + { + "from": [15, 0, 0], + "to": [15, 16, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "west": {"uv": [16, 0, 0, 16], "texture": "#0", "cullface": "west"} + } + }, + { + "from": [15, 2, 0], + "to": [16, 2, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, + "faces": { + "up": {"uv": [16, 15, 0, 14], "rotation": 90, "texture": "#0", "cullface": "east"} + } + }, + { + "from": [15, 3, 0], + "to": [16, 3, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 8]}, + "faces": { + "up": {"uv": [16, 14, 0, 13], "rotation": 90, "texture": "#0", "cullface": "east"} + } + }, + { + "from": [15, 14, 0], + "to": [16, 14, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 6, 8]}, + "faces": { + "down": {"uv": [0, 2, 16, 1], "rotation": 90, "texture": "#0", "cullface": "east"} + } + }, + { + "from": [15, 13, 0], + "to": [16, 13, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 5, 8]}, + "faces": { + "down": {"uv": [0, 3, 16, 2], "rotation": 90, "texture": "#0", "cullface": "east"} + } + }, + { + "from": [15, 0, 2], + "to": [16, 16, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 9]}, + "faces": { + "south": {"uv": [1, 0, 0, 16], "texture": "#0", "cullface": "east"} + } + }, + { + "from": [15, 0, 4], + "to": [16, 16, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 11]}, + "faces": { + "south": {"uv": [2, 0, 1, 16], "texture": "#0", "cullface": "east"} + } + }, + { + "from": [15, 0, 13], + "to": [16, 16, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [14, 0, 13, 16], "texture": "#0", "cullface": "east"} + } + } + ], + "groups": [ + { + "name": "base", + "origin": [8, 8, 8], + "color": 0, + "nbt": "{}", + "children": [0, 1, 2] + }, + { + "name": "extra", + "origin": [8, 8, 8], + "color": 0, + "nbt": "{}", + "children": [ + { + "name": "south", + "origin": [24, 8, -8], + "color": 0, + "nbt": "{}", + "children": [3, 4, 5, 6, 7, 8, 9, 10] + }, + { + "name": "west", + "origin": [-8, 8, 24], + "color": 0, + "nbt": "{}", + "children": [11, 12, 13, 14, 15, 16, 17, 18] + }, + { + "name": "north", + "origin": [24, 8, -8], + "color": 0, + "nbt": "{}", + "children": [19, 20, 21, 22, 23, 24, 25, 26] + }, + { + "name": "east", + "origin": [-8, 8, 24], + "color": 0, + "nbt": "{}", + "children": [27, 28, 29, 30, 31, 32, 33, 34] + } + ] + } + ] +} \ No newline at end of file diff --git a/datapacks/ReApplied/assets/ae2/models/block/vibration_chamber.json b/datapacks/ReApplied/assets/ae2/models/block/vibration_chamber.json new file mode 100644 index 0000000..49c9db3 --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/models/block/vibration_chamber.json @@ -0,0 +1,25 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "down": "ae2:block/vibration_chamber_bottom", + "north": "ae2:block/vibration_chamber_front", + "south": "ae2:block/vibration_chamber_back", + "up": "ae2:block/vibration_chamber_top", + "west": "ae2:block/vibration_chamber" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#north", "cullface": "north"}, + "east": {"uv": [0, 0, 16, 16], "texture": "#west", "cullface": "east"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#south", "cullface": "south"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#west", "cullface": "west"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#up", "cullface": "up"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#down", "cullface": "down"} + } + } + ] +} \ No newline at end of file diff --git a/datapacks/ReApplied/assets/ae2/models/block/vibration_chamber_on.json b/datapacks/ReApplied/assets/ae2/models/block/vibration_chamber_on.json new file mode 100644 index 0000000..a167694 --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/models/block/vibration_chamber_on.json @@ -0,0 +1,25 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "down": "ae2:block/vibration_chamber_bottom", + "north": "ae2:block/vibration_chamber_front_on", + "south": "ae2:block/vibration_chamber_back_on", + "up": "ae2:block/vibration_chamber_top", + "west": "ae2:block/vibration_chamber" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#north", "cullface": "north"}, + "east": {"uv": [0, 0, 16, 16], "texture": "#west", "cullface": "east"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#south", "cullface": "south"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#west", "cullface": "west"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#up", "cullface": "up"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#down", "cullface": "down"} + } + } + ] +} \ No newline at end of file diff --git a/datapacks/ReApplied/assets/ae2/textures/block/cell_workbench.png b/datapacks/ReApplied/assets/ae2/textures/block/cell_workbench.png new file mode 100644 index 0000000000000000000000000000000000000000..5d6dfbfd16d9a06fb61d063f3a049f7159c55701 GIT binary patch literal 464 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFJS7((JB{1f<@K90nbyitl9!e}Ju|0LCs)cjO{!z!%(e+l+HKkG(i~eB o88fG_UbwVPQo&pCTtEr~!v;2k{crYkfI^SK)78&qol`;+05=ABTL1t6 literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/cell_workbench_bottom.png b/datapacks/ReApplied/assets/ae2/textures/block/cell_workbench_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..13cae85dec8cab509207e59d7e2c5fe71b608dac GIT binary patch literal 413 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 ODGZ*jelF{r5}E+49%;+~ literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/chiseled_quartz_block_side.png b/datapacks/ReApplied/assets/ae2/textures/block/chiseled_quartz_block_side.png new file mode 100644 index 0000000000000000000000000000000000000000..71009c73502e3834ea4f6cfd115c9db0f1f6f33c GIT binary patch literal 3860 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 a+_?Yb!e5sER=beCJ_q_Y<)_we-}5(ylC<>z literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/condenser.png b/datapacks/ReApplied/assets/ae2/textures/block/condenser.png new file mode 100644 index 0000000000000000000000000000000000000000..df4d9994d5813d831ab066b3bd97266085b77d92 GIT binary patch literal 458 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFU~wiO+mMlofe%PW0dZzK3s^h@$OZvVNk)bjKtI6fg2c?c61}|C5(QH|Lk6J4 z1a<}%pgIF1V*|zo5Hmscu`Ym^GYQBB0VbfSOkkBkmKH!3RF|QF0Z2By+gY#4G+778 z%<*(_43W5;oFI}^#%mZLk|3b{K4xo{TcuKS1@rTFcZDsuB(Fqf*Fsgpc$(YHlsXf2v<;F9|=G05VNS%G}Z0G|-or%$h(Jhtmr?T^yHEz$82E3@w9<)_V>*7yJ5V|8`)FB3lN>YHp> zz1Y<=$il|)!{=XzAN`ziz|Oz|RA*phY{0kxVkXEw)&&rACIQ(Xzyvgv39K^6 z(gMhW>M}Gi0Lg}TJL@%>ChGv1OFdm2Lo|YA`?>j86gix?Hhq$uF?Z+x#O=F%MLs8S z_ZX^)zP`i3)oej_w@*{@6!r$2qTcNA(rDM+nk#!pWGIpEhe+-+u-Mb#?XUtPHyPCL2~S zcJ&OhuyJf|s&EM@a0cq-EbxddW?n999M?Mpgz! zAj=DgrJ-z)qcj+q!QxCnwjm=E10Rr%0^-be7O;2*kPQN!l8g*5fS!TT1&Nt?C3<V_g6-XA+PN0!%X6s4hbT1CVTZ zx3gZ8X|fKGIos34F+}1r;{=9$p!bD<(!zoa3?fb;Zc4!^jtn9d9i5Amw)-#~yZf$p z-ORV?3`!lVd$l`mDKV7njMNKS@yLeZP;cD6oiiudFdWv^?daC%2xK_A_Vyy(dpkce z9PQ9-TDzh{kwJcE^xM0uX9Y4Sb;apwubLIaV7zKwZ@1E;P=+Ia?{#<1zUI!5;-sXn jq?+OeWEh8~CA+vyyly#nYW5V6GZ{Qx{an^LB{Ts5teAhz literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/controller/center_lights.png b/datapacks/ReApplied/assets/ae2/textures/block/controller/center_lights.png new file mode 100644 index 0000000000000000000000000000000000000000..5f9ec988d520ddecbe14e97b05026d218874ff5d GIT binary patch literal 1352 zcmXw23s90-82wSK?4hP)jS)79VU`A#D-~`@qJobMn~hZR(WK~>V37S`4^wwp1I5f5 zbF)&n(o9C2#Tt$B5!ho)NmiYF)Pg#0zCcaPP4E6xduPr)=X>1m-Z?WjCp;{0)pDoh z5CpBF2l+D*wnGrR%o5pMY%K~9Lh+e_R7my)`wtSJ6a7N{AV@A<@g>d*iDls-hiF4X z+L!8jLs0mA%+{zFmfDM&!c8c?o(Cjc0)YS`j(BX}SyNR`qch1AKfpT;*zpGX!K_Re z%%?6W!$1cYfJOjd0L}xD0p|H9^(;b#J5xoi2Pfb~b{^nf0tqSlBU}^M_e2%dKl};+ zApn^G@Jv9EHt83jii+*M@e2GVUU;ei`BxWDpP3xzgGb~(O~eGKm;}E9AO}DS#swf% zF~mk*Zp{li!iON6W;0N0+!z^1^3UTedIFv94lP3hE653D1)&hdK(PM1HhbiTvizF2 zKr{(u0ofoNi6BXY{+j0?+PtRHP|yfs<^Rl!OG*)VrW_Y+^!6k{NFjeIghu*^UOR}W zJKtuS@3Xq|ZI0P~^RhsuT72zf?jj@V`zaEUXs*^?-z?EEHsnH(d!<@v3#vN8#4B1SS_dqqV-Mb`VbJypWDYY?n=&g0?m@l%!RnrI7)w-?p zkSoXnn0oGy~ zo^Ib7nd$8iLZMLXlJ%T5eStZ4Go!}U${cRHA9ly0VJ;X?ZZhO~6c=Eq_~#CVAKu{$ zM)uP)Gpt5W7vN!5h=lG)YdZg!)=(7xhJK>C0kVu+UZ=`4fCTHVQBIb^rX2-oCv@^@ zoV#l6-M1yC7d5b~u-^E>f5Nx$Rqai$Qn&pNw7M&&TqCX}GRMQqysikPu02~ypLcdT zl>QJ*x=`GrH%(9f<QcB>R%zn>yK4qKB-9H$e z&QeM3dfSlFx}Hi?cmrEF+jG`d`3xRYiaZUp(fCPU#9n_f7=#0(s>o{i)fr>3YC9xEgpa7XX%nXG!y+`@Pp`LS%y=vMi}*oYB|*|4qh{n|vS(nJ)ATbt60oMI%E zwgcr&x@yv}x_ouDiFhw5GC8|+NhL`f*p~Y+v^R*qFDJ==-1qv2*zDDu;EI#Ul9)$^ zx#`6VpDKP=8-^F8oYdxM%12eX>p&U0yH4TnoE(MTOvb*eQ?+zxgCe^3;#PV4;EI}0 z$bX)Uvk}dYr5bRvu#qgZ?fqM<=+~sru+G(V4Zt(;23*(d!aik<)`LWP>nC z>Lyo?JZZJZR@dnC`mFHYGwYtM|6oM?|ET$-9CE&WQI+8^tJ8SkER87F$7v(@`3~a7 znkFN8r6sQGs^V>0zclc`LhjOgHBn=4(tGssJ?U7bXb+nbHqeqgr|W~Ka1M^QOZYyx zt3^r?zjJ3N9vd1|5=9A^7#ta<*E=x!@Bx!@G=Xq)Zhn4~Hq1rsoCtsUck!uE(m6QS zZQ4uHXE(qSacjuA0Bc!EV9t*_+m}W2cDGGSM4^K>1^PKXNh8o-+S2EkK7*SOIJM*M b6Ic2G6j8(*)A-sanZF*L7UnOb#%BHp;f-RE literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/controller/center_lights.png.mcmeta b/datapacks/ReApplied/assets/ae2/textures/block/controller/center_lights.png.mcmeta new file mode 100644 index 0000000..557410d --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/textures/block/controller/center_lights.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 10, + "interpolate": true + } +} \ No newline at end of file diff --git a/datapacks/ReApplied/assets/ae2/textures/block/controller/center_lights_e.png b/datapacks/ReApplied/assets/ae2/textures/block/controller/center_lights_e.png new file mode 100644 index 0000000000000000000000000000000000000000..b7289cde13ee753932b470a5e8b5da9fec658814 GIT binary patch literal 1196 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=!3-po`I#mGDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(ehe69RlfTt9dOEEmx}X5{q0C;xwNO>_%)r2R5QG_bOw4`@6x@;; z;hE;?sl~tnvGm`t`#B$OIepT zcrjl8^Z))^-(_)$zo-X;2Ah{(lWj8~a_2tCdPZoF`nba84ufnUKtl~fE2_Hv;_@hZGr;8k# z0&|~v{PdkHQ?)?#B*S)t0*@8;wzh#MH;GJmwd478@%MofQZ3@(fmPFQSI%W2|!*xOh?hb=k)XcZqj(5go(Kvo6yFXCCCv_!A#5!kA(MXRzL z8i7`6{M7B1s#>yi1;{F$75n$?3tG8KDB#tO{rUO#7B5&;u;=eoDffr#zZw@@+ftzG z`TUCMf`a48y{o>cUf9H=zZU4L9LI@onJnad+jD16))Mq)J6C1$oFU3-*Rsra4Ga~E z>oRX`V>Xevn$~B$|M{}!c^R2e2XuMnNNo;&X2E>U>fPVRhpR=l==SxOzbr8M7iG_! z?#_LEQi0k)NXQ)WN^3AXB4Wvuyu9-vhbKVqNpRxM49 z16eh9<^Ml_0wS-oZg{bye*gY^ixXlC|NNWGd;AS3`0~KPmm{4}cKvl*)K}FDshs+; id!fO%BhGj8+7tC!?pIHRH?1lHC16iiKbLh*2~7aADhhi5 literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/controller/center_lights_e.png.mcmeta b/datapacks/ReApplied/assets/ae2/textures/block/controller/center_lights_e.png.mcmeta new file mode 100644 index 0000000..557410d --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/textures/block/controller/center_lights_e.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 10, + "interpolate": true + } +} \ No newline at end of file diff --git a/datapacks/ReApplied/assets/ae2/textures/block/controller/horiztonal_base.png b/datapacks/ReApplied/assets/ae2/textures/block/controller/horiztonal_base.png new file mode 100644 index 0000000000000000000000000000000000000000..38d6d50079285bc2665600d24be2fab312aef45a GIT binary patch literal 484 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF}ymkFO&X5A|d-17h6 zQL70(Y)*K0-;Fi<~&ooa@Ed~xChm}E!k(GfF$npYWX($`y z77a#bus9QtZOF*Pzz3wGfHP@RF1u>s=(h?yY!SQkLdnFM5m029zuCa}sNOA8{&803;jU?X1^inydq4 zwt2cZhDcmaP7q;XW@J-MHV8;6;PvL#*Z22MEZ}`P=cZM0q{iWQ-;6~spVNswJApMt z#`^NTV-qe4#g(oxl{qov=GLsJ=V#2=zHbug-?rt7LEAZFb?fl8Gj1Mz@J#64W}72R zXD5DN)i>wctmL~q+G*!b%&~kPA?_RzwK6)(W0v-zpbldeR)*VuO{V^xY*qtuou{jx J%Q~loCIG7pfnxvw literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/controller/horiztonal_conflicted.png b/datapacks/ReApplied/assets/ae2/textures/block/controller/horiztonal_conflicted.png new file mode 100644 index 0000000000000000000000000000000000000000..661445e3974dc81d3c2525104eae30c0c7885db5 GIT binary patch literal 484 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF%FBlnru= z1|u_AoC(M_WMpFC1JY4IoY~F-7S8~(LBLazk>Lf<4=}nQF*C13FE6!3!Bo$X0Vpwn zoq+|Y&cMjnfN=rDOptx73n1o906)@w3N)&Vlx zJY5_^BrYc>h_Em-vZ*E;1SA#kdUNaR`+FxA@V=aL)2cX9BOF$z?vds zefi$82^WRpO4pdmoS1QQYgW|rGiGexH;MFb+j7OA?VPc?b@|u>Iw?dy80$EQo_Lng-yZ{CVj4nvb%q!8$OD$0_)iY!ON=#s9U;(N#Ffuk^TmUf>WFPASh&iAj z1OX(>(h)9OdA_xpF8etLfU`y#=aQ(RO;>vyE+q*$FV z*8RLkLG$R>RiTkubAuzrHtpcj;#=6VV5*v9RQip8DNB~xusrErbmHeE=Mxo`(=vOx z-l#16yh*2c?%^qWlnzI%TB9@NOv0W;V#>Z54w8-u%4H87rU^WhZ=Wsx=){xv$NyIS ztN&yW8Y&qXYWjJ{-JUF|RIRL8QP<2Jzbcvt^cYp_Gd#06??i*U(1i7`cRliEeR%fp zjLGdQXDwUl!y5c)p3N+)j|S#fl2SN$HIzAWj_App5K@}|IPvzjt($VKpB3(pzWV*t zwkzM~zIoTQ%lU<3MC!+y?3wP@C$sjeDBLfNJw09Q(CqfD>ioCA)!x4)w(N;*<(Jq; ziSJh&Js~6&;3jaRBi3Sqs*Bz6!u(Q!ykgGsLYXHY1WaTOaU9fae{Ox; zrfs53g$m=(L?Is#2x6?GhElH)W$o}T}_^3iFQhi8>rCcDp= zmOAqg3&_*cEI)GiUr7={^|avi(%zz2^JgEcT(`d0TDRr>>^pHy+njGGx`=-KBQf*% zwqO>Zr}yXHJ~dtR&}{b}_5L02e(yUb3i9-u=tqL_D~@U)d-~thn3It{*%C{s%`MGjdukqW!-o|NpPT|NkrgU&#Nv*YE%T1G$eQD*nX= z9d%M)p|$IOPX71*Rsa7--+kt==jf^b|4Yi=cXa=aPPpypc68>c|8I-`|8M($G5Fnf zi#z{Uya(E_gxP5akdiM6@(cct7ciWaECacov%n*=n1O+BKL|5gum-CD1-GO|c&2%J zYB6vCIjjs)jI0cdK$aH}OGDWp-)k^3gToLZvPu|_YNOye#Jtug$c#4of>;X`p4kMY5}AB8gR z&wUpjeSXJ%ii)R-pyG61c9Rx$)IS z4I7Kk&R?{Xoz?oPh^p_|Q;BNQ2hM-CvCikxwL9)HOVoAZQc0jeoKiWL)VIn6wj`zc zZ(L9v+O~Ro(b@M7k)fe0Lqnx2_Il+?N$kG%OEs$c!Uk{Mz*CpjNTqFJ{IhG_>d(tA zJSy&)5_;JrG*YnW=7a?Ym(>KG7If7J`zFM_D?Ak9q%E=6x85q<+xUI=)x?I4)o<@F z+RM(o`>NQ|+_SGhPI~`)AJj>=c@JOMDhqMaEpv#I@><63EmldkDQoD>gq(p7LM c?QeJ`|GBgOmY88g2q^MBUHx3vIVCg!0HzgtI{*Lx literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/controller/horiztonal_lights_e.png.mcmeta b/datapacks/ReApplied/assets/ae2/textures/block/controller/horiztonal_lights_e.png.mcmeta new file mode 100644 index 0000000..557410d --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/textures/block/controller/horiztonal_lights_e.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 10, + "interpolate": true + } +} \ No newline at end of file diff --git a/datapacks/ReApplied/assets/ae2/textures/block/controller/inside_base.png b/datapacks/ReApplied/assets/ae2/textures/block/controller/inside_base.png new file mode 100644 index 0000000000000000000000000000000000000000..b8a365228818906c3e6cca766cd6cc1c852d5f77 GIT binary patch literal 493 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF7PJ2av z3CK2NWMbe0(osO1+0FtM&j7MPz*CZu;RVq3FuEWyGp|H1FSSI$RL_tBC^3PZfd#0} zz{uEuaRJ0kkbSHRAm&U0vO$0eXetv}Wss!>kOkFcXkY-64exf=YcfsN0Wzn0x;TbN zT;@He%ik0r(f06olA7o7hf6-?rO)YNH``ROEcAhFpibF7wouN1xh(&eeyP5mm-Ef> zP-M~qpWWJ~(>Ui&%9*k>u~6w&q;ZGV!(hh^bK^g(O_tB!c;lRno5bM{KP@gcc$XV* z+qt-K$%}ofJ=cA7FE-^>$mjf9w`$?9upL_O!Y#|6c1u2;8S{zn*{+3F=W-tNZ;a5) TJ8QHj6y#V>S3j3^P6-iXD}xjxD+42t>mgMg_D0pkLQnIQXE z7eLIJ1Z0B%6VOy9u*x7y3m^-s%h138BpcrCtk-0ktOI1Wd%8G=NL=PUXUN}VAmaKk zd+C|hpfbUkx$(Col~dgwzFok%+3?7H{og02Hy^fqS@A;TO-5DFR5uw-jSxZ6@_iA? z%^KgE&ou16CpLWCAa+CPp`~x2XR@+~>B>w2+fxZ@y^E_SsT-G@yGywp(+;NS%G}l0G|-or%$h(Jhp3P*1aziJ~ua2)|i;R@8qkD;e$|Olq zp3=ZAy80#-HjYz{ygvNsr-FiX!Gar+HJjAc)&C!STs!p_$ZF04kH}&M25w;xW@MN( zM*=9gB{jk`&C^qhfdj~4WsqWIWncudynt95$_6=IgOM35&IDu|GBPpn0qH0p&TMA^ zi)R4YAmAy<$nXN_Ll|9WitTM>b0?2~uGBhv%$%c13>ou7s>j0T^JzX3_G=f9>y@gs7cvzk5+)SDj z?)_gOTq0&H9Tytz@to1YOCnz-Xx2fcQ>PE%Ctk6Eq5s?a(=7Jh z-&d+?C)aFUw{YtG!#<`Av-dB*eadKSpw_CheM+DCJX(wy3{)HVQ}a38*;r=DfE?}V L>gTe~DWM4ffZvnC literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/controller/top_conflicted.png b/datapacks/ReApplied/assets/ae2/textures/block/controller/top_conflicted.png new file mode 100644 index 0000000000000000000000000000000000000000..951efba6b5c3f9b3bf74976e824687a94a477637 GIT binary patch literal 512 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}B0G|-or%$h(Jhp2JC*yNghUTVvoJ`C@)R*J z=<1tT*f=UENUN)>|7T!$BE@zWXaZ+}M`SSr1Gg{;GcwGYBLNiLk{aQe=IN=$zyaj2 zGDtD9GB5&JUO+4jWrN(R!N?32X9BVf8JQUPfOHfPXSTC|#WR3x5b%^_WOxDe5{xcL z%*-p%%S$a$Fx4|;07^_?XJ7%UGcYnXU|aw(6J#Ij0*E=2fNT(80-DMMRvBbz0c1gS z85$UXWW&3i^_onRb%4yto-U3d8o{Cc-a>~BIGhdbPxE!o{T;t;LdnHEo%7NTLV{b5 z{am(bi;!vY+t{lvKEgAYl9@hptPtG!c#og>$0-wq9~G`WD!AtwtKcHLbG-?CZ|0oX zY&F;UU362e9mChB8a?y&=~v8nu<>uS=7-`h8qo*0e!p&JllxX(;*PM!qu#!SVcR0L mR)@N8KIQ1UqopHS`4>ardN#YR2E$sAQ$1b%T-G@yGywo#=YsD5 literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/controller/top_lights.png b/datapacks/ReApplied/assets/ae2/textures/block/controller/top_lights.png new file mode 100644 index 0000000000000000000000000000000000000000..c4cc5d2c443e8f5c4fdc116103ee7487528151dc GIT binary patch literal 1337 zcmXw23pCSv9RF|T%~oE=owat0wqs&SHMO}W+E$*E$7l}jA>2aOWJu*vD%~bsD^k(} zUH8l*)8(}C8cD~axYSCG5GRJ648`yMSKaS9pWpZMef&PZ^ZWkJ@4T-!)7SuO06~y3 zo8``d{W=)odRp+h8G|f<9U_Utbc4h_xG6Y59cFkjAgESo_%%Wsj^)0d2R+8e2f8|% zI<~n1e{Ob`AU+{_j^$e{x|9W3;;^Q%5c({H`^ns>!i>Dt!HG&^%(49dFOop8A`*$< zVgl$(06+j%jw!D1e44UVaeeoy)ElfM0dN|CW{%8Fu*N$&7L2)I1@X;H^9aOB+xRhV zCWt0g+BShBp>HSB07y^+Qb`3i;{v&)!u63XQ4O*Hcm_adxcpq+D*w203%SA)cg5De zim^|YoTALXvc}lgQS=P-`_F>2U?vF^ZfH4STvfEG{UP;MA(jv0m83(C80e$-Zb-rdg@4L%y zaYAaXmupFZcIP`d^)=S70q}U&XlUF+xmk3zJ41+ZJ2xg+I@4u{!{4_4qkTTu%!ZNg zu4nBhD(vF#F1lYw`q>HF6*Ls2l0~BTW}3FLq>mdF0fkQ*8%5fPvfAI1$yK!KXAcvR zVsm0rnEC81s<70DMd4L`Jr|_ldUp05&??wkes^)y6lY|ALlMGw{8$<#nbwQD*Alr9 zgUTdT@sqjhZ4McpGFZc|2@7)6t|iT5nd^G{yN+RR6nl@fakJAt?p9H}#!ogrD&=lj zq!^j5-~+34C(5iW1Ti95r(EohdHKSr`xAY3qtgMP_IX&Jn{HwkB#Mr)pjFw-6A)d2 z2RP~T`e>c2kr>{tmh8b0oq_$?GS9YVe7Q%^u5=8q0>4jL_M3okcQtjG{~Dc&In0|@ zP@lJ{{`?&M;N~)ZF_DK^X%GrSClvp<2!?%pcG^uiqd(7`kS|I{ew9ixCYN8$&&(8~ zu6GjUl8m8~X>ZnHOqTK)u5k`7EiLakpA=NQpeE$qnUL6;Ym-gGZK|p1Fr|Vz&^ANI zSz&TM{USWwL$FpVj=0lX^HbYv7wY8F=LMGO?tVrYU)myiX{{uLkibR;+oAVPuO~9{ z+ohe|F09s}A&UN@gZ1!+0)l~w0KI3Ffh^c?{Kv#)_z25v-72q5m4!NaGQS-9XpR`K z#z(N|w?{S`&AF16RIDk_?F;yxiGj`C*O-2!1f??JL0vOGHO%#0=j5cW>gj?B?L~F9 znFYD-Vwzc0vB*O?zj#^nN}Uo|zA?dC0KV>5)jxk(-J3GX$THcc$C{B5sg{Q>(Chw& zFoB^HzGPzy@&Yd1%!ViZNQX5(NSUJ1Oy8ABzkcrE2YSiTN+xf+up!{&rOs0BP^7Rt zwoJ))DZR#g%YW~e%+t=3Bzw_ci~nkBP%k+L@K(QsrVLKyqB@g;b_D45F0*JX*E-eZ zfv^)<*)8{m?}$U^!X-Q{$&2vXhS(aWynj$Waz}ih`7(XL9IqFE%k4YW;*mq7)do9g Oz7N~O+g6HM^S0#w|Nj5~ zSG))MVCJ zkOkFcXkY-6y~=uwvFej|H&ER?PZ!4!3;)!9-pv~e1dfV6I^}(b>tSF=v|>!_j^BUn zuWe3WeX(cmvpN6&EZeMa`ba1-_|$eT#UQVM^}&m8=1d4<4+xD|eK&6-qsA(>%O*d= z13%T3t__>q@FinQ)~ruomu74Yb9UIg_Ue^c$KrSYWIM$5LGa-!vrv&pb@|mRC88tO ztXuVh@nVi`W+31pgqMe9d49}F~)LCjBASP|JCd`zemntJGXS7o3k0i-s}yf zJj}gSyXNt~keu7cvc$dqhT)g@`FCIN{AOZPUVQnj#GhWae1$a(@`CHKf@6;_mdGwK z+_ouV{cYDJ=}%UBvpMuVnk3CS<+*c87iZ$;2$mZHN~>8O8~QH0%xRg-aJ%j7v(J*! z4XM^S&ypJ5l21>PGb!^4X1bJYWGwsozWr&#bYaHJKM!s3J#Hrc`K7eQ885Jhw(8h) zZS3paIQ8hUZM`RMoD84N(;#zH)tpP?d^^Jhp+nC$aePp4$>R*uj>4g>z{8<+t=@=eSNCjmQT~YIX(Knmc86Po-(wR6M{L{6Li8kA~1UHx3vIVCg!0PFc36#xJL literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/controller/top_lights_e.png.mcmeta b/datapacks/ReApplied/assets/ae2/textures/block/controller/top_lights_e.png.mcmeta new file mode 100644 index 0000000..557410d --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/textures/block/controller/top_lights_e.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 10, + "interpolate": true + } +} \ No newline at end of file diff --git a/datapacks/ReApplied/assets/ae2/textures/block/controller/vertical_base.png b/datapacks/ReApplied/assets/ae2/textures/block/controller/vertical_base.png new file mode 100644 index 0000000000000000000000000000000000000000..a6b1bb97e891195a18276a52da1f3dc00eafa828 GIT binary patch literal 485 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFgscfCS>Ro&!3vMNaf&#*vzV|s9Bfz1Rnpm68g~L*r_FtJ<~5W z@@!qRGAw-=v*g32E5lZ+HC~xBGi{C;_Yn`X*~LcOCoaUK#>K5;P0}&)w`QKyWjV`^ z^UMlMtJ!>*<9r_^WdAjgt=EJhtmOD}#)baC1||e+CBC zxuF?AEt~}&k;M!Q+`=Ht$S`Y;1W<5GYJ_K+r>7PJ2av3CK2NWMbe0(osO1+0FtM2bm87o|23VFMxi4(FKW_c_n&zsU-@gdWH-@i3#is zEI@SzM#ct=3m|5K>|RQ#2t%r+EIXAXOg=70ZR_5c5=|No;C zZacaiEh&57(fxPkss9&)-)*7PJ2av3CK2NWMbe0(osO1+0FtM z&j7MP;AR;k!wX<=!03X+%)Ao4ywnl}Q$0flpu_}r1{R zaF|E?%!dE}kM34hZebA8vN#~c4K@f?`aH8cCjE>(pH<=&XIQ8z|+^v)IVM{`*mjR*035ChqwLx*H#%nw7&i5a8zFD;pfG>e{Ntn zvo__yIkVoaxi2UA&z$y4w|KHyZ0(jcQk%s5yZS#zMrRp@83AKJCD-nj$d+FY+}&?; zlf?_EVvt{5vOG>+7*c-0#2C{(jE#<3xt9_I6dv*R{NV)y4mO$938G z^?#ooW;FOdsnPm+>A9~D+kG|Z;E%qNhZuFX8-_Q*h zc)Ip>(^lBEych27m#DmGTyJ;!nKF}sKF}tM^M-nmz|%id3=F)D8)j*`0RzuYUN-X} zFz_N6fPohg1PVN*ZQYxH%((yF=IPomb>HQ;SbJal!m!#6l%_ph{an^LB{Ts5{qx*3 literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/controller/vertical_lights.png.mcmeta b/datapacks/ReApplied/assets/ae2/textures/block/controller/vertical_lights.png.mcmeta new file mode 100644 index 0000000..557410d --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/textures/block/controller/vertical_lights.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 10, + "interpolate": true + } +} \ No newline at end of file diff --git a/datapacks/ReApplied/assets/ae2/textures/block/controller/vertical_lights_e.png b/datapacks/ReApplied/assets/ae2/textures/block/controller/vertical_lights_e.png new file mode 100644 index 0000000000000000000000000000000000000000..d63be9c618bdd44bb9aa86e466dd214784fcd042 GIT binary patch literal 1002 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=!3-po`I#mGDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheu>n3IuE&g=mWybA@Cf)H9QnT||Nn*jzkB`u|0?|dzvBP@13^cf)K_Tb zK8~pP7rX0!PW0Vp4ttK~fB#?g|Np7~|DzLbJGvb$DSO}1{deZ6{}+SbZMV4dw)p@5 zw*UWEya(FAdC>h4kdiM6@(cct7ciWaECacov%n*=n1O-s00=W?UF+lo3T{b_@J#dc z)MDTOa#$Ip7+Dz@fh;c|mWHxHzSm%628%NR*@lcv417R33Wzh?S-|2MKsE^MFJokQ z0SqJgb3g$L0!%X6s4hbT1CVU`maK_>)`m}k>a;yw978Ppeb2Y=I;6nUmUy(0x&P6D#%KTZKiAZI zWnOOoD&!P7<7QH3vc-I)Qhk ziTq9OZdVT3Ek&{m=c`z?7>LHczI64CSi({FrEDz;9E|HZUe#RQJk5Ll_v?Av#7yt^ z32fiCS>hwx?%ub#;)|F2E)abvz<4W8GfsJv|FyVCCP@dav;7;y&1XwkXFRoH`hU#8 zrCnnAqUzXPv+pv!`LW_kg8+}>1JS^_;bJ-4qJgH$^-VLe@0-w9wrR=-w&l%#Z)&Rg z&vwv0q{z6%erZMT5xdCxQ$i;gf->t`_Lf*Ix#FmOUGRr_o1)bc6VbnymoC4ld!V!5 zil1qO$s(;p;+u0npPWeMVk8{b1O0BBPORob>oeDSgD$vxQMIV8t{!MiKe4OKH zqQ5q4{)aucPtRKl302kwdx55M{Z82nH}z?q{!+N98mU^pE-gI|G<7n})IgA1|9<=c zH1&6K=;!ksUz6iki{^i*y?uV))+(@DMHl=9nyU3XY|V6b4)An#RtPA{Ps_|nWnj=a zKXsz5$Ke2xR{!9mt3=tkyDU;x_=&l=%BXg^ZV0%=wbp9Jo-h2fOjI=W`kJy29-M!4 zRde^|b$siZ6n-#2dhuk*3nkTi(?z0MxZ*1I^nbo*d8b@n;fj~fW-B!Y-|c5zLWC~Q z4Bhxz^zMsReny^CXN;0g9u>KD?YiyVCA+#m==@p#>&lv=4D&r~j`LhryQeVk<`&*_ zzmF(}O$dEd{HSoUluF%`U5`FWKi_kj={(QOl}Bs}J0i|(-*D;BnuM$)myaZdUe=8F zs9sZa@6np6T5B$<*C!gRUazv#FPkM$N3qSqMPtQ+4xt>EjO(5oCoCvl*;{|(>+zFI zC#>dh>tmg=(6Q|AgZdBE+rsj)E_ri#IXv%vT+_o8yW3&!D~tQb`-1Hm|C~QC_1>51 z*$3XJzr4Ck%#P{T_Qvkl%a*-ioNj&K!eqtSo3wvsa_*G*Q0I1k3L{%y<2=*+yx!tD zb_|-cu72VzDB$RMs#(4F>~7|@#lJuIS=)Qq3px}vbUotq0>%q}fKQ0)jw$hn<|eK0 z51rrQJFUb~^7Yx5Kq<}wkH}&M2EJt=%-DWsWj;`_D>cG1&C^qhfdj~4WsqWIWncud zKt@SJ*`SEmU}Of1GXdF#j7$uCKspMDGuv6f;u%0T2ndxhGQ0q$4;WpLn3-3imzP?i zV5(=x0MtE!oq+|Y&cMjnfN=rD%>VzvS{VvsqS#v&>L&tuNuDl_ArhB$`)>0dP~bVj zBh2uYLDANS%G}%0G|-o6D48Ss-qt_Lf=H>8HcvUr)+AWRxE>h%7E>nBl7XLW^U) z&H{#u1uq+4h$Sw}ZN3ulEbh(Z^2VQAo_YUfd#=NFkaMw@8psY$S3j3^P6KPOgo%Xol`>)0S|6lySA>~?&_a1MDs+URI z&H&YO7I;J!Gca%qgD@k*tT_@u!7Zr~o@t(*S_~XO4l9EcBP#d+bo$y^&yFbYY&Zy85}Sb4q9e0ASj5egFUf literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/cut_quartz_block.png b/datapacks/ReApplied/assets/ae2/textures/block/cut_quartz_block.png new file mode 100644 index 0000000000000000000000000000000000000000..cedb171331a73013f7329b1c685458b0c43e0204 GIT binary patch literal 3417 zcmcgvTZr6L7*5#=y|`3bTHB%$QZFrfCMWj`GhMbb+wN$mF58iARcKFgPG&=Ak~GQg z%=T#!t%!mmC@6vmeNYOEq7M}x3ZjUVilu@eh)_YOC`Iw|;_YOT$-&>OJ>LL33{g;;#!K!F--yUY+liM!Sht-YI z+9<=k_3ZlJ&`tDt!^Hmj*vFTConQE>`O<|K-~V>uvmYP+Bbuj6YlHE_5yPzClzdk) zFTb*tVQxO;)~DjB+J4jaTLpxDixfJofT9_uIMNA_eT>AcMH;SG;;y`RmSbI9;tnY_ zSPRNz+8sX;l7lA>)a?_;Yy)#6yNA~mJ0{i8A~9k+t)>^5of6koY|{S|G0(AGNPMis zjV2b^soDfv_Cvy|1qf^iMOHHkf-1`@ypI*32zjXRf(QiFgt94UZ1&-(IhHMk*fA$7 zdoy$Nsl-jkabWU%yWK9drGg(ec)>6X9*Vpu0*V09oEM`G@S+{5l1xp7M0V%~vFm$m zq83^HOkCoq$7v|7AlL0hS-xoI_zntqp#YQ6xpxRa|M@RA4EcGZ0a3DIW&jo~^B#}Q8+GK2&THMidEQ%+|Vt!Vzox=0Y!L%Ry z(X@Y+B;?CWQW3k(RSYI8OQ59VUIm)0`Jxn-f) zHXT1~A$n|X3pEHIc#W>LTFtC_QH(sBR4XNpx>|5uY-&0Yhyf*F8IA*VB-;RCM*^av zDcCkt-GOp%f5o?Fl9EdHr(K49o9f8V!qkalXqqAc9ZEXT9oYc}wk-gWiVQ44RU)LP z?ZMEcosOFQS`)7@)o4M7NETFqWT_5KpDX}NLx;_|c`i+{$gxSam|gn^DT7f5 zR7H`LOg`auNOP*<(yT?PBWnN3;iW5GhDqqA*lkmD+>L1A&E?{ZHx82HeWFa*blGmV zn#fM0vy-wVn9IcOfU{p&mQ%IuX+raOje<^Lk?+K96q3;fP5yH2!ml8V2+dwQ2uV^L z(IEy^0gA1d(pBr;*nnbX-yH{8z#f zbqy&NqMhUj3Q$Ga0J@4WP*iLn%b?4WHaM&S{IR02M4=$|li7_0X8YbO3Hu5!Kp~=& zn1oS@b3(txq9ACxcDFJ4Sr2D}E$?ME_Srt>T1hf73EjRb>9?4>!~RFMm#xp05p0_5 zrSG~0WVv+PcIa}c+zw0`NxH|Z2vX0Aw(SemF~+SRfG zkRa1}W$Oe$4a+udd`q{wOqXc$|M6T|thr)dmS%5EjnV;{&~nsAUfo;a9@OX)<+Qwe z@T8PQq*6B305K#RsFF;8PRR;jOShqBs5ZtpJ({L_9coo*>sW9Edb718pcyg(7PSC$ zS#^+3hbkiQnrg3S0uNA>iuzMgJPu(#tk|qBYsO=_gP5+XC?@=Z5rM zU`O;}@+J{fE2H(T7dM~3F#G{rGc@tQdFHM+nRkXBT{Cp&t-ri_`OL_<=YOBSpubtbx{mge4*M4;6+~b?x yK6~Wro%bL4eA}Pz{)F1)3#9(~>D#ycFtp{1jT_%^*6vDPVya^YDhqp#KK2(ObtbO> literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/damaged_budding_quartz.png b/datapacks/ReApplied/assets/ae2/textures/block/damaged_budding_quartz.png new file mode 100644 index 0000000000000000000000000000000000000000..8bfb10f4c8707013a02b56036989704d69e3ec99 GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF+G6}4iu3B`Qk*mSr&QD(12j3E< zBUDl+RRxH&x*t$XV|vGVeBP@C!3iEad%PvuiiGPIHM!j5O*DE9XEHGR2u zPs_GD?0^60vr?N@_O^=;FZ*rN)!ZUntj{OWKFQ}t`09htwJQwH?22WQ% Jmvv4FO#r*uWrzR( literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/dense_energy_cell.png b/datapacks/ReApplied/assets/ae2/textures/block/dense_energy_cell.png new file mode 100644 index 0000000000000000000000000000000000000000..a151840d9d51374fb336aeabe4cbe7110500f147 GIT binary patch literal 481 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFKPOgowhRT-mTgnUnYDm4cro7+hVSjx@X(E z`LidtG?iy&CJA4YX$I=$EbxddW?n999M?Mpgz! zAj=DgrJ-z)qcj+q!QxCnwjm=E10Rr%0^-be7O;2*kPQN!l8g*5fS!TT1&Nt?C3<V_g6-XA+PN0!%X6s4hbT1CVTZ zx3gZ8X|fKGS>@^C7$R{wIU&T1jY*l2E%Ew<3jx;!oY_RTe(LM{q@vDt^-SpH28|BK zty$mKUEMvsSz>li?^eg2ZD-TpMV@6ax+OmUXZlpev^)Q~lU8iWtt&rX)h6t;k;`Sb zaI@F5RbMuRUY;Y-q8KJ(d)ciRjrZ6gD&riKL!41T{2PqH0784hxhr>mdKI;Vst E04czFCjbBd literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/dense_energy_cell_0.png b/datapacks/ReApplied/assets/ae2/textures/block/dense_energy_cell_0.png new file mode 100644 index 0000000000000000000000000000000000000000..055a1d078f19eb8438c1e79bcacda4842f14074e GIT binary patch literal 476 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFKPOgowhRT-mTgnUnYDm4cro7+hVSj+Qo0W zSl+sb$#Bz!6@oyGoCO|{#S9GG!XV7ZFl&wkP;g6XglC$krxpVTki*I##mLIQ2xNHy zu{4woa*+ljGgzDn$TnnTV&DVPQ9zv8&H@(C0J1^AQ<9P41<)rjx*#z#uS72|wM4;G z&yWEqF@c?d1*p!z$k>2!0mMv@eXI*0=1c;zL4XNpDic^`kfjBX1=VF}U;vU0?{?N} zGELS2GAle?977~7CntoMu`ww#vL#-ha3SEjfHRxu)=zzXpH$S@uAT|K+@R6nxHaqh zx~sdVH%rX!>D}tsv+Zp9`-rm)Mz_T8TW3#YOuJLbowTB1$(nQvMUmAGTdWONq^$GO yk2XEq=_rxZs@Ocib3=B=%FRm5ixoIHfU#%s&aiY!bihWCdpuqJT-G@yGywoD0dl7R literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/dense_energy_cell_1.png b/datapacks/ReApplied/assets/ae2/textures/block/dense_energy_cell_1.png new file mode 100644 index 0000000000000000000000000000000000000000..afa805da197e0d4b2d26bff8e0cc1ff14d48a9f7 GIT binary patch literal 477 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFKPOgowhRT-mTgnUnYDm4cro7+hVSjy4FQ; zf4tKF`)U7wrqwO^)B)7XS>O>_%)r1c48n{Iv*t(u1-GO|c&2%JYB6vCIjjs)jI0cd zK$aH}OGDWpM`knD6WAG8fa(m4j13qUK+FW$$GQMw&Lkik1ek!PGJ#bFSy}*DP+f)w1|Zq+ zZfCtF(_|eWv&_@QF+}2Wazcn18Y32X4H_Me zTeH5eySjUNv&8J4-mQ*3+s>w+i#W?*bW42x-sGu`M*=c$|M@rnE020hl4wVnI@{DU zp)XTcFS9h{a9(4OB4ET>#%ov_mXaXC!sy7zV7be%EoS*&V~}e+UHx3vIVCg!0O=5S AV*mgE literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/dense_energy_cell_2.png b/datapacks/ReApplied/assets/ae2/textures/block/dense_energy_cell_2.png new file mode 100644 index 0000000000000000000000000000000000000000..9ab4542878ba5f55aaaa2e75e2534177e2e0a874 GIT binary patch literal 494 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 GweCMBzQ#lV literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/drive/cells/16k_item_cell.png b/datapacks/ReApplied/assets/ae2/textures/block/drive/cells/16k_item_cell.png new file mode 100644 index 0000000000000000000000000000000000000000..28924720a3331fe196742c1ce0dc4018e581c2d9 GIT binary patch literal 3060 zcmcgu&5zqe6!*eXl`Sif=wXGBuv`g&%EaTbeXY3x?%p z^6shM=p(RxG+uipRg_at=Fg1s;f)3OVTbL_Y_s)}$7HWUx%5S4(2GG@QR<6>n6hn= zslMohQA4}^`Inj+@`iS`+QO}PMQnv@`-!-+f3eN>x0%be#dGs>^??T(dLpChpx2F3 zZ_v<&iaq$9Z|j;m6v?(5+EQ*&-E3V}S7aj8YQ;v(u!vf7D~63-V!faeY}9mI(+v}0 z!^5^`y6WhofjL#JCp_>rnyVvouxe;qSr&V`-tYG-eX}Byj&8WFt7D=Qf{1yF5XGH zLk~F9MOXAhl%*hRl(K+Ut5u3mRom;8(rI>n7d#pTI8{1r@5Msj5UJcrm^i-+7SD_w zOS27e51%6(2l4W7yd^W4Zpps^q5QjqBKB4iK{J`OrRYT;I!?+M_K`C*X(ffr7ZX1qg8J^|dCoFjw>>Vn~ znHR{UM*-llM>|4~qt4J;tL3dnX+|R^)|(9tT&;v5_iEVUl(-IZoq!=~SQetb?;;-y zTe!6vt-96m`KDw$dGhn~ML%%KKu3w1M=a`?HsOdcED+(AK(5bC(fLmbpY|&Zw7(60L8(NUao=W4m8#0>LsJuN<{@ zVZM1l#3eN!k3&cPQvK~RSijanRX_&N)kRdeY{wN+Q6MP zBwUjr+l2Ar05u`*I}F!cn{m#IWOT!0sI@V3xDgnLVIP>nwJ7qz0&*-npbktTD)517 zkAwIWMa9-66m|V@42x3}*S%rH#V*_>VFgt?M^iQ`IX7B!R_p5~ycfP)^e0!~b`@1)clXv#t tx@J7~{d*5ze_4NLe`a>|i(9u8MLaH|4;Ftpn_s=x&tGibTz>WSKLLYWrxgGI literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/drive/cells/1k_fluid_cell.png b/datapacks/ReApplied/assets/ae2/textures/block/drive/cells/1k_fluid_cell.png new file mode 100644 index 0000000000000000000000000000000000000000..4e1eb66b99e61f5f57308596509f812de489bdec GIT binary patch literal 3665 zcmcgve{9^;9d}l>qV2kNr7B&wf$K<7yVQ5jKhAfy?oyJwG&!wTk~UM5?GJcvP=vJ>mx=x7vHw(nlsbo<&R4>d{48=qdVt6n-d_2CpxaZOFXa00>?zV>S;YXM4+WqsxP11(Rq4m!n(9fMYFOOY3{=we! z@-@%hbKqXSd6?ew!pa9<+CL~I-|BC9V|;Ypci--cZ64cuZTD)q<-C3R-@iEd!n2od z-^$&5^XtD_dhN?zV{@`8d1&{k(wXHGuP%LO{2ve7zg)F=*;7Z}@7#A|apznAI;p4U zFUppV{P9frs~y{WzrA7&eE1tTe(Q-xK7Q)N#53Q_O>Wp>?K*X5_Kxn6^4Ib|TlJ;) zcv`ytnjaj)9it!a8~bn#zx3Cmr~00~X*4nau($o#+SeZX3mWghO?^i$UOIYEe`IoO z^88oY-n<(hKk`F&q4U7K?++FFo@iXX?Z-R3RV^;{@r7|~xp=mv{K~n%AKu?S@cQ@X zth~-U)wS(_(}xeOcyizMxfSnBJUHBP_OY|>&I_%5cON`9^5<0Hrx*AA#CrU6Vc}hq zuRTtxG2ia&b17=!)&9{y-M@DQMSYnydV0Oy+y(_%r3ln46-UY?n|M=Ha$VVmXe;(; z73U2z#a#IP(+q8BDP~J72Xb~A7mUtf2X7wU*n@_*B3WbBwJchYEGq<|ggr=?OGVRF z$|CJV~Y0JTMEE0x(dgjd zU}R8;SWZ65$+8>;e3a)|;=#H@rU%Qc={8nDYA_k>BFC^j!!l_f7OGaimtsf+mC!U4 zLfidLu>!22C@$g>Ha$1WML0j&imzR;Jj*RucDTiKYZ)WCi-yZ&69_kXhCUVjG=G0( znkz}#%*bVEU+$R8eYR_<6h`2B?E{2yErHWQ2!P$5Asa_GVb|(+5N;nJ)EfiVxNLk1 z0e__ymxdJGa!Qa~$0)%(j@o9Pp~H+QX{%^CIZMMSMyR(FO{hsiig7n}w9(o2w8Y7h z#PSi2q5TvoSs!o%HuGK~#c)!+b&H`*Gx`jQ{eG>#V;UqDzUJIJwUA=sJn6G4bl)fK zqzFpd!O+7Qau5i>0~RD$F44ntiXbboL^I$OKp;X_%jvPKVv1???;g4WnyPz_biW2Y7-DlQ$FY382LOcw3Lk3*T!>BbW#~g!;+o4T84LCMEt|~*H=AZ5 zLsO<|AOeIqq!Bh416CA8j)ieSXJcAS)MW|CsthYp611%8deB7JM#cQ3T#{!A**6pU=yOG!vx_9F-S&z z?I94pyak`iwTNvtiJ1YYYO0SpIi*EmUwo2ml3dqs9PAhaSX=K{CBLJIg%Au|X*RJ1 z#W!YX9*9I)=LF2kF)7aKvWQqHaxqp@6EUd9IUqtg*l&IA=81-Ru956C{6Y_f=2}fR z<6G)XVWDezfXG*p6oV>qpatR0MDNOax|&|s(!D|G;MP33U9UhiNJRzWpYtE-~M$})m1R#hz_bFu(q zdVu&pp~WjAP+}lZ*e{6IY?|?N)8au7mr#VbBF1M!3t8p>cD$*I+0cPxc*2gGVs!sz zg|=NZ5cGRAI$&zGNhFjx+Oz1oXYrM!QmaZqP|^A;hT+g((6#@I?wrj7>Hk;8%DANj z+F?7E){p!uR_&L^q3Z^jREDZU15Kt);Lkl(-|(*gv>~Csrq!oFy`UwdRlS+6eO14@ zskkD5RVx{}$r;%f%Dx{m9s3b?)!#a|k8p=>Q=@l|bc40joH^8q YTNj^v?&$W5{@X^jePd>#?WU3c06TWB5&!@I literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/drive/cells/1k_item_cell.png b/datapacks/ReApplied/assets/ae2/textures/block/drive/cells/1k_item_cell.png new file mode 100644 index 0000000000000000000000000000000000000000..c41becad09cd31fca43cf55c110f65c85375bce7 GIT binary patch literal 3060 zcmcgu&2QsG6nCMlmM)c$*h7Vou)G%#Og#RGzesk~HvN)Fw{#}$3lbdAB5~mWg6BAKQxW>X$3{x*nY?*#-tYb1 zZ|1d)^_AI~$7du-nq6CMY{K)={Cn{N{66{19|Rs#>E_CUboa|AeuTkvd%ig@Ngup< z={NEaj316yZ>5rS>9PDfCB5_R9K2XzYb)DoKJQV{tq>-BUg>vZu$H9SwSG+K4$owt zx5KEe-23!%MGjeAxmj)EX1vI^!_|X?-#A!r(Ssf8GUeLU*_m430}oxE5xL*(M5))W zD+9+Kyyw%ZA`eWmow_ogN0hgk8}gz^xLmDRh-#)T+ipd(u&bNT$~x9;72B$2Agp=V z@(foVeiR5N%e90B-ezNY7!F2tWjo7aPgQ%pUZrPLMAB9@*L78_tGbTB0;T&=M*1j9 zuM|#(ZW=tLNf>9Lh~(TY@x^XdS766QD&4sB9i>CO06Dc!VpXf)Jhg!#qorNEn{);{ zU{vKD-sMr2f~{8C0$R;xX+F_yw_94L+0q{DXqezc>$J5Wb9IxaVmG0DX%8Y^8Eq`h zHu(`gXIKvA<>Gi-WFp-be*;4KcL_!8Ehd~~B54WH8C82@faLjCp!omRBnpx0X;oJ^A4&jG_O8q%5XZI0O8p-Te$6Qb8vbB zFAB3%1X+(He7+5EpT;`%3~8if@8l#5qZ;S|cTrWxCJKC$LHQ^_-1nK|YOX=5!3c!E zCZT&K_NsWq*ME>iv4n1usLes2K`j20v>c0Z7HBqN0VHD<^kx{5s%v5DSQywpIjsq8 zc;C{ZBHH8080}(`5IA^vlGc?V5nY+YaVMlC=cu|Dv7wHa4IyVj9&7)zK*@L#j&Wo> zV!0jpe~Nu7JI|(4MSYI5^L~`ErsfCjxSrJ1$7apq0Zm9uge&NmN) zxRmDeiD(gD{A)2j;#jSup*Pa@c{p`)5l+XXY9PW3q&+rOityFR$BU^G3$)Wl+%+h& z43i@VqzN(Kq1bjU$`~t((FxDtHdg|s1sbB*H<0a`1o;pFIi?j52Tmfw@riEFgZKnT z#nd-4?L z_~6&+-(UT3?ZR^(y-(Q#+S`}EKb)KXKg}B)61V79!iq?Q(#%&_VU}jw6?U~xV!M;oj(B|m86;g literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/drive/cells/256k_fluid_cell.png b/datapacks/ReApplied/assets/ae2/textures/block/drive/cells/256k_fluid_cell.png new file mode 100644 index 0000000000000000000000000000000000000000..11d152793dd7383b018122d4f718558e3b03e5de GIT binary patch literal 540 zcmV+%0^|LOP)4Tx04UFukMBfkoZ@sz>l%`-pL{CK@L zl5CZ&qQu6p1%ClsWvvvElAW?9HcZcXM$M#V;oj~!pZmS{obEXn%9Ny*GAnu@mChQW z(V%xWJm+;j6Jh771 zZQd5H*AnWY@TqX8ArBP3we?7zUu=%&`O9WQ2@OeYwZh(b5l4zxOBg9(sT^M_xvc%Z z$F9U3P0vh=Z;{oENr+K`co}DyAp-O=AT~f3e!68xiTIwM_$e|HtBKWF#bAjz39@vG zx-8kF;$xymWhPm*`~SDEW~|Sj&+ZOF<&$N-wSjXBa+{X*d1zU=BPf4_i*zAAa{&GC zqHh*7-#&QO;q0=YMRwqP0~#N6)lh$=a#>}u7`&c9O&IE~p?W^wv)^-$??G9UueyTW zJ!qHvo`r9?*k}uo&)K*D000SaNLh0L01FcU01FcV0GgZ_0000-Nkl4Tx04UFukvT{MK^TR<#1ru-3@Bo;g<2U96|vMPh@cRnLZTM#ZcG%io3I

V?+SY`3Q(U4qpO$cbhLuSs&3oi%{tmboy zcZ5UclAaVk74CNAg2MMoHwyfsIPG&#Wrm#T*obgQSWB0%QNreuV+r>QcO)%a@`LdL zCl#+LwlXW`&pp)(>lf{rDW%J7XN++siK1b!!ZI21gk`lwaf!)(q>R7K_eaHLh-(>B z9HV5h(0xDZ4}N#+ruupdN%aw^dh)!tPN>;}uT9VUJoLP;BdBCzc=$l2Y zV;`E<;q0=g8QXBa0j&=?-O+uiLS`_Pg4YxIrUW!!L)~1Vx1W8E?_gTGnz(}9J?KhH z_I#Ol*OvD7=NZ30BHtMea)Zim5Y_+y010qNS#tmY3ljhU3ljkVnw%H_002ixL_t(I zPh+4IFnag|{fDwi20ON_V`Ks`loaK_7zE06mx3`2;FALZumSJhy$53ua1`MHV;I0E l2LhvB81(`OjCz5A0RSHcbZ$Gh51ar1002ovPDHLkV1f>m=0*Sj literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/drive/cells/4k_fluid_cell.png b/datapacks/ReApplied/assets/ae2/textures/block/drive/cells/4k_fluid_cell.png new file mode 100644 index 0000000000000000000000000000000000000000..028dfdfb36baf6e4e66191761b7c32fac05f738a GIT binary patch literal 3756 zcmcgv4Q$lr88)nA{FJq$h-PSQjU#0+@SXq8XIpon;VvYnarA&pBupCpY=6FUxwAdn zNiNw|25YOORMq(Fs*MpE(6(-EP^nN`Hri3OLt9m%NoAwb2JNb?S~Z1ED_Sec*z5ao zE;Jyrt~GkmU=HQw=3x416&&!A)W_-g; zrE-~6ip;sTVHPn#EFIgsb8LBf-NKVA-|A@Q7q{Zuua&_tfIYes`c>OuXIO`qs$MtWAH*#WoD@yM5hKxpmw*^Y0(Oa_Z&F4{TxY zx#x|aF1Y(X`S)-B{m6m#zBj)4sl|8r zr*m5mxjp!)reE&AGu!me=wpMe=bk?2J$$~cXZPV_+y9g-eE;J9`|W4X6y|+z?Dc1% z8*`k_9*-dA-4a|gh#%~0B8VIBGrPL|?(7;xvr7@A+bWKfOAdGwL}F#xLE0AVlPb=e zR+2jZix();)RWZ4SeD5;DO@l+2VJ~jaBY`1xJ8q7YGv#Exrwp@2qo+zvRo=!o>ERy z6<`Ja56n@Dtho4Fl2ms#N2Y8Sld(uF!cefCBonS~DC^U!Yun*lk}CMVqeP?q{r!=C zK4QE1C@afyl;NTrM}r6L4Ol)Z)0Wp<1*yTLv8TDFqOJHk1>3j1g6)J`EU#8Es9iK%hD}Vk$v2IO=qLFHE0bKI zXj3DXk#nVEHhXQ?QYnnU^V|C%<5~eHg-{3fx&|B^U5`Dx*VS-)AEe$~&l;D_t0WMt z)Z)@L#jxEHg8P^yl*duW%2Q-m5hZ08Z8vM{I7#u1cF=^HBqS+sea9*?)1DGpSrln5 z!ct^VA|(?5uEAE`FC-~eY_x7P^-0DcgJN&c>#tZQ#KP5_yC)WsRGb5zRiS%6YKJB$ zDHkIjr{Mw!hGS?(qFJenV-;RjV$yPkQy72X^Hj}O&Hr>`tU76?s z;sgn58>dAa7if_YI9k<>7%jzOB4D zvjR^`4A0Y?7?*jZ;TR)BbHE$+-{qPh7^v77Re+-dj>;IAR~eD!RndUD3M{R1NT!j> z>5OO?63+`18IViKnPpt;PMeUJ2TiTEe`2L)s+9`WHh^wH^Vqr+fEY{^q8?NmBs3UDtb8icvkK)KOf?}Xnypn4yRxnVheTjWoW?S*(IPKkT4H6M)>TPkpsJd#>xpQf zJpd8NTm4hH*HvLfMw4{bU}=p}c{(l&h*seav?PcIlAweLGuMQjPQ9l9s+t;0k(iLU zkZvEXVWP@_G4Wqu_{@9$1hV82**=Yv+83@fas%*etZ!m@Ysnr2#fj}iGt)en|J-n&XyS}4R zEx2bJem`(iI?uWPUmGh^oKn{g$F=odE$Cv^eq|hnVZs13P@P3c7-E@V zoT~bUr~YcQM`KT`Pk}~3OGK-BGgP1mD6}3v7X0xbWie zty7ye!%Ig;Cf(L0-K8B^$c(=C^oKX$-8a4%zb&uNWLK2-oM^h?k3YNrMANKyf3uA^ z^X-$*41b56J^Rs1H)u`2`r>D19{gICshp GZ~qUO^27rG literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/drive/cells/4k_item_cell.png b/datapacks/ReApplied/assets/ae2/textures/block/drive/cells/4k_item_cell.png new file mode 100644 index 0000000000000000000000000000000000000000..6a8a9a95e9f08a028df52288f0160ca522497cf2 GIT binary patch literal 3060 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 C5yNl* literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/drive/cells/64k_item_cell.png b/datapacks/ReApplied/assets/ae2/textures/block/drive/cells/64k_item_cell.png new file mode 100644 index 0000000000000000000000000000000000000000..e1dd18a63f9378b92788c3871d16e45371c57d8c GIT binary patch literal 3060 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 literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/drive/drive_bottom.png b/datapacks/ReApplied/assets/ae2/textures/block/drive/drive_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..435a2f855be96abc927d9617d7a630ca16b64555 GIT binary patch literal 423 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF zJS7hG6lfTnV>CrbP0l+XkKa|m7O literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/drive/drive_cell_states.png b/datapacks/ReApplied/assets/ae2/textures/block/drive/drive_cell_states.png new file mode 100644 index 0000000000000000000000000000000000000000..612e9718fe2cfaa7190aa83512e337e386ad75ee GIT binary patch literal 2925 zcmcguUx*t;7~fJo>(#2@OVNVM*3*hkcJ^PAU6PjE<=Q)G&f_knR}kv#%xrGGWM|#o zyX5Yv*jf}H3I!3wSKmrS@JSIt5g*i|Ao@^HeC(6Yf^dGDP4-eqdsqK7kZfl5o8NqY ze&28A?Zt&thbEt#lqBiU{9Jtro{y*B1N-6k7I5jZ(iE^^pk5hZ+`pKv(HSa=#{U2d2M?eUVi!8)HQe&4H{!Q8{)+__ki4nC27_et-6a9ENi-}0L)$x7q2Lq(@Rm~eTa*9pN|k}4;9A)#wL zkzL;MgR1h!XJ06?&#KBWDijgbOkFP71+9o}-F#8ju~t%XN!1L5 zH3t_R!>9gM2VYLbMGs&>2GLf0sWsHJMQZL3&Ubsd2PiZ_FV z^iU8V%|He)bsp2m4-;Pmatcdav7S^F@Hh*l6Xw`KJjfShPVJFU)e1Nbt#8O^ZWpdc z?Y;+$s=UoRJV;`&)pA?NR-=)dkA>}Ya_cym-2jgU0gknfo0}n5mv}7JBg$ttV8^3F z$Kqs(@8o9>%fUQf9IlE)#H->CNyuO4sR*5!h?7J_O(ELDYA+5^$s_v9lhij_%>s~d~b7C zQ$`(6L>&SN_B*7-)i7xFcWX49`5;b6K>2*Vs(`Bn-)D~H;*y4~A}aDSMJ6>VDr-R0 zvSBe&=G?%<8?LVlx}Fw4U7z&>6BID=tU0EqaaN*5WKnD)t7H;Htg?;_cu``e#>zGy zqP-mX(37M+ikf=G0MW%BH(XpqhFkO?eWr$7o!E%DI>SZJD;tKX$UFPah_;9tfDM!_ffDLp!ZwNUN@<{vdC6$av z{s>1#cg)?9|EIloW#`^hY8*T7M;R+>deDyQNkttmJp)CmXSqI^Rg0KrTN}OG}~YNYcby8SS6>SGt~APoI0rp$0JhJ7vX8r8kx#P`1rlVkfp!vj{s#; zqu>>FcdxQlBNwPXVm1r6GZ;Z#hgZXNlwU7-0GbuS@H* zJZ+B9HVE_OC literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/drive/drive_front.png b/datapacks/ReApplied/assets/ae2/textures/block/drive/drive_front.png new file mode 100644 index 0000000000000000000000000000000000000000..3ba473213e9c0b4360aa95cacec2466bd063d92c GIT binary patch literal 457 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF%FBlnt_9gOM35&IDu|GBPpn z0qH0p&TMA^i)R4YAmAy<$nXN_ZWvvVn3-3imzP?iV5(=x0F;=(&cFgxXJBM(z_WitTM>b0?2~uGBhv%$%c13>ou7s>j0VMo-U3d5|>qb4)Pvy z5MYjFQrX3nm-w?enDNCA^{xlJOyv!e_$F<-+1#I+X~LYtn3E*+sY0>ZUXAA7 zyu5->Ta?*neA(kwJ%?HJvqj4FNs_8-9Ck+48lCqL%*i(JT<;M0Z}I%l=C=MX`#j6f fyf*UvysL(B#~Jz7SnEI)kaIj;{an^LB{Ts5tJ`r> literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/drive/drive_front_flat.png b/datapacks/ReApplied/assets/ae2/textures/block/drive/drive_front_flat.png new file mode 100644 index 0000000000000000000000000000000000000000..3ba473213e9c0b4360aa95cacec2466bd063d92c GIT binary patch literal 457 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF%FBlnt_9gOM35&IDu|GBPpn z0qH0p&TMA^i)R4YAmAy<$nXN_ZWvvVn3-3imzP?iV5(=x0F;=(&cFgxXJBM(z_WitTM>b0?2~uGBhv%$%c13>ou7s>j0VMo-U3d5|>qb4)Pvy z5MYjFQrX3nm-w?enDNCA^{xlJOyv!e_$F<-+1#I+X~LYtn3E*+sY0>ZUXAA7 zyu5->Ta?*neA(kwJ%?HJvqj4FNs_8-9Ck+48lCqL%*i(JT<;M0Z}I%l=C=MX`#j6f fyf*UvysL(B#~Jz7SnEI)kaIj;{an^LB{Ts5tJ`r> literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/drive/drive_inside.png b/datapacks/ReApplied/assets/ae2/textures/block/drive/drive_inside.png new file mode 100644 index 0000000000000000000000000000000000000000..f4cbceaacb5781001293da38ca14e1efbbb8d58b GIT binary patch literal 447 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF>y(ZIS9UwE;)5S4F;b_O!HioyZpYwGyc%C Vs;a-2e%1mx!qe5yWt~$(699^)ZQcL? literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/drive/drive_side.png b/datapacks/ReApplied/assets/ae2/textures/block/drive/drive_side.png new file mode 100644 index 0000000000000000000000000000000000000000..1dc0d91dd339ff480c962c168ef8eded71056a71 GIT binary patch literal 460 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFN95(FH8)kvn%1{|^Q zL70(Y)*K0-;Fi<~&ooa@Ed~xChm}E!k(GfF$npYWX($_HxdtOMSeyySHe_UC-~-Z8 zK%Cjm0v68zvO&O8l9AyB(9tluATcwqL@zJ3M8Qe8my85}Sb4q9e0QePoHUIzs literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/drive/drive_top.png b/datapacks/ReApplied/assets/ae2/textures/block/drive/drive_top.png new file mode 100644 index 0000000000000000000000000000000000000000..e1548679fa812070c986655f92edc52bfcbf6d12 GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF7PJ2av(-@B-*u7+sKb$b#xJG%x_khIc#bHJK*s0GWlJE{-7*msNWY@*Yv(VVPdQdZhh_ zuoI(W-UAU!R)vTEqIbIfjJQ@&#>>$#_wnkhtFj!ko?U*&eX^}1`rx+@a%l&T*L2)x zKk0B{^63PbpW8b;mQ9|s>Bpb0>}^%6L5h);ff2~^ z0%B<>8{{GlMrN=$6Oe7l$i%=0q@#d1vz-Mjo&jWofTtuQ!waBKV01xZW?qS2UTTSg zsh%MNP+|f*0}D`{fswHR;{u48Ap2MsK+Ks0WP<<`&{QU{${8N)Slm5D^hc4M<5yD+n|zN;F7F;PXsP z;3y7FND$+CKPT|jiUS8!&TOsz&g81#Jmv3|SxnCC0*|ZoI}R$HDXrr7=yKJ_tGpUK xA*tgV!-7V?We2q!m>-52Xh=Kjv|2PzWMo(vF2TK*OQ0L%9#2<4mvv4FO#m1(a#R2S literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/energy_cell.png b/datapacks/ReApplied/assets/ae2/textures/block/energy_cell.png new file mode 100644 index 0000000000000000000000000000000000000000..3178a5862e2be5d4a511f75c56e2620c4707cb1c GIT binary patch literal 481 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFKPOgomQ~m#*`zk4?p@DS+mJMWs;+N$)0WN z=Fgto(o~+AnY7U8q8(5#XMsm#F#`j)FbFd;%$g$s6x@;;;hE;?sl~tnIesvJDxT82Es66cA^&vw+1jfNT)(lw@Rh0rU)vE=bJGE78kK zEm1JlGh_ftOkihV0je`FGB#jb05KC}AL{~$Ig@~F5MTnD$^=#!WN86pL3J4#7=UEM zyPfr#Op|qh%qmY8#}J9j$q6B5Y)s0GY>C$=TnM->;LIkv^;2KpClz(Jt7k$lH)wP? zZq53>?&|L8%@VVFdbc|EY&)C&F7hmc(Jk@$Khvi&rrr6^owQ<0Ze98Dsy1P#ja)9f zg`2&et@^Sl^zs~u7R4|LBaWFYyW3`1X&V`EH8m_?VDS5Gc#`et$#9U1JYD@<);T3K F0RVHDdkO#m literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/energy_cell_0.png b/datapacks/ReApplied/assets/ae2/textures/block/energy_cell_0.png new file mode 100644 index 0000000000000000000000000000000000000000..b74c0d80ecb23078a63082789c2d377134d9b93f GIT binary patch literal 476 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFKPOgomQ~m#*`zk4?p@DS+mJMWs;+NNf*EA zVtMN#Cc}ce9+!a{ISV`@iy0WWg+Z8+Vb&Z8px~C&2+uT6Pb~%xAcvJfijkFp5yAWI7%3#!Y|zyKs0-tDZ{ zWSXo4WL9{(IEF}EPEH6hV`EZgWJ|n0;X=T50cSSRt)Ke(KB=g)T|EKPOgomQ~m#*`zk4?p@DS+mJMWs;+N$yyi1 z{qaiw@2CC$nRdp(-V~^pv%n*=n1O*?7=#%aX3dcR3T{b_@J#dc)MDTOa#$Ip7+Dz@ zfh;c|mWHxHj?!Rc28%NR*@lcv417R33Wzh?S-|2MKsE??N-{FM0D1;S7bIrpmFVTA zmMEC&88QGRCa^QG0M!{785=MzfS3ugk97gWoJl}72rvOnWdf@Vva|rQpt=kV3_!Bs z-OhSVrpY=$W|^mpV~E7%j|61i{_}7CS0442B+-sCb+)Nz zLSLq?US?^?;k?EmMZk!&jMuOjTg>vm#vs>ty85}Sb4q9e040rf A&;S4c literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/energy_cell_2.png b/datapacks/ReApplied/assets/ae2/textures/block/energy_cell_2.png new file mode 100644 index 0000000000000000000000000000000000000000..4f09be3c310a8da6049ac3e1fc9404b91fba1ac9 GIT binary patch literal 494 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}Z0G|+71qEq!b#+~R6AK$hSI?l3=(K_bH>MnUefZJO$eK<5DU%%COPC{M zxzpq$-&)50w}`lG8FqhHw^mL>4nJa0`PlBg3pY5ps7q?l|hyk zKo(S&p@9KNHoV(eugNr72gt1Rba4#P2#)RN<~yRm;UX#^^85DQ|B2R@ZkSpts_fA? zvt&wVeBiM&L0nq13j9=-q=^~@^K^EZeP8CU&phM%J=NS%G}B0G|+71qEq!b#+~R6AK$hSI?l3=(K_bH>MnUefZJO$eK<5DU%%COC+PS z}twUwM08QX5@Q5sCVBi)8VMc~ob0mO*TT&xD(>y)37&w3& zRt70XRt82O%L|C5p=^*_H5i$};!HrcAtMt5ACQg$;>>myuy_WL4FaB$j0`V;UV_mD ziJ5sNdU>fO3Z{C73_ytq>vp>5|9l7Oh8kaz$$|*Er2Yj zE<*zYkZgFjvtE;FvJQ}0>*?Ycq7fY1-^HtYGXXS{MuVw!LKgzAs1zHGU__f7ozjlp!*am$k_ zjL$zZ_UT`rBi?)O)0=wD_34jU+f~iA6VEVS$hy0^B4VB7ggr*@v^303&#=Bw=G<@y OKPOgomQ~m#*`zk4?p@DS+mJMWs;+N$maSV~ToSYD1#>S+~$d-70!i9kA0?urrTR-*neNs_pyLu+{a)U;P#pve-YhY@r+2Gk&$hGa?<3AK7~K-zZ=F7sF>OyJd(w)AC2P_x6h&4$Y_T?6k+RN9 yKic$cr=vttt77v6&kflfD>o}KFIM2-0LGqEui^AL7j!@Y!rBVNyFFx6mBC=0CST3Y7z zfh{gN{{M!_4tL^N+#O%@F|Rgq@|5u6nyY@?ZpqEX+TYGT{2Fsy?#Rc#JI{4l%zL+T z*WdRcI`>uDVwCkZTe00pJ}shPw03r>?wTy6=MxlJS4So{u$@05>hbP0l+XkKBn)U1 literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/flawless_budding_quartz.png b/datapacks/ReApplied/assets/ae2/textures/block/flawless_budding_quartz.png new file mode 100644 index 0000000000000000000000000000000000000000..621ef8db7a3af1e04d182ee0cd33ef683f35ebb7 GIT binary patch literal 278 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFp@4pCIbQ13+pd)Ylvr9ovX_^x>bSQV6H~B6jQd) zL$+5NYx%9qp3Js>oUsil6!#%#{J6AyJyZ|Rz*6C4k0Dq`=2kEaOwQ} zgr4kaZ)aN`vN&mz;pA?V+bU!6q?CJmhlbY8IgQ`rUjGteEIoOGU1mk5=*KVYck-oY UB?)NV1-gg9)78&qol`;+06+|C{Qv*} literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/fluix_block.png b/datapacks/ReApplied/assets/ae2/textures/block/fluix_block.png new file mode 100644 index 0000000000000000000000000000000000000000..2579c18e0d6fafd24aeb742dde5bbcd1c3350e23 GIT binary patch literal 3706 zcmcgvYm5^`94`T5cwFKm7$StM#TY=QJ3IScTJY|A9G6hI995144YRwmy$x-5+1=~a3Yj8~6tD-Qj1#1*u~vR)EYsZgD&sFKja`uacp*XR=Ja;sZLB%5JXv)Y``)&SWLG znoIxu&iiT3wR7oRase0oK{nxTJrJ;+2eucj1N$u9PH*1Sw8jB-7x!1W{7t8y`0YI>7VE)5zdrd0ek?`qie7kG}ZQ=bTw5>MIpA5o4 zjKiySVMwVB!VI8hOFI-iGgtfEkJ(Nx?}FFDL=mNPX7}uwMumyXO}3Gy##T3k zz?*K9n{{I++uuQI63Z^v$X0_|iFH;SwhX+TklikO-$m=V&c>l-18vO^rEBbi_cIi_SIUAHJ=rfF-spo>&?T2A=85yX(NA>&q} z&BKUfi8Vp1B?j#ZYUjUVmPTY-utbIkhUB!FM3BZXq$$N#(j z#cY0tSzdLD1s#Fs(||%JWsPC6utC5)eRMl=awstOak;ipZu3nsJv%u|$ zl1_Md@`<;%#CzH3@J6@V(rf%e z%Qv8l%+Xgw%uJPNHe|IVBPvKDGA)fEtU|+r#5XmwQR!lC-aqauGclKKho#YKQ~l6D zJ;Y8ZreqE>KOC zWmQs`NThkN)vzTx0x^+8h=l|-uAKs5AVstkEK8cGo7ZJ~Bgc>~j1p33JY@N~11VY6 zaVcnQdqRa92aF&wTi2a<)V?yYDm0z|E<|Vc2H(PE>fw=me{sdR)t;9+u<*-t~;{v ol{YRN{bK1a&xh|l`pxFa)ICpqbnft~_*yqIv^{@nVDF*709pKgrvLx| literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_a.png b/datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_a.png new file mode 100644 index 0000000000000000000000000000000000000000..bd4dd2d5029fe9ea5a410eb7df065c635bcdcd7d GIT binary patch literal 385 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|>0G|-oo*B#LZ#q=d*bNkD|9Zj|q^=~$FZloe{|pXVE588woCO|{#S9GG z!XV7ZFl&wkP;g6XglC$krxpVTki*I##mLIQ2xNHyu{4woa*+ljGgzDn$TnnTV&DVP zQ9zv8&H@(C0J1^AQ<9P41<>Izx*#z#uS72|wM4;G&yWEqF@c?d1*p!z$k>2!0mMv@ zeXI*0=1c;zL4XNpDic^`kfjBX1=VF}U;vU0?{?N}GELS2GW9%N978mMlM~#Sk8mk) zHqY!yP-AIenW5mraUhXRXh8_W5l1nGX#Yi$XMliVvMbYf&q%eoAX7YD{an^LB{Ts5 D(NIVW literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_b.png b/datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_b.png new file mode 100644 index 0000000000000000000000000000000000000000..4c428bc6c22e22cef7a360014674c74964d350c5 GIT binary patch literal 384 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|>0G|-oo*B#LZ#q=d*bNkD|9Zj|q^=~$FZloe{|pXVE588woCO|{#S9GG z!XV7ZFl&wkP;g6XglC$krxpVTki*I##mLIQ2xNHyu{4woa*+ljGgzDn$TnnTV&DVP zQ9zv8&H@(C0J1^AQ<9P41<>Izx*#z#uS72|wM4;G&yWEqF@c?d1*p!z$k>2!0mMv@ zeXI*0=1c;zL4XNpDic^`kfjBX1=VF}U;vU0?{?N}GELS2GIc#&978mMlM~#Sk8mGQ zUBKhU!O9}QsAj;)W^uNG`4o$SPYc79tVw4W7}L@iCVMh{7ruHK6r>EEu6{1-oD!M< DL=Q#% literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_c.png b/datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_c.png new file mode 100644 index 0000000000000000000000000000000000000000..77c78a16a12c156644dbecd4b708a7bf4115e6d7 GIT binary patch literal 375 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|>0G|-oo*B#LZ#q=d*bNkD|9Zj|q^=~$FZloe{|pXVE588woCO|{#S9GG z!XV7ZFl&wkP;g6XglC$krxpVTki*I##mLIQ2xNHyu{4woa*+ljGgzDn$TnnTV&DVP zQ9zv8&H@(C0J1^AQ<9P41<>Izx*#z#uS72|wM4;G&yWEqF@c?d1*p!z$k>2!0mMv@ zeXI*0=1c;zL4XNpDic^`kfjBX1=VF}U;vU0?{?N}GELS2GF3cX978mMlM~#SpKvQ2 uQPgoW;ABf+R5K7}Dwx^Gz^ruO3=hMUgG|5EOC>=LX7F_Nb6Mw<&;$V06+(^x literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_d.png b/datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_d.png new file mode 100644 index 0000000000000000000000000000000000000000..168673699416d0d8766fad4f14e6c47e83768025 GIT binary patch literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}c0G|-oo*Bz(8oPl!K_xRyAjMn~2!0mMv@eXI*0 z=1c;zL4XNpDic^`kfjBX1=VF}U;vU0?{?N}GELS2GG#nn978mMlM|enot+rYxCte& hOkOgRku8JC$A>{ck@4SD6Q5d;9#2<4mvv4FO#sn0I;;Qy literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame0001.png b/datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame0001.png new file mode 100644 index 0000000000000000000000000000000000000000..e25f85e6b88ce36f58e9772681dd27c2db0d3059 GIT binary patch literal 384 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|^0G|-o`I`>)%vctcoD~ornUhxr6y`sAMHxu3l?3?({|5nv&HI<^2a0eO zctjR6FmMZlFeAgPITAp@EvXTnX`Y^13>-iXD}xjxD+42tlFz(FjgX zNJvOw5mJykl$4Z|mX?&1$aqmfj9FVs;uzDKH4NqnEED>UMJa$Zd%F6$taD0e0sv%P BN5B98 literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame0010.png b/datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame0010.png new file mode 100644 index 0000000000000000000000000000000000000000..61acda8828ad67f0ccb3f7edf2cd38e3198b76d0 GIT binary patch literal 384 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85p>QL70(Y)*K0-;Fi<~&ooa@Ed~xChm}E!k(GfF$npYWX($_H zlLjL*SeyySHe_UC-~-Z8K%Cjm0v68zvO&O8l9AyBGlDKi%*-p%%S$a$Fx4|;07^_? zXJ7%UGcYnXU|aw(6J#Ij0*E=2fNT(80-DMMRvBbz0c1gS85$UXWW&3i^_onRb%4xJ zPZ!4!3;*O41z{J}^uOg_`x6qHKAmJsk^b=ZbhUx+HpUp6ri7{odl;DV=i5p;h;tNv zHsJ6+IU)bR?)C8pz8qjv;+T-jaFmmih0RQA<)kUCOH(8m_znvhiIun?23h9m>gTe~ HDWM4ff;UW_ literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame0011.png b/datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame0011.png new file mode 100644 index 0000000000000000000000000000000000000000..9ee5ca775550a4b44c6173e2e7d757c42facca6e GIT binary patch literal 407 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|^0G|-o`I`>)%vctcoD~ornUhxr6y`sAMHxu3l?3?({|5nv&HI<^2a0eO zctjR6FmMZlFeAgPITAp@EvXTnX`Y^13>-iXD}xjxD+42taG|NXa<*G~;V2-vn{KN35S7zhnvXF+SSx aRl$to0*hvY)oM`SGI+ZBxvXNS%G|^0G|-osN}4G@W`CJviX}1^~_iX6jq;Ub`40el?3?({|5nv&HI<^2a0eO zctjR6FmMZlFeAgPITAp@EvXTnX`Y^13>-iXD}xjxD+42tlFz(FjgX zaAiIm-O$)LabhE<4QL70(Y)*K0-;Fi<~&ooa@Ed~xChm}E!k(GfF$npYWX($_H zlLjL*SeyySHe_UC-~-Z8K%Cjm0v68zvO&O8l9AyBGlDKi%*-p%%S$a$Fx4|;07^_? zXJ7%UGcYnXU|aw(6J#Ij0*E=2fNT(80-DMMRvBbz0c1gS85$UXWW&3i^_onRb%4xd zPZ!4!3;*Of`(IwDXH%&7{f4t6NnqL}#>+1lRQM-3haZ=iI)~Nl!R_ha6Bza691V1j zoMm2izxFTFvcyjY48i7HZU;3Q7}m_>oH8+CCI`y}VNS%G|^0G|-osN}5qn+^qpNA}EEmXlWo6lVKSY6qf9g8YL2g8;+k{Y&-(MK}vQ zB8wRqxP?KOkzv*x383JX)CkWsPfsld4j_k>L5h);ff2~^0%B<>8{{$#MrN=$6Oe7l z$i%=0q@#d1vz-Mjo&jWofTtuQ!waAXV01xZW?qS2UTTSgsh%MNP+|f*0}D`{fswHR z;{u48Ap2MsK+Ks0WP<<`&{QU{${bP0l+XkKxR_PH literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame0111.png b/datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame0111.png new file mode 100644 index 0000000000000000000000000000000000000000..51e5527f550ef43b7db23a58c6e9960f7a7f31ae GIT binary patch literal 419 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|^0G|-o`I`>)%vctcoD~ornUhxr6y`sAMHxu3l?3?({|5nv&HI<^2a0eO zctjR6FmMZlFeAgPITAp@EvXTnX`Y^13>-iXD}xjxD+42tPhgU4;T{!jcPi3M^nS2#zY%F27`(6snmJbC4^_o&6irN5d^mWfHH& m8co!*U-s@&emkFC!hn(K74y;6jNyeK^F3YtT-G@yGywp_VOHe; literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame1000.png b/datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame1000.png new file mode 100644 index 0000000000000000000000000000000000000000..e6c750430d9bc63838c7f4be7e3edd8bd191c4e9 GIT binary patch literal 392 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|^0G|-o`I`@_SQZc-nUhxr6gJ=SAPz{el?3?({|5nv&HI<^2a0eO zctjR6FmMZlFeAgPITAp@EvXTnX`Y^13>-iXD}xjxD+42tlFz(FjgX zNJw#INS%G|^0G|-o`I`>)%vctcoD~ornUhxr6y`sAMHxu3l?3?({|5nv&HI<^2a0eO zctjR6FmMZlFeAgPITAp@EvXTnX`Y^13>-iXD}xjxD+42tlFz(FmT~ zdy$JlfrEMb%K!gQtNs*nb^ZRJPmzb=rvEd8Q$9uE=S?moCFw5M#PnfP(&s{5xitH( b&p9s4Y#Uf~IM(<*1{vz<>gTe~DWM4f8$VZc literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame1010.png b/datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame1010.png new file mode 100644 index 0000000000000000000000000000000000000000..6e97a616d133e47b3b79f4e86b6f131e95c0a145 GIT binary patch literal 408 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|^0G|-o`I`@_SQZc-nUhxr6gJ=SAPz{el?3?({|5nv&HI<^2a0eO zctjR6FmMZlFeAgPITAp@EvXTnX`Y^13>-iXD}xjxD+42tlFz(Fm^X zJIKYLz~i)a?f?HzkKIr-`J}=h$oS5iWm==eeJ<9i8~C355Sy+h@?`Phu$r)b&K07} b|K*P`YQ(b$ip{YD`HI2Q)z4*}Q$iB}P0UqC literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame1011.png b/datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame1011.png new file mode 100644 index 0000000000000000000000000000000000000000..5b319918e9522b56ffb65db551714d60f0bcd207 GIT binary patch literal 420 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|^0G|-o`I`>)%vctcoD~ornUhxr6y`sAMHxu3l?3?({|5nv&HI<^2a0eO zctjR6FmMZlFeAgPITAp@EvXTnX`Y^13>-iXD}xjxD+42tdGs0)gQc_kiLMs;P*<#q~Dsa-qucZ nw5gjiMQV1p>Vhdu|7<(>ZU{0T4Zg%^3$nn|)z4*}Q$iB}ze`%3 literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame1100.png b/datapacks/ReApplied/assets/ae2/textures/block/glass/quartz_glass_frame1100.png new file mode 100644 index 0000000000000000000000000000000000000000..302687ea50a1eeb327c4d135ba6b63ee6a549959 GIT binary patch literal 407 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|^0G|-o`I`@_SQZc-nUhxr6gJ=SAPz{el?3?({|5nv&HI<^2a0eO zctjR6FmMZlFeAgPITAp@EvXTnX`Y^13>-iXD}xjxD+42t&V5Rz`>G!_22)eDtlTSFUFKfim~?cuHjrCR&p^<;A+?5M_O|C>Ns|4FX?e%INS%G|^0G|-o`I`>)%vctcoD~ornUhxr6y`sAMHxu3l?3?({|5nv&HI<^2a0eO zctjR6FmMZlFeAgPITAp@EvXTnX`Y^13>-iXD}xjxD+42tNS%G|^0G|-o`I`@_SQZc-nUhxr6gJ=SAPz{el?3?({|5nv&HI<^2a0eO zctjR6FmMZlFeAgPITAp@EvXTnX`Y^13>-iXD}xjxD+42tb))^E=o8eR)F8cZNS%G|^0G|-o`I`>)%vctcoD~ornUhxr6y`sAMHxu3l?3?({|5nv&HI<^2a0eO zctjR6FmMZlFeAgPITAp@EvXTnX`Y^13>-iXD}xjxD+42tV!`WOFnv#m^dm$RAki~cWo46?`5)z4*}Q$iB}-|1nU literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/growth_accelerator.png b/datapacks/ReApplied/assets/ae2/textures/block/growth_accelerator.png new file mode 100644 index 0000000000000000000000000000000000000000..7d18426fe233ba1e131e531603547225f0e77f7b GIT binary patch literal 464 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFps7q?l|hykKo(S&p@9KNHoV(eugNr72gt1Rba4!kxUAZDRFB64)2}PbQ*-y+kCkSHr;Tz!hn^ix5-{IfPIt{B&oxQ&A-QL4@?K<6l z2UT>}i1--in3VFVU6`d2s*xmc?-S!{gY>U1X@adr=alZh326Iy+`GuV#`5ve{To6p m)T1P1YrpKfBrX0oaU*k3tn7k{T^1ifuJUyCb6Mw<&;$S!VRY>P literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/growth_accelerator_on.png b/datapacks/ReApplied/assets/ae2/textures/block/growth_accelerator_on.png new file mode 100644 index 0000000000000000000000000000000000000000..49e3a3e26e250cb3ce06d16815b6743ff6c1ba3d GIT binary patch literal 697 zcmeAS@N?(olHy`uVBq!ia0vp^0ze$V!VDxIwZ5Nn{1`wE}!XT%SI@a`M=&=BA2S)B5uA)6BI}-A!vs0yfP|x)|d$eNW+w+jT$Q z^?doc;tgkIesvJDxT82Es66cA^&vw+1jfNT)(lw@Rh0rUopE=bJGE78kKEm1Jl zGh_ftOkihV0je`FGB#jb05KC}AL{~$Ig@~F5MTnD$^=#!WN86pL3J4#7=UEMyPfr# zOp|qh!4%=?;uxZF{_MrQeun}?4t&(!({R%!vSoT2o$XSN# znfclmGd=&)!}gP8^Z#=iBC8yBry-Jp0tS zmp6BAVlO;!gV!bL^$}D3Z>EzpW}RCb=|AzwRn^6L-ff39au4@7Y9e&O!wx)~lB{Y;+5oHs7Xw&i%#e?y+AaQeQJlPE|knqPr(8 zp;~!{rr|Sofvl5a|0-DI4u6YStZKXS*midDe|M9o$zLp1IbvM(sps30<&SP8r|`@& zOn+~*YofeQ;<8hf5{@fE?fKM$KTP@4Q0{hV^7|dOUmiGpIU&6N>ziHYOso1H|KPP{ zJ(qRKc*7q~qj$T!589{f(L0pEX6&r^jGLoWLht!};}0Q+Jt~4mdKI;Vst0I8ht`~Uy| literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/growth_accelerator_on.png.mcmeta b/datapacks/ReApplied/assets/ae2/textures/block/growth_accelerator_on.png.mcmeta new file mode 100644 index 0000000..7508133 --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/textures/block/growth_accelerator_on.png.mcmeta @@ -0,0 +1,6 @@ + { + "animation": { + "interpolate": true, + "frametime": 8 + } +} \ No newline at end of file diff --git a/datapacks/ReApplied/assets/ae2/textures/block/growth_accelerator_side.png b/datapacks/ReApplied/assets/ae2/textures/block/growth_accelerator_side.png new file mode 100644 index 0000000000000000000000000000000000000000..54ebf6848a52a266afe0c95bc95b4afe5f440619 GIT binary patch literal 470 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFvzI1|u_AoC(M_WMpFC z1JY4IoY~F-7S8~(LBLazk>Lf<-7vZ!F*C13FE6!3!Bo$X0Vpwnoq+|Y&cMjnfN=rD zOptx73n1o906)@w3N)&VkGJY5_^Brc1dJ1E#> zAkg|y-6Wxf$v|!o+hWlNHyZRjnK{eT5;7Z3PJ3Ha`8oF98GZ?d^ts*NukCN=<4t|$ z!{-~(x$NjdIn8u0_G4?8Tv^QJ=oKeYDD-Tvv+PV)k=#2j*X}Oljeb~iM}EG`{@Ko{ t@02$0)QWS7cg@{f%eU=%&*UU+-&C}J-Wt~$(697X{ctHRF literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/growth_accelerator_side_on.png b/datapacks/ReApplied/assets/ae2/textures/block/growth_accelerator_side_on.png new file mode 100644 index 0000000000000000000000000000000000000000..84f00571f67516b472bddf6b4121cf484875cac9 GIT binary patch literal 733 zcmeAS@N?(olHy`uVBq!ia0vp^0ze$V!VDxIwZ5Nn{1`wE}!XT%SI@a`M=&S=0KOn=111)6BI}-A!v^oTirqY?_&LaZllk+jT$Q z^?doc;!R(&J2y}lXMsm#F#`j)FbFd;%$g$s6x@;;;hE;?sl~tnIesvJDxT82Es66cA^&vw+1jfNT)(lw@Rh0rUopE=bJGE78kKEm1Jl zGh_ftOkihV0je`FGB#jb05KC}AL{~$Ig@~F5MTnD$^=#!WN86pL3J4#7=UEMyPfr# zOp|qh!Bpev;uxZF{_I8TphFH42R>enaZq7*$f+@5tdU_zuld5XFmy7*(nFtCg(L`D zryt09q0^AFCP!kkB}4Kd-UoVhoYTZ^-F)+B_WRlQ-zkYWbL1Y_IP;{6vHDGxuIC1d zKir%?I{62_lI7&AWKCYmwQ$w0$kod(R5>nId*^VX)a!&oBg;$yFGZKgwZ(?#BE@ZV#ozJFZe4b6hGm-p&-wX1jTfc#YRy_R_Uqcz zv&}Pm{+YGq#6R{&t;ucLK6UQFaL}H literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/growth_accelerator_side_on.png.mcmeta b/datapacks/ReApplied/assets/ae2/textures/block/growth_accelerator_side_on.png.mcmeta new file mode 100644 index 0000000..7508133 --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/textures/block/growth_accelerator_side_on.png.mcmeta @@ -0,0 +1,6 @@ + { + "animation": { + "interpolate": true, + "frametime": 8 + } +} \ No newline at end of file diff --git a/datapacks/ReApplied/assets/ae2/textures/block/large_quartz_bud.png b/datapacks/ReApplied/assets/ae2/textures/block/large_quartz_bud.png new file mode 100644 index 0000000000000000000000000000000000000000..93233bae6c039e72eba1250d42d6f36d6eeaab56 GIT binary patch literal 1112 zcmaJ=L1@!Z7|u59=H}+mn>cu6f)i|##-?pz<4l|Cie}EXvQ0cJP2SqDB`+kI?S_bW z5X6HQj|zGa1aY86VAH4keAK&-=|9k)cpBv~u z(B8VWl^}@rbf28Tw$tA&P59dr+?2(p!Oa{<5Yv@ypRu#9ASn_-+`7>ATMb};`@o@G z>f4WBFF*Y}fB&O(`PKCN_v5GUK7RM};*-VUleg_FuQTJ9Fz|3sYzHAdk z-&QL4e1qLL>=H!BV}CcyqU$7rtv!2ySKeHUKX%|2|X2*&2h^W$|6}6 z7Vy7+Op~Ar@y0|_@*{#FWdJ0R13{ExgBrsyAj(r*Bm(mqmk;j(EW@%i!_f>MWMTr# z2^~rC zZuhcCO-6>U<`}kTAPe}iY938^B8ih;zKvySYgl(i!NY2}gq%-tC97g`@*j4>>u6##bJ6pol!=7Lg6u-BcL#3>ub> zO76}oK~aRX<$9{6!L%%rSb{PPU5IgVG8&PSu~;G+3Z-NzEG48!N)9s&ALc{R6|Ri5 z2@_i03Rhp_%5}NbD)}Xg<8U|u89K%ZsPA`>3945YjQS}_b!BT@y?#oG`dqq}RGjw9 z{8!nRTdI1BdkTATdbOv0Z*?x9g@?hxU4Qo4LKmKxp|mXJda^g4OC2+yMLsgJ@5Y;@ zhh29fw-#@QmekzS!l}UAocp0uRPUP4y0*LsY~Nk9$TH^%9*hICvv212`@J{w-n*91 zP5TCh2Plg2WoM)USr5Cj&r7~z{-GjSJWgRcNo~A6{)HF^D+xJ4Q4iM-?I=COK9-*? zrN3|gYJC2A{n;n;*87Fak2cV`$o6cwMUTZ*~}F(|`|Zi@7`=PziWYa%@tk~!H* z!Kyy9YQy4cuB5Imsxgh8n)D6C>jF_QAXY%#STY@OYkr)#ShhbR_l_yREp5u9z3$a|x&qW13B!ohsHE7}yfViz)5DHSJ z<&jt-UB%cEShiNHF|{Cr>17-RDP{Zh;9bAC>LH|?ODXmzLEkFk? z+bSgRQP-6vq->~QWS0bE-*@Wg%-iSTR+Yl|-6I zFuJY@DT#|kQb8#iO-2KOw3JLl!Wljq45xxTFGbRAu7uQO1Dd$a)%LmRuH0sp+?2(M zI}(5dZT%wDGBz?m^Xh`$J)~q;*%nvp9#X11mu&?VXWcaamG-@oYVMMnB37L3)U<1L z`U0Ay8EjJZnck5G>6k=TN|eTmuQxY+FS$N%{?dWp>kBuN<8bX`?}L+T@h$dt zJS7idbH^ z>Jpe!dhXoO3iFTMoTp^EmRU~8p1P`Z{eAuqOxpr@RiE!;0ERTsZ?1kW>zopr0HO?F A=Kufz literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/metal_inside.png b/datapacks/ReApplied/assets/ae2/textures/block/metal_inside.png new file mode 100644 index 0000000000000000000000000000000000000000..4c0a45dce6aad68c76aefe4a75c2e4e3661fcdff GIT binary patch literal 460 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFEak7aar};LBT@` z0<8~2tuF8xi0(+)ar~&Rf`gXA4TcF!77^RL_tdukKWnoiqu0Y_LCl$*b=EQSduBi9 z%i4J3Q1pgf;hkF#=kiW@r5DlU{X6}L^m3a8Kl#5V=)G*&x=^O+w iEal=+tA*y9^IYU_>sC$ox^R6B$VHy6elF{r5}E+{?Q^*R literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/metal_side.png b/datapacks/ReApplied/assets/ae2/textures/block/metal_side.png new file mode 100644 index 0000000000000000000000000000000000000000..dd914b38048d986076c64f7c3acbc9f8e54b8a29 GIT binary patch literal 451 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFN95(FH8)kvn%1{r_2QhWt~{Uu&H|6fVg?3oVGw3y zm^DWND7Ymx!ZXd&Q;UHE$YEuWVq|4t1hTwIesvJDxT82Es66cA^& zvw+1jfNT)(lw@Rh0dz5pE=bJGE78kKEm1JlGh_ftOkihV0je`FGB#jb05KC}AL{~$ zIg@~F5MTnD$^=#!WN86pL3J4#7=UEMyPfr#Op|qh%yLf`#}J9jqP-V+4;ctJ+cL3; zDG2^CcmEy#w2x8Y9fR)9zwQqz|PxGk$3X!^*c6oXXs21=&@6@4DIFqrdI!Mg==$Ez~h)K ZJ^SOP@{f=3&u9QS$J5o%Wt~$(696DEaIOFV literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/metal_top.png b/datapacks/ReApplied/assets/ae2/textures/block/metal_top.png new file mode 100644 index 0000000000000000000000000000000000000000..3fb0d242cdf00905acd978f2f53e2a3a58282d2b GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF7PJ2av(-@B-*u7+sKb$b#xJG%x_khIc#bHJK*s0GWlJE{-7*mu34d@-i#(ILE$V@D=Z)vH)n2D;R#U)tfC!FsSF{an*>-lA{J zi5K?1Jf3v&eVEzgX_I#r*Zi@q^4nIYbWQbU>kXNCf1NIb*{^E9UQxk+P~L2=m~FkM R-w}{QJYD@<);T3K0RW%iZ;t=~ literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/quartz_block.png b/datapacks/ReApplied/assets/ae2/textures/block/quartz_block.png new file mode 100644 index 0000000000000000000000000000000000000000..e82bdc5ff5940e01e1de20e99cdaa59300c15cba GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF5KZWKIZz{7e$e+lCwZ?+4rh5Fvh{1uoBB)-MB2JC;-=o4{%`NEa% zR!p~o3w3%nzd4?>I(gBpY4+z#Ok%hquC6^Cc>he%ricG#9y-aCtX(}p{gmF1GO-zg x;qgox%}kdy?um`u!V+`oN2*4Rjm*x!3?F3$C+2(zRs%YL!PC{xWt~$(69D%>U>*Pf literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/quartz_block_side.png b/datapacks/ReApplied/assets/ae2/textures/block/quartz_block_side.png new file mode 100644 index 0000000000000000000000000000000000000000..431a49d53d6023d10db6bedf75b7519557b51106 GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFG{v@UC%yz{uR@(EpP7Cbyq%Zc{Ik literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/quartz_bricks.png b/datapacks/ReApplied/assets/ae2/textures/block/quartz_bricks.png new file mode 100644 index 0000000000000000000000000000000000000000..c32a16edb3a8d7b49c9e6733d2ccc3d15f59ef3d GIT binary patch literal 3872 zcmcgvTZkM*6dg5&m>3lljE_ju`SDfL)z#HcXN;Sjm@H=Evf1bc6s@kRo^3PJJ$Co* z%tl2~L`2lTpdykFK|gfy1%CJu^+(0v14Tp;K}A#)Q3O9!@OIDaWP+3Ix;_SGcI(!u zQ}^DwkE;78ckkG^{`~c&QfcGF&e|0GJuCmNIR$=y`0R^Za8f$8V_RwQoeRH(!J5Wc zeXLY^{^1S3vr}QbX>!-}_P4(Hb@9WW55E50U5lSLAASF(dtbS3?&)hA2VZ{w>si2@ z*50`$u(?m$Tu{1Bu*oVD~gXu%Ej^-FoH5^_8v%3@w>4rQ2#osn@Nl z1+fSJ=VDD&3P`rUs*dG5Dl_#-Wjs!#VwExC7!$>I%eqCWg)dhKCRoF!rW2%F9;Tjd zEB%iO+bK#V5rH>VySl#}jH>EvmbE=i>vTHhj!}-2hNio&t6`!Mf&hWig(zcP6s22w zBz>BiOnDNvvoMa7oR<0VTvk;<h%G9ByFoTK&RREdC;hD;7D{jz0j80luYBfgv;&ou;Z2`#nNm_ z9`(-(mIHjSxIG(ZaXK3x#|eY!V_cDi!ErXsXO4l&Zg?DMJ~M!}z41h{EKa85xVaQV zlS{fO1_s8v-^wH$`RvzhKV zRv?kET^C84a^y4YBSToy@(pRTzP7Nw7W270r1JH>EE6#Yj=@=Y)N!eAaeqEoAss0PdqY@(FVh^NGM#5IBZG zRpscu<8d=i>ahTy8>*6@wFmT|D$BF0s_K2=OdhDsxt`D_7(SYw|MutiEi->~dT$hh zi;1e_(c%^R?|}*i3RtFTn0@(V*pDcN;jcyzk7CcnONq7$ zBYI2tEQ=Zv+7;B!f5j|4AQr{UKpYG}%%lcl7G!`V0&)wxmc!X7vqsjB6`4i!G8ryr zt22zp(Y#EC0PvZCd8kKvk9(MFe_epRaVynS_kmPLp6M%9*;#xJyd z54y-QeZ|1iw}~Slt0`oI4%y&yM~7h*NEmc=+R41^8J5cG5tj+N_3Vn-KLP$+kGse^o7w-9q|)3m82 z4MJBz>tJpKI`L6J2uHdN*Cj_M5_U1Tg-z-hu75(>zjJ9CLDUlsM{h-2KJ0s|hMq7* zkoKhTK7tXHk)_93J{mmmWCU$8f#=(q*OX3%r{8T8wXx|;%lZFa|ppI%XY^}&bUUf2ET^3IO;4w*;pxoYZ}h0WjGcjSVz zk38@cT6fWtwHMF1{lM1W_TTa4ozB`P>rZ@K`Q;Jczh>PJ*ByL|e0A21{>JCF++yzi n{@IVCcQ^lW!{NO@p1XL?rWZc>Y4TA11fAHvySBLP=DYs{mW-~2 literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/quartz_capstone_left.png b/datapacks/ReApplied/assets/ae2/textures/block/quartz_capstone_left.png new file mode 100644 index 0000000000000000000000000000000000000000..596bc66900102c48a07ca07f61eec684c189aa0b GIT binary patch literal 3863 zcmcgvU5Fe-5Z(|)5{)E^68yno5=2dUr+cR7m)pqY_HsGQCdcJ87hgpn@PMf{5?YKqO#5i7y(IfS3m#6n`E>10w!FKm@JX+1qSzle?Th3%hq+ zUHx@cb=6nh&rR$eTetR(wWU&N-T2PxB>Y{Uf3I5&zdwHYZ7x`qPL6Fa9Y1&14=}i{ zK3p3vl}@~H;~(sL7~e9nYiji64=$Yj_TusLzcgO?^s%F-pFaN8k#D~K5N6l3cJ5D0 zr5kU}zpF~GzP7Pcx_NClHJwe@c6mH*mYIlsS#CF5pj|2rJ=ktBeo$tLFY94cQGYu9 zzN&TtfJGF_WcM&d*&Rv9CXv98!|nOKxsc&nmg9c$Rsh>nQmVd@cE>3&q$ zPEm#u5qOi;9o_9HchNEzp@brc2f>9uB)M#lodHQA6& z8D%NxlAbO^t5)l&4}@(td)jF>ItLbY9UQ2gPA#;gHYwA1HsNw~4tCtMXjqy}%1iNC z#&S^aEpE-kS)9(qR|rCH`m#`DVQ_^F^O?(3WjnlrYCh9bZFwV!WLca{#c^XXhb9(n zQ$|LV`}T#Ai09M$bGN(dvdS`9QS)>{*g?dZ(urrdp6P7Cx`%P0T7v`?EMxu3F4E0h znYtdumnp|03>KDD72FHrq{-me!X~RrtrgWfyVYvmc$8)=;&QxNQNh%57z$7Ly5*Qw zfDG(_t&*C^7Y;?fZxPqlU2NN8aeX!Bvw2G8>x(KAF$av^S$K{WINY@jWC)uhY5 z*ef6J6Lp1+Q0Y{w$9Ul#&(l`I*%jh&z}YV^%EkKm83}Q`Nw## zqAkOXl+9h;3Bxc0J&-Okbxcvw_lMs_g=x`2$swNa#Zr}?fsO|=SKp8iz;%FM-HNY+>P%D6?I!?IY6yQ_zuUmYjGjON?0aI;_%uK?DDR|kXJ0wT->Y)T#E6JjCe*rsVyOBy;|0jz_$ z5fI%+fv$5zY^pQhfPpFQ@@uERfjZ@hi@++AZYes}c3nN9o6(%A2Qc+*=a zpI`OVjz<^f9=QAPQSYNCR-<#LFCM$){*jrj!TH0{h0nkIl{hEIHt*Vf=AlDxo?W*^ WZg}@j@{*UoKgUORSC4N$@XTMv(WvqO literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/quartz_capstone_rigth.png b/datapacks/ReApplied/assets/ae2/textures/block/quartz_capstone_rigth.png new file mode 100644 index 0000000000000000000000000000000000000000..4c82b40a54f639a342285a99a6eef1ef2b9906bc GIT binary patch literal 3862 zcmc&%YiJxr9KTWpji%Nor4(FN1*OjI?Ck8bxz;q-N2FIn8f~JW&d$sxOYe5CyPM?N zQt$~XiXbYe1wTqZ7+;{Mhz}5aQIP5f#RvMW1yTH9KUl&4-YXZHHfdBmxJ%|g|M~qN z^MB2wBfEF>_pR?M6bk*rJIkZ+cWwT?U^V>y^8L>_VO2W1V{2jV*oG6ZxL|UyGFT|Q z_T(j}*@dvaVr19YwoiXPHTTu;&wh0Bo`>J9KKJE)b3eWnJ-!EaFRt&LNDGBauFSuy z3eO)|S17FM3&+N@@yafb$F(98u`i2_S{=9xg@G-NI^+9frucF)j7sXS@4l}pp(v?) z%?hs6hvZba^I#(P9Nay|5ANfxP`7OE?;B`%fKZbeQyR5ulzNSl+64CC|D3F;N|Pnq zS5gOaiOP6oL>Y<`saQpfIL1V=-J)($YT=s|f(h2Jsp$mimWQdQ+e-VRf;dGPNJQX` zmbbUX!K$QAWm(S}1zx?& z3*M?!y6lU>)@ohuG}|@<8nq2vlsg?eP?y@MOylW<%WX3t@w$#;X*Me7{j-eYz}`Jv zpNg|Mor=%mgzokNS7c#u7J>QB0#?}w&%&DTbXn`(P$F3tCu4D3?ZnVXM>l0?NV#!u z7>Rf`y(u@l%`VFpn_$rm)S+c%$X@L+Y6Xu z5e5gAWEI>C;-tpl+QJ%}lv+KSY)Y$Cyx}O#Sj6RUxuk-s#V{0}Yni6)m@d)1m5!ea>$1td>%*!2$t8r3^ z1^C=hmHe(ffCp7so?Rssgf@xed7xIOTSS{+_-K0m+uom8Vt;=7_9z4w6IIEh#cRsn z0~HJu0EZgjvL<~bY{=?(IRvkzEk&%}or#4z%?gv3n}KGUdOO1u0`EYV+^!pYAb*zdSFuU}vW!`0*S8-C|4QAe&{09GnE_FO@FZGR#QX z%(;y)3^O2sbdgCgMS)KRa$U}l^nKyDx@#~q=s4j_BZx<_XW~wxt-y%Z5kAGDNeS%= zYUjUV79*~1;ea9Ev@voi^^qfOh6ty&V{p^v5`yo{yIHh;EXypS7fEk1TbW@zj%H-i z6L@u&FzCcGNlR*w#5IN0>(!7q6H}XsM7yzdb6Lq^rKfT&$C*MVVNaCwO6;nm{715v zjL+p2*#GY$2ef?l=&dOO+T!J>U6sl$Z*R}$H$sSU- zEN@=CQ({xsO9B8|>UqL6gS173_Yth1jC3An z`KtTClM%GZ1fFllzwLVpo_@2#<-xIa$FKf;aLt3tRS*5N|LM}l@4TeFYJak7{bPp? zfA-faqes4eao6S#e){Ipqi^5-%;ncScz9y>$lHHx+H^d=bNd_04=>z(z5d9K8~RV) zar)Rzw|Jj#SpE7z?Z}UpJ$Cfw@}DoOZ*Dv_VP1RdcPH*THg?g5kwbs{_Qc?Ozh73| XyY`C@@9*!=pP$3qc9-Y2-uuAcalWX4 literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/quartz_cluster.png b/datapacks/ReApplied/assets/ae2/textures/block/quartz_cluster.png new file mode 100644 index 0000000000000000000000000000000000000000..c97c2934a13ef04171b283c82d61c072aaf6d795 GIT binary patch literal 1128 zcmaJ=T}TvB6dp^ZEG>E|O6W2QZP3olj*jgNyXiW!x(m*_tXpXWH9K>42c5aY%;>IS zC6Nzh5J3+<81!g8NcB+B5B)+Uc~_VY}Je>(=70&%db)n=&WW-b&2O)_%fHd0#}15X7}}8-6Jj*so7^ zq@!QI|9tUrVdC}&^Wv+Sm){PL-FQ5=aN)^(&**jQ(wo%46b5$sg1fNU=%x}~i>r&+ z@@{q(pRc!KJq|(CJoa|kQ#7p+#M+3S?smK74nai*rD!Mvsk~ufG(m)#^OmCaLlCEs z5Ek&icTAI@0CD@nWW}hK{TShQhD}$= z`%R~ANu($vK}WT9%hizyJXs}!2Hh};lU}-wVXbJJPVvd`AEJg@;u9OjnQDRl?w!-QZUM~Q8C&micP#2X%LsW z5>f{ZXu8W>ZI#fSF#WehZB&Xtq(!1%|-?&TwTyhrzDn?EpoNeDM_WdbTO$A z?UnhjvM;q%;S~22_CoYZPkY|VTtE{KgN?g>^zE(P^c E0DTZ`(*OVf literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/quartz_fixture.png b/datapacks/ReApplied/assets/ae2/textures/block/quartz_fixture.png new file mode 100644 index 0000000000000000000000000000000000000000..bf85888ed270052aefc3d5ee4191e0ea0263a5c2 GIT binary patch literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF<6C!!m9FqlpSIEKejiW`XMsm#F#`kN zG7x5Lzq2wQC|Kp`;us=vS+wgS?_mWV)_55Q7!dkmSfDwPer218mz|B$YkeLeB8&H5@BF zbkt?qmqRgS=`;O1-fi3z(-Gx+RZrygx0ib#{O>_%)r2R7=#&*=dVZs z3T{b_@J#dc)MDTOa#$Ip7+Dz@fh;c|mWHxH)@m>^gTrIsj|>KQTs{V{=^fdwdUU}S8-xBy}%NImNUh&hvhY!F}q zn!*HD8DwbzWI=Tq8W@0N&uBzE^yPi317wzXx;TbNT;@Hqk@v6x59>w$#&@n-%pG5t zwryeHy->@Q`ag8hyRO5`jz`)qU~X`xA~> zE`65N5&z`au7h_(p3hr+_MaZl#Lrcm6LwU@S~ccAyps7q?l|hykKo(S&p@9KNHoV(eugNr72gt1Rba4!kxUAZDRFB64)2}PbQ*-y+kCkSHr;Tz!hn^ix5-{IfPIt{B&oxQ&A-QL4@?K<6l z2UT>}i1--in3VFVU6`d2s*xmc?-S!{gY>U1X@adr=alZh326Iy+`GuV#`5ve{To6p m)T1P1YrpKfBrX0oaU*k3tn7k{T^1ifuJUyCb6Mw<&;$S!VRY>P literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/quartz_growth_accelerator_on.png b/datapacks/ReApplied/assets/ae2/textures/block/quartz_growth_accelerator_on.png new file mode 100644 index 0000000000000000000000000000000000000000..49e3a3e26e250cb3ce06d16815b6743ff6c1ba3d GIT binary patch literal 697 zcmeAS@N?(olHy`uVBq!ia0vp^0ze$V!VDxIwZ5Nn{1`wE}!XT%SI@a`M=&=BA2S)B5uA)6BI}-A!vs0yfP|x)|d$eNW+w+jT$Q z^?doc;tgkIesvJDxT82Es66cA^&vw+1jfNT)(lw@Rh0rUopE=bJGE78kKEm1Jl zGh_ftOkihV0je`FGB#jb05KC}AL{~$Ig@~F5MTnD$^=#!WN86pL3J4#7=UEMyPfr# zOp|qh!4%=?;uxZF{_MrQeun}?4t&(!({R%!vSoT2o$XSN# znfclmGd=&)!}gP8^Z#=iBC8yBry-Jp0tS zmp6BAVlO;!gV!bL^$}D3Z>EzpW}RCb=|AzwRn^6L-ff39au4@7Y9e&O!wx)~lB{Y;+5oHs7Xw&i%#e?y+AaQeQJlPE|knqPr(8 zp;~!{rr|Sofvl5a|0-DI4u6YStZKXS*midDe|M9o$zLp1IbvM(sps30<&SP8r|`@& zOn+~*YofeQ;<8hf5{@fE?fKM$KTP@4Q0{hV^7|dOUmiGpIU&6N>ziHYOso1H|KPP{ zJ(qRKc*7q~qj$T!589{f(L0pEX6&r^jGLoWLht!};}0Q+Jt~4mdKI;Vst0I8ht`~Uy| literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/quartz_growth_accelerator_on.png.mcmeta b/datapacks/ReApplied/assets/ae2/textures/block/quartz_growth_accelerator_on.png.mcmeta new file mode 100644 index 0000000..df14ee7 --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/textures/block/quartz_growth_accelerator_on.png.mcmeta @@ -0,0 +1,6 @@ + { + "animation": { + "interpolate": true, + "frametime": 4 + } +} \ No newline at end of file diff --git a/datapacks/ReApplied/assets/ae2/textures/block/quartz_growth_accelerator_side.png b/datapacks/ReApplied/assets/ae2/textures/block/quartz_growth_accelerator_side.png new file mode 100644 index 0000000000000000000000000000000000000000..54ebf6848a52a266afe0c95bc95b4afe5f440619 GIT binary patch literal 470 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFvzI1|u_AoC(M_WMpFC z1JY4IoY~F-7S8~(LBLazk>Lf<-7vZ!F*C13FE6!3!Bo$X0Vpwnoq+|Y&cMjnfN=rD zOptx73n1o906)@w3N)&VkGJY5_^Brc1dJ1E#> zAkg|y-6Wxf$v|!o+hWlNHyZRjnK{eT5;7Z3PJ3Ha`8oF98GZ?d^ts*NukCN=<4t|$ z!{-~(x$NjdIn8u0_G4?8Tv^QJ=oKeYDD-Tvv+PV)k=#2j*X}Oljeb~iM}EG`{@Ko{ t@02$0)QWS7cg@{f%eU=%&*UU+-&C}J-Wt~$(697X{ctHRF literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/quartz_growth_accelerator_side_on.png b/datapacks/ReApplied/assets/ae2/textures/block/quartz_growth_accelerator_side_on.png new file mode 100644 index 0000000000000000000000000000000000000000..84f00571f67516b472bddf6b4121cf484875cac9 GIT binary patch literal 733 zcmeAS@N?(olHy`uVBq!ia0vp^0ze$V!VDxIwZ5Nn{1`wE}!XT%SI@a`M=&S=0KOn=111)6BI}-A!v^oTirqY?_&LaZllk+jT$Q z^?doc;!R(&J2y}lXMsm#F#`j)FbFd;%$g$s6x@;;;hE;?sl~tnIesvJDxT82Es66cA^&vw+1jfNT)(lw@Rh0rUopE=bJGE78kKEm1Jl zGh_ftOkihV0je`FGB#jb05KC}AL{~$Ig@~F5MTnD$^=#!WN86pL3J4#7=UEMyPfr# zOp|qh!Bpev;uxZF{_I8TphFH42R>enaZq7*$f+@5tdU_zuld5XFmy7*(nFtCg(L`D zryt09q0^AFCP!kkB}4Kd-UoVhoYTZ^-F)+B_WRlQ-zkYWbL1Y_IP;{6vHDGxuIC1d zKir%?I{62_lI7&AWKCYmwQ$w0$kod(R5>nId*^VX)a!&oBg;$yFGZKgwZ(?#BE@ZV#ozJFZe4b6hGm-p&-wX1jTfc#YRy_R_Uqcz zv&}Pm{+YGq#6R{&t;ucLK6UQFaL}H literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/quartz_growth_accelerator_side_on.png.mcmeta b/datapacks/ReApplied/assets/ae2/textures/block/quartz_growth_accelerator_side_on.png.mcmeta new file mode 100644 index 0000000..df14ee7 --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/textures/block/quartz_growth_accelerator_side_on.png.mcmeta @@ -0,0 +1,6 @@ + { + "animation": { + "interpolate": true, + "frametime": 4 + } +} \ No newline at end of file diff --git a/datapacks/ReApplied/assets/ae2/textures/block/quartz_pillar_side.png b/datapacks/ReApplied/assets/ae2/textures/block/quartz_pillar_side.png new file mode 100644 index 0000000000000000000000000000000000000000..9ea95a1ffc189f4d110537c3cbfe4870f598ae34 GIT binary patch literal 3839 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 W-1GGp7fO>_%)r1c48n{Iv*t(u z1-GO|c&2%JYB6vCIjjs)jI0cdK$aH}OGDWpYc&{|!QxCnwjm=E10Rr%0^-be7O;2* zkPQN!l8g*5fX;={1&Nt?C3<V_g6-XA+PN z0!%X6s4hbT1CVTZx3gZ8X|fKGS>);B7$R|5^vp%x!wNht4~>%;;bvN)78&qol`;+0DW6&9{>OV literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/sky_stone_brick.png b/datapacks/ReApplied/assets/ae2/textures/block/sky_stone_brick.png new file mode 100644 index 0000000000000000000000000000000000000000..b462cd73602afe2c0412c4fad2bb99e3b9de10c7 GIT binary patch literal 460 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFKPOgohBnCY+>W5uCA`DZ=#?eEh)-#;Oe5!KsB5N9+AZi4BWyX z%*Zfnjs#F}OKOB?ny0500|$`9${@wa%D@O@c>%FBlnt_6gOM35&IDu|GBPpn0qH0p z&TMA^i)R4YAmAy<$nXN_Xc%3Pn3-3imzP?iV5(=x0F;=(&cFgxXJBM(z_WitTM>b0?2~uGBhv%$%c13>ou7s>j0Uxo-U3d5|>4f844Xz5MaIF zf1s|ggMGsVv&UX<&N{v2dB7->#-A|xb@$b3gL{*|&u}-6u448B(6qFcDc{)6bn^ZVi%{Z}u{2$*HzBsyglldKEFGlT9uZD%cYc^+0&m&<7u iM*S9BnEv+Do+t7R_L46PpZ{$IIm*-3&t;ucLK6USXK&vC literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/sky_stone_small_brick.png b/datapacks/ReApplied/assets/ae2/textures/block/sky_stone_small_brick.png new file mode 100644 index 0000000000000000000000000000000000000000..50faea5c89d14d5c5ad7c5b05a0821a0a03530bd GIT binary patch literal 463 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFKPOgon~RF85kKGFfM?Y39^rM z0mPh1KsE?40ZnBBs|>QV0J5OE3=IrGvfD(mUbng3rLl@1NbIC=);E>BlKmvv4FO#o-!aRC4T literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/sky_stone_tank.png b/datapacks/ReApplied/assets/ae2/textures/block/sky_stone_tank.png new file mode 100644 index 0000000000000000000000000000000000000000..57be001529024d5bd4041e91b92bb38cbe91f8c2 GIT binary patch literal 467 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}T0G|+7SI?l3=rju(M_qjr87W}}1!;A4^$V|FuDEbhQj`a%DtAY_5Rl?7 z3Gxg64+jih{*0f1!kh&jk;M!Qe1}1p@p%4<6rkXi)CkWsPfsld4j_k>L5h);ff2~^ z0%B<>8{}FIMrN=$6Oe7l$i%=0q@#d1vz-Mjo&jWoKmrhh^uy?a#LT=By}Z;C1yemk z2B2>zursg#vp>5|9l7Oh8kZz$$|*Er2YjE<*zYkn99{hJu zW8wLaDT#qe&xBq)m*!f0L_TJA#%_k=(>mS47Eau6u}eR?q~B%p$_AB~-h10T{I>>P cUa#A{hjEq}+tWyI=T4B_p00i_>zopr0OFf*(f|Me literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/sky_stone_tank_bottom.png b/datapacks/ReApplied/assets/ae2/textures/block/sky_stone_tank_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..8167011513dad1bb4d4beb7645349c4cf14d5a9c GIT binary patch literal 465 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF?#|jLcwhCLr68k%@s1NJjy2 zW;+X5JOjuEflpKPOgon~RrK(-+x69XTRjsoJ$b{4RB29ON` zpUM~+UI5(+qYDx<^GfvcQcDy}^$Zz+5);@NSb*vbjEoH!7eLGe*~hv7V$LKW8w8ku zrZRz523cAFSx{Yu1_mJ6P1DqRE_%uK0-0H!E{-7*mt}h|@*Yv(ah6YH%nQ=`vs(%ifKo}|f-oR8N}>^j^l9L(8jY?d4(bR=eB>#9j<|5qd^Kk5!h zFM9gHXH9ozmvv4F FO#p7rX{Z1I literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/skyblockchest.png b/datapacks/ReApplied/assets/ae2/textures/block/skyblockchest.png new file mode 100644 index 0000000000000000000000000000000000000000..1daf47aac58538db9e85f35b4b7ca26136cd2433 GIT binary patch literal 898 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~e1o(uw?kRjRGwGtPzKOcJx`KkVq$rP!l(4y0s=H}TNx&ux8%I~qppfXa z7^msC>wW+=oxFAB5s(rn3Gxg6j|vzbD91_yO=u<5X=vX`tYi)CkWs zPfsld4j_k>L5h);ff2~^0%B<>8{`8GMrN=$6Oe7l$i%=0q@#d1vz-Mjo&jWo08cq1 z!waBCVRS)aW?qS2UTTSgsh%MNP+|f*0}D`{fswHR;{u48Ap2MsK+Ks0WP<<`&{QU{ z${Gw;Def$9g_}sz(Ui~#+%F{L8Y+|guBe7f;RFzd7Z>-Q*mr@ zPQ<~PhAN7j58gc9Dj)9PmBQnBR_lTrU2BY=^{-uY)sub*XcEGRC2uQy)`FuPG?5a#Rn3T zCio{AY|JR&@jStF@W`TrK-;(%_(w3X+<|gfguB^}PiTobk^olzA;85x-3}u8aA8L} zMAp4=a;Ix^vd1BQra0&O&Cyc+f(6mHl#}gPSo~uyX{W#L`FX=>=B3Y_-%5cF)evn@ z` q|F{1`^&O_|4Uffku*z&dAn{(?ZfCVqzVc^KvhZ~Eb6Mw<&;$Uw?n=J^ literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/skychest.png b/datapacks/ReApplied/assets/ae2/textures/block/skychest.png new file mode 100644 index 0000000000000000000000000000000000000000..1daf47aac58538db9e85f35b4b7ca26136cd2433 GIT binary patch literal 898 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~e1o(uw?kRjRGwGtPzKOcJx`KkVq$rP!l(4y0s=H}TNx&ux8%I~qppfXa z7^msC>wW+=oxFAB5s(rn3Gxg6j|vzbD91_yO=u<5X=vX`tYi)CkWs zPfsld4j_k>L5h);ff2~^0%B<>8{`8GMrN=$6Oe7l$i%=0q@#d1vz-Mjo&jWo08cq1 z!waBCVRS)aW?qS2UTTSgsh%MNP+|f*0}D`{fswHR;{u48Ap2MsK+Ks0WP<<`&{QU{ z${Gw;Def$9g_}sz(Ui~#+%F{L8Y+|guBe7f;RFzd7Z>-Q*mr@ zPQ<~PhAN7j58gc9Dj)9PmBQnBR_lTrU2BY=^{-uY)sub*XcEGRC2uQy)`FuPG?5a#Rn3T zCio{AY|JR&@jStF@W`TrK-;(%_(w3X+<|gfguB^}PiTobk^olzA;85x-3}u8aA8L} zMAp4=a;Ix^vd1BQra0&O&Cyc+f(6mHl#}gPSo~uyX{W#L`FX=>=B3Y_-%5cF)evn@ z` q|F{1`^&O_|4Uffku*z&dAn{(?ZfCVqzVc^KvhZ~Eb6Mw<&;$Uw?n=J^ literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/small_quartz_bud.png b/datapacks/ReApplied/assets/ae2/textures/block/small_quartz_bud.png new file mode 100644 index 0000000000000000000000000000000000000000..7183fb173b6fd2737a1a8ae315925a1f0c19902a GIT binary patch literal 1052 zcmaJ=L1@!p6i(d~w^=v52qNP*yHv1Ank8!+nvFK;w#rgUTiCoUO@7y~C4Wf%*=!yJ zPwG%Ff_fNu7~*Ll-t;iUgC{+V?c&ADPVh4*9+`Nrad6(S;jc`8S3zCXWDl-`A`mZhlY_XmFJ$BBNXG*iuQ ze?Iv7{m0tNPn$d6ob_E|-dT|bi8z7F#mevSP%pMNwuq(Aoxb8z)af_jjl4zAOp5Bs zTGcr`r_D$PvKie(HOK_EOS~y6GZDDDu?R7!!3E2a=`XLgXkeK#Ju7OQ<|?pmO|N>e zvRbSftBXe3q$kFs{h2@_3^v3%2<#=tmjan?5=-PiG_y2ly5L2b&V~`eoK^w~@*qeu zeB9tT4kXizI5q}rhFB9W0iNS|mJ?Yn9p_RKFG`{aT8AbP0myjfRjI5_wjvTurt28H z63aFk4W=>5Aa8+9q|<4Z<5`}M6OXvR;$S_9JO0QaNsC5>zTsIewvYotTD^vru}qVs z538}=4!7gCo{T&m8|W^ZV7Rclwxg!~-_^D|-aanFqon^y>{nM@$d;jxmOTR!_mMD^ zD=8k-G4iSiEwvxCR7V*3b>sqmlo3E|)^beL@Gmw2nkE$-AM1_*3#v>L3dXWbNmY}A zDky3ymCGg)`A{mk6fcaaijWj@d>gAGW7&odZez_OY`!bD*`=^$84`{pphC~O2F*zi z*`QgvWOYv|*Oj(~HM^&zbjPx-q%v&S=D*s0I8se3nJJ=W*v?FcT4yhyLzclKQ-3cN zi;|5I3Tn0*tGru#-A8e!j_p4BHS1iC3F}YB_cB8Vdp9D&aKyXy;m%WMdpLLDmAA literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/smooth_quartz_block.png b/datapacks/ReApplied/assets/ae2/textures/block/smooth_quartz_block.png new file mode 100644 index 0000000000000000000000000000000000000000..ceb612bfec192b13c76854ec72c5b7c56f7ade6b GIT binary patch literal 3852 zcmc&%dx#ZP7{9Uxx?+Z zd-X4gGNPae3W^{C|0o10>JOtoga{(UNDP7?0)xOPr0DTauW#?U|$F|uoH+b0)(J9_f#>MQ47{_wk#pa1mepXpH;S{m=%mlg`kZp}Z7 z3a`Glrck)KKO7s+#w)u#9@UCWM7}IGYB8V-g@G-NnDK)$Q+zoQ)=TQ84^FE}C`#&H zvw|z}kem#69!cb$BfH1=k%Qb7>XyyR`v)2xFw|tmlt!&uPrXJ-Z4!I%KNoAN(u8CO zOX^_0qB33?QHG*KDpnCAjxkYex2Ri`TKEBlV1hMlYC1u>&?0Hmlx513FwVlL zuH>}LkEXJc3L3Xesl{FHdfN6Ecus4uSksF*H?0X2yo-ycl4?@}!8KWxHCfM6!0KHr zc&k$B!e^ze)w<|3+cpgvwGEsVosJ!jr8X+lXe!}y+cd1Wp`%!ujmpdZna6a1cPGb_ zQ5L0>(KVdV9lpX9Sr}Yn!F=QjsBDDSfaW7zXzUFol4Vgc7Dd%g42^VjQ-+3=jeEno zh-T7Fx!G;FEVE3O)I6LJc98Cj5#2Lf&vfp`#KX7+tw4YZma$&2i-?(n3HGpi1vnC6 zaClCr;9d|VH3r)j*4Tv9;`&5$wMxYsuBRERb2(ftsi0~x429dj`7RGkJLkOF;SH~TD<1^d!T}W z0+wkSW?McIHe_|Y9D>)&6S1m5AUxLr5)$U{A%wy+v1 z&204;Z&}Clu$4k>i^JLWeqLT~(auat@Z)s?x&=$4Ae&){9Gn2>&y_CPJj_Vh^!1G} z3^O2sbdgCgMS)KRa$U}l^nKyDx@#~q=s4kOBZx<_XW~wxEx?G@6h6u76B61L)Xsm! zEXS~^X>y5tO9sgIsf%2}Ad^hn6*k8VTM)EY@6D|BV_s$vy-0eC*}@FtQGHq_J%Jaq zgh3~kNm^2aB&sPaj;kSWCZ;xB7wyK@&1EHvl%C2pA7=`gggsHxyJA-zC`|zcO=5Lpd1q4cl>6h%h{rT+*dBg+(0)hy-u4Nga(?I<+P`GHBW_G*+h@1Tb4J^ z-YK!E>!vQD!#Ru~Tc;HHfiIAt#0~s_GHzI{t*M4LKsz5tEr6C1W|Kj%}JYwWLAl0%#q~jX)*}VvwE&D%^+<_;eG^fP)0hJv;3`l z!IO1plL=hk)~~4+!tgJTvFF}6vufR` z@6Rv&_|lmtZ+-Xl{%KPOgon~R8skH}&M25w;x zW@MN(M*=9gB{jk`&C^qhfdj~4WsqWIWncudynt95$_81k!N?32X9BVf8JQUPfOHfP zXSTC|#WR3x5b%^_WOxB|G>k4t%*-p%%S$a$Fx4|;07^_?XJ7%UGcYnXU|aw(6J#Ij z0*E=2fNT(80-DMMRvBbz0c1gS85$UXWW&3i^_onRb%4xDPZ!4!iOamF9k~uG2sm7f z*F9^dwj}$a!*8vHwoA1u6TdE(lX->Gc erMrCcpJVb)UxhpQ-&Qn(9OUWh=d#Wzp$PzD&~60) literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/spatial_anchor_bottom.png b/datapacks/ReApplied/assets/ae2/textures/block/spatial_anchor_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..f2a951fce7e480fcdd5c5d96ec146a6027ed33ea GIT binary patch literal 414 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFO>_%)r1c48n{Iv*t(u z1-GO|c&2%JYB6vCIjjs)jI0cdK$aH}OGDWpYc&{|!QxCnwjm=E10Rr%0^-be7O;2* zkPQN!l8g*5fX;={1&Nt?C3<V_g6-XA+PN z0!%X6s4hbT1CVTZx3gZ8X|fKG8S3fc7$R{wIYA(ZiOH3XjZIiwp&%_m zfX|ezDZrU+szadTL5DzfHc{t`36~ub6%L!+IC|7XLPhA&qeomqhAdgdZm9>B2y`Xh kN@P2Eak7aXC3bAc29&O(85SD5%gVDM28~KvaY$Eg&T!ZS{*8Hzy_>IFNI1 zW7YLDX{>C|I&P-tz0V3wNa%{Fes@+^;P9T}uj?d_^6~g2J$0Dy;=lo>i|ZItc4$cN zWRUbxT-nr=xQ>zMj1wad&ze3q9;ZVN(UPK~jnkx@by_W&Co(d8Tp|<6@{3UqE08OvU$ylwz$rK(-+x69XTRjsoJ$b{4RB29ON`o|23VFMvLQ(FKW_c_n&zsU-@g zdWH-@i3#isEI@SzM#ct=3m|5K>|rjASEGf^@|xdCng*?kaKTi z)%7!JtZdIZZl>qG&k9XQ=!&R*cUD*6@SftY>m-lz@%SV?b(rwtzyYR<>ljjYXh`p5 zkn~Yp+0>M{j*;h#6C)4Lnm#rjr$Y|WlA@xG)1;hrS}mFEak7aXC3bAc29&O(85SD5%gVDM28~KvaY$Eg&T!P5b>EOXGtLjW;(X zUpv*8#LD*UL*(xAwHl!b2}1L0pM6{9CXoDg=jPq&Rt5&1Z|;45W;WrV($4Q^W=1<` zPCIe8JpVk4=C+uvn-=f2U`R=*tYp35utSvR)G+~X#d8TM3=DVosQuZr_JtY9VVE08OvU$ylwz$rK(-+x69XTRjsoJ$b{4RB29ON`o|23VFMvLQ(FKW_c_n&zsU-@g zdWH-@i3#isEI@SzM#ct=3m|5K>|rjASEG9`~4hC|2&K4wwSG(7VouSNJ*%yWWC_9LzL&#F#&JIa|tO740rda{n@nkg&D|Up00i_ I>zopr05eK|1poj5 literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/spatial_pylon.png b/datapacks/ReApplied/assets/ae2/textures/block/spatial_pylon.png new file mode 100644 index 0000000000000000000000000000000000000000..279a440c76275bdc261d25586d3d89e526421930 GIT binary patch literal 1057 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCil00(?STduA-FY3!cA=}=U1RzP@UPF~s5r&nf8>s!Bi@yTPmqT?gXwNl+p zYhs+H$I93hsCu{ShnECwns1dnGwI?k&z#$JKlT*9c$ScRDJ<_@&zHBwxj$FD`O)71 zG+sPSPZ~(cl?3?(|HlUy-bl#A0abDqctjR6FmMZlFeAgPITAp@EvXTnX`Y^13>-iX zD}xjxD+42tfO3Z{C73_ytq>vp>5|9l7Oh8kaz$$|*Er2Yj zE<*!Q6flH$JL@%>ChGvzrFptIhIn{i4ZXQ-u>lWv%cdzg6GUDZ{r^8(dA7-NmStZ` zzZ9+KE83|0TERuJMMLt3{F5oCS55jbG zM(XwK`rW=uUOW*r*E{psN%Vn^#IoD6T#g6Jhu&w(eTp^U-Ss|YBGtzm~Nb$ z|H%l>-yHu!;3pQo#z%Q~loCIG{( BuKNH0 literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/spatial_pylon/base.png b/datapacks/ReApplied/assets/ae2/textures/block/spatial_pylon/base.png new file mode 100644 index 0000000000000000000000000000000000000000..bfc6c379961a0684d170852fb668b12f7260d911 GIT binary patch literal 477 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|&0G|-oo*Bz(8oTFjIuw6Ka2`qr;reDc_?==cbr!uyNv z=>sXAk|4j}{|LY!bpPBrpg3oNM`SSr1Gg{;GcwGYBLNiLk{aQe=IN=$zyaj2GDtD9 zGB5&JUO+4jWrJL-!N?32X9BVf8JQUPfOHfPXSTC|#WR3x5b%^_WOxDe7>q7R%*-p% z%S$a$Fx4|;07^_?XJ7%UGcYnXU|aw(6J#Ij0*E=2fNT(80-DMMRvBbz0c1gS85$UX zWW&3i^_onRb%4w)PZ!4!jo{RNN1+1>9Lxt5R{Z^6FFnXJ!`p^$AQyPL`njxgN@xNAd2NDl literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/spatial_pylon/base_end.png b/datapacks/ReApplied/assets/ae2/textures/block/spatial_pylon/base_end.png new file mode 100644 index 0000000000000000000000000000000000000000..3782fc7d063a456917f270515a097bb85ab1e85a GIT binary patch literal 465 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|&0G|-on#S&^CBeIx*fm;}a85w5HkpK#ANsaJK^YqkW-~e)18Kf9l z85n^qFCdnNvOzA^U}Of1GXdF#j7$uCKspMDGuv6f;u%0T2zW{|GQ0qK3`Q3uX6BXX z<)xM=nCcla03{}{Gq3>F85kKGFfM?Y39^rM0mPh1KsE?40ZnBBs|>QV0J5OE3=IrG zvfR9eK z6>{(&-lr7EFZle3p4L9$A2o^5o?9xLYgI3&R dvqDSMVP3fp>}DC?SBHXZ^>p=fS?83{1OR*gcm@Cf literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/spatial_pylon/base_spanned.png b/datapacks/ReApplied/assets/ae2/textures/block/spatial_pylon/base_spanned.png new file mode 100644 index 0000000000000000000000000000000000000000..3b2e08a0e0e657fc0abbd5d59caa7ea70f3449e6 GIT binary patch literal 418 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|s0G|-on#S&^tHAjMG<l~kXKn^Q|6eBAGBar0<#L`eU$b}k= z%wTaQAls0UiGdGDM*(qWI}2Dm1IPvePf13G7eJ4|=z_$|yb`^<)Di_#Jwpbd!~}K* z7N9xct;r}3P!=iIwU(f`mg`Iq!z9L_= j#Tnil{pXOo>b{iN*`=(mclo`SfQbP0l+XkK&NEv0 literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/spatial_pylon/dim.png b/datapacks/ReApplied/assets/ae2/textures/block/spatial_pylon/dim.png new file mode 100644 index 0000000000000000000000000000000000000000..e074089600f74d85a8611cec1827d6e6eaf478cc GIT binary patch literal 448 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}%0G|+7bFEZ&)0!Bk=_LW1W+q*{UH4;8;fr@YUx4xt-|Kt_Qk*40e!>5t zfFanwLI@;S;1OBOz`!jG!i)^F=12eqx1>gRrg?g5F>nAmtPE0&tPG4mmKP99L)jo# zYA`Z`#hHL?Lq;YBJ|GI{sG4Hy?d%mmrTx&UI%Bp@3En1H4-fmH@sS^!y4U4{k*AldM4XT2uVWE~(g z($mE;L?gKOTp-^81rFu_uGY%`!u$~iY4*{=b~VcutqHGd;@D!u;BZ!Cg>%1@=Vs;? za;nT?bxSwMX*!5Su}yh6^MNS%G}H0G|+7chj1ZfK7V}U)-+y@pHwSnMoI8oTi&=rM~O=0#uUiwYCpPag_x5 z1^QL70(Y)*K0-;Fi<~&ooa@Ed~xChm}E!k(GfF$npYW zX($`yQVm9Cus9QtZOF*Pzz3wGfHP@RF1u>s=(h?yY!SQkLdnFM5m029zuCa}sNOA8{&803;jU?X1^i znydq4W_r3fhG+!0_C*UFRp4;0WKH=mo#z$3zTVu}s;GtKWnSQCj%L4ulMRa5C+KT< zew&e7a9uFZ!tI#yYgUNS%G}H0G|+7chj1ZfK7V}U)-+y@pHwSnMoI8oTi&=rM~O=0#uUiwYCpPag_x5 z1^QL70(Y)*K0-;Fi<~&ooa@Ed~xChm}E!k(GfF$npYW zX($`yQVm9Cus9QtZOF*Pzz3wGfHP@RF1u>s=(h?yY!SQkLdnFM5m029zuCa}sNOA8{&803;jU?X1^i znydq4=6Jd|hG+!G_8AHtG2meCb&&Y?|DlH8x#yma2l+BgcU4Q+Fm2hIF{#1&WX(aD zmC^~#)%^t@Dk3E<;}?jB86Icz>|d07IwVE&k-XMpCHoI8R_BtoAKj*^x#;hP8H{BS l`>vKQOiB-4dM)|oJ_eRP)?M2U6>R~z!PC{xWt~$(698>rdR71c literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/spatial_pylon/red.png b/datapacks/ReApplied/assets/ae2/textures/block/spatial_pylon/red.png new file mode 100644 index 0000000000000000000000000000000000000000..dd6af88e85984fa0c7f3c7fda2b5f3e90634ed8a GIT binary patch literal 448 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}%0G|-oSQ)zlRquBF@cCBByF7EACFEWT%X?d#3zX;WE{*|GoFzei!T+Iv zA=tk{2qakG5n0T@z%2~Ij105pNB{-5q(*qAd3tIwZ~!^13{s4&42(dQ7Z6KB*&tVH zFfxP1nSg9VMkWS6ARPt7ne8lK@eCjv1Uw}f8D0QA1EUKPGxJLH@={9_O!W*IfD#kf z8CZbo42+Bo7#Bdy1lh;B0AkK0AR7djfTl8mRR&pF09jC7h6V;8+3;>>y(ZIS9UwE( z)5S4FBe?fmAm0H64(0%^*2@3F{1FCe_R+$2HOm&Q39oD7*kZ)sa8_i6bH9}5X66@i zs?1__OE<`AI*3KFO?f!;hN!CYr?}nm342A1Cdj`IdE96mzu_9MNje+5`)_tlkcFPE KelF{r5}E*TgkgmM literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/spatial_pylon/red_end.png b/datapacks/ReApplied/assets/ae2/textures/block/spatial_pylon/red_end.png new file mode 100644 index 0000000000000000000000000000000000000000..c6d6f05678057195cc6f3983640c3dd9e906ed71 GIT binary patch literal 468 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}H0G|-o0#)z%R>_yb@}4E+{^)Pm<(bp2A08`X_qI3}s3esCTsM&7Dhcun z{tp8To6hK*2a0kQctjR6FmMZlFeAgPITAp@EvXTnX`Y^13>-iXD}xjxD+42t^mK6y(FktsixxVnz~NlUn(|*d&ntR;y}7YfQ47nsH+_=DcX~xcskH)EwCh*@`Hbu6((D>i`DIr%yCjN4` hzPR#y=_~mc`xsNS%G}H0G|-o0#)z%R>_yb@}4E+{^)Pm<(bp2A08`X_qI3}s3esCTsM&7Dhcun z{tp8To6hK*2a0kQctjR6FmMZlFeAgPITAp@EvXTnX`Y^13>-iXD}xjxD+42t@pN$v(Fl(1GZZ>vz`@+>Ao1`2Lk+)k&pjOv@@1Irs+O=}+OjocQiJu$nu9Vc zr4yQ~`wKo)L`qu5FAxtiJkI9XzbN-~NQ&kod9BAv_8(fT&LwR>x=mGc(ccX-7|SB| kT`gUhlpehFTJp<%3@m-DyS5!F+5&Qer>mdKI;Vst0A0#<`2YX_ literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/tnt_bottom.png b/datapacks/ReApplied/assets/ae2/textures/block/tnt_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..beab26ff4a8c9b616a2b47de0ee83b63770e12be GIT binary patch literal 478 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFD_8by+Pp|vZlbQ>(q>}^pi0gH zkH}&M2EM}}%y>M1MG8=GOKOB?ny0500|$`9${@wa%D@O@c>%FBlnru%1|u_AoC(M_ zWMpFC1JY4IoY~F-7S8~(K_CH$LHc2IL1JcJiC$i6iGrz~Ap_7)6WAG8fbs@L#s-WF zAZCKpvo3&`GYQBB0Vbd+OkkBkmKH!3RF|QF0Z8_YM#Mv3-lsZ1W~Zl%V~E6M-rkK| zhZRIz^8UQ+$Q@wLW|8@d`pxD`%iI$AZe&YI-E1y4odiv;*xmlRBl+FMD z|MzX${B@h#b)YWJ0*}aI1_r*vAk26?e?cbU|WfUWr~_YKelWo*@I! ze-qdlSb*{dM#ct=3m|5K)Uz&tm@^5;1_36ZDNJCML6#Ok7F3s^fdNSNj7G#mU*4xW zK;|S*7sn8Z%gG4>Ng-khNdjpBLSaURVSz!30YQObhC!x6X$EGdW{in!(*veom~bH= zyzNWZrY~Ezd@^c#xq92$8L?ZfCMQOf{#>aAm_ WsnyOf{X26W$fcgHelF{r5}E*1uZZUW literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/tnt_top.png b/datapacks/ReApplied/assets/ae2/textures/block/tnt_top.png new file mode 100644 index 0000000000000000000000000000000000000000..f5dfed98a5c1a72dbc8c3ed246421cdb07f82ce9 GIT binary patch literal 502 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFD_6|T!uD<2yhvG2TFPdkuHgI{ zbswO5&H|6fVg?4j!ywFfJby(BP;g6XglC$krxpVTki*I##mLIQ2xNHyu{4woa)<^a zGgzDn$TnnTV&DVPQ9zv8&H@(C0J1?K0f<5RVRS)aW?qS2UTTSgsh%MN&}S3a8CZbw z21dpPj0+%Ug4DAvfS5B0$OZu>peamXl|hykKo(S&p@9KN_KZfvLtoyfIzZ-ZPZ!4! ziOY-=81nx!FbXO%3n?fGGl&F;B(ph-I5UV8ixsnXvIj5-%v#P>T(#JML5M*~OGyA2 z)GQ8S>1>%Io(yKi997FR*}EBL&sx5Gm2vTG21a$os;a6*!VF@?V#}9%vO6%SxLb6V zIg}(b2v~6%FP^;8m_blVNqv#=G`P)ljA6vzJ|7oY9ei5)W#H&P=Il^Tjf1{Rj^5m;e?xe^}$7KDWO2rS*Hm|#X7$XujU zY5<88NQ;!TG_8}IeZI5hhT*`9#KId+@7?>o|GoFF@MiOS+w*&8qh0e=7>1T*EuR3C zbDM9rJ%6jeQ&@C=Mm^_wx4XFZ;Zwg4fb#@^X=?auH#Rm3-|jx^bjs~%v1LBq?tdIi z_G%50CW#QDY?-=2i-g#=t?T;5V&Qq-!C<<7DuY9>*zA;08`c^k48xP-V*pu}Wm(2p z%vh9VX^{|0>6NP&s0~M@T@r@jm(O3-)2a=PQY={_We%*j)`*%c@0jyM&5%oIlxmck zh5^8`ECRrBZ58u4UTrpK(`jB%b)4~dtWt@TD~$#LP_NeyheIWA8pgfa%eLnO=$(z; zoj*;aRH^mW8UUi!yxMH4-7Dd({?1^scmL*ts^e50XZdr;BkR0EnO$)K!6>t-8>jyE z{_E?PZ?!%DPKhuX0L-qqOpfPB$&b;m71x?zrWqyxo5J_fw=W(7h*67vaW z(>RTUB&r8RS7?dJ0P`nD?*p5uOVP_>jxo~=bD1vdlyPxM#W}4) z$0+?vM?wN1T*^qugYg7Fo`{4j$7z0}8~|KO0^lT=;lJ%S^}8}cY$9(`00000NkvXX Hu0mjf8ZinO literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/vibration_chamber_back.png b/datapacks/ReApplied/assets/ae2/textures/block/vibration_chamber_back.png new file mode 100644 index 0000000000000000000000000000000000000000..b438ffa2bb6c3573dc31f51d8e81336093ff4930 GIT binary patch literal 854 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47@ISlodZ0bofQI#^3yVNQh^fZ zr%tr=V0M&f-S6T$v7?pIRb*R$cJ7`HQ#863D0s3g7JHZHBeE&`hVO=rB00=ra=qb+ z$!piPu2tZWQ`lw})@7#j+Fn}GvE#u31Nr=CwrTeqJ}4wd<$X1XC_C5L=f36UkvU<% zeN5k)7$0fK+jVp0jfgp2j~`EKh{~@D5&JLAds6j!OM{wCPTJf#9~OOh5T&=e!rdZA z@3rT{;D>qcdKxwBOBSEd@49Tq9-4Ne)7`!0@S&((J-tR|(`CJP#P3kfyg5mJj&4!V z$6ZO3t=C_-Zsa1qDD_%OuQ;~R8{NuM6Q2f_w9A{oMW_S zJd#Ki<-YrU@xKS<+w)ef-#$a6%i-+g=X*T-ce#& z$-2Ax!qjPRTDjh@(|-Ts>|8IVQ4#H$jf}boFyt=akR{ E0F(Dc;s5{u literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/vibration_chamber_back_on.png b/datapacks/ReApplied/assets/ae2/textures/block/vibration_chamber_back_on.png new file mode 100644 index 0000000000000000000000000000000000000000..7633167d78362dff7ce41188deaa4ebc568b8792 GIT binary patch literal 888 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3-pI!a4piFfcY}Iy(n=Iy)-_6y>L7=A<$( zXq=xq(b9w2QKEIfi|fRWRz_EmZ2{W3dp1nb=vtuQ$+B4NU7nA~rtBNO8#apMFpJ6c zh9@SkUE8`=fkRGVn^{ ziyXbzo)3c`=DF)>)T}RAd_uqLvK@P9+Ko6eI zML{2TC23DKuYb2PP9kbkdXm@lo5w7KeGGfs9OsD|J$W(ls@PFgt=|*5{)OGQ*VS{5 z(Vp>0B2|?8?)Sz29+Yp-TeW`s43RE}vy-3iEp>V;RwHWj{_};;`}!8V64ZM$ss1ZN z+dWtPDO>t#Gww8OK0PTd=kQOpEjB5o?%$Vc%{&;w73cqCw$OzV-mjmJ-mCj&xvzOg ziD@P4?&=Fur@d+AdcRKl{oC`#b@eX$7{l|6nSAZ{wg6+rCcr1eb!FDQTeUw*N=h;^ zGD-ut{6F~k%Y@IK9v=2~P64(p{{H@v5fRs_qaQcroG1xf9_4T-+hX(q37&?t zt$1sJ=5Q8xL>4nJa0`PlBg3pY5L5h);ff2~^0%B<>8#4f@|OF zudkaKHz_!uRkkiI@EJ3cO5C~T2?bA7md;6E=y{5LLR^sd%B@?q*0XRd-MwrGc!1@MFwyDmGWiEp7Zy9AF8@Bzp~)6H9ym? s&k75y`(@;8I9?oN=9gpnBHh2$?(za*+1c44Q$XJGboFyt=akR{0MHj&Y{_(X4)An#RtPA{Ps_|nWnj=a zKXsz5$Ke2xR{zUhu3AlH0);06=DtaCmGKtoPFT1_G^*5~@};~a|B-a|?%PO+lsn^S#A8-rG53gw0H2eblh*cAAx9=gvQ? zBx+n44u>QjNlBADc_vBB_WE_(nwtIHpLG7@^R8m;X0)4VagOJ*+C7DNcen7K`+X!a zY+C4};zyd3rBv#k?0WQ3`uU{OOy_xK-~3`zI3q%*bmOI?YjU!V7#|S~y{s93qH;~q zy+><8U$42VUZ1#P!TOXPex`ja(O3Q7Zi5aeX##w8@*a$_P0q+LKnV2vXB>cC=kyum3jXAMq!kC!+*&gm#qIq3D5Yg zviIUeCHDgt%nAzcUYuh4pom?f)+i;oOx1pBfDY69^e?`Z2~Wf%B0fL6W_SE0^Ms|5 zy7w8_+Yh94Zn|E*XZQZ?jqptK^weVD0CHFvq!?Kl7=bJ= zAeM%*K~b;4$P5-|06bS|9msa?YPrH)*a8{#qSf5B6F$?FoV>ZVHE literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/block/vibration_chamber_front.png b/datapacks/ReApplied/assets/ae2/textures/block/vibration_chamber_front.png new file mode 100644 index 0000000000000000000000000000000000000000..51747a8f61acbd6e7a24a873a08b6c4195b543d6 GIT binary patch literal 856 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 literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/gui/sprites/small_scroller_disabled.png b/datapacks/ReApplied/assets/ae2/textures/gui/sprites/small_scroller_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..e6ca0133f633a5460adb6d9f23fe0e63034df1f7 GIT binary patch literal 436 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)V!3-qj@2mCzDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheiUB?$uHFIOdHHGUS1&$!Y?qCT!_%i%nwu(SP3wz}kI=U;1FA|4$WH`P z+$BMN!T;fa!ONfV6Hu75z$3Dlfr0M`2s2LA=92~rZb^;sO!M^AV&DLBSQ(@kSs56C zEH5CIhO$Af)nH@>i!%Y)hKx)Md_X!1h%?(+z~UJ|HVE*PGcvpYdJ0AtBxdH7=;fuB zD46OQG5{qeursg#)fpHW8!#?_m$Nv;eZ8x(p2rK(f0( zX9Y1Xv5W&UT|HeKLnOj|J01BBIB+mA-d*+kKfAcTuV;c0qqwxbsM3VObDb`Bp*Pa3~1um&0K>FVdQ&MBb@0GeiK A?*IS* literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/guis/background.png b/datapacks/ReApplied/assets/ae2/textures/guis/background.png new file mode 100644 index 0000000000000000000000000000000000000000..87e6571dcefcbd49cc182b2e45f9b8c91d6a1e9a GIT binary patch literal 775 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5D>38$lZxy-8q?;Kn_c~qpu?a z!^VE@KZ&eBzG8q+h^u#icV2$l$z!{oKD}b&;;?@8;^wA`S=0KW<0JGf%z&!i8$A02 zq_|6h{DS|(0fU!6BS@IDz$3Dlfr0M`2s2LA=92~rZb^;sO!M^AV&DLBSQ(@kS;0>8 z0`jDxY@llyG#Ht|;!HrcAtMt5ACQg$;>>myuy_WL4FWvnj0`V;o`TT@iJ5sNdU>fO z3Z{C73_ytq>$Nv;eZ8x(p2rK(f0( zX9Y1Xv5W%-+6+$@$B>G+w-*i;9%2w+apY`vd?LT$;MPc=^V#n!Yxne*%>RD=w*R)< zl``Lt_oejzF8p6>x5>7CKg0F{kWmZ?){%}oX@5ZZ zj`)MGRdX-et*>W%_t1{vdgU9AvN_j3?mHFx-u~@O>EDS|30 Bu`vJu literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/guis/checkbox.png b/datapacks/ReApplied/assets/ae2/textures/guis/checkbox.png new file mode 100644 index 0000000000000000000000000000000000000000..79b6a81825f6583f19fbe299be3e0ef335de801c GIT binary patch literal 592 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1^2Ka=y+PFA)2Y5TWm-welTEBYn$z!{w9C>~C(a)z(uYCCYOW(q5*0erj z?cjn1H-I|MPh7YXNb#2h`33(+0Ss5}%vcDN;w5`Y+_ zA4V4>X6BXX<)xM=nCcla0DV7!oq+`?Z(w9>z_Deb1)%9U*wTpG%dfm#hoD#H_r&`P<1iWsz0yoNJ+i1pY_hfX;XG6>k7_Ey>VZ~Vz;mM;eUPYKUn`a w-+bJ2SnbcV%p+fo^a>asGl?5OsmV>(;!GxPDBQtPSOxN^r>mdKI;Vst0At0!DF6Tf literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/guis/crafting.png b/datapacks/ReApplied/assets/ae2/textures/guis/crafting.png new file mode 100644 index 0000000000000000000000000000000000000000..ab3a66aa614cca63ffccc0843dfd944da42305c1 GIT binary patch literal 1986 zcmZux2{>En8a^jE(L_;N(^lMeA{hH_FiNE)h!T--3AKz7MUAEQO0QJ4mee-3QdF0z zHEm^D2AN7NQ5{BGYTObvkJ7YPXpLHmniFmBbLV;P|2+TmE$92*?>+zjo|8?bILXUm zWdQ(?Cp!~q006=+2%wR$Inm_f2?wd+4h~eZg9DCwGCDLok_iCXLnVbndPEQ9KD%kB zo-BKYk84*%7-r+h1SKk!geqOLcHt?HMPiCAl zhYdRqMfTvot>==*%0Arh|FS7W&do=+mj3JB;)NBflH{iouAZ#SrbJi#1*NV&NIe7d zq_1EMXS+14cj!abE>^F5QJD{^iK28?^GV3rJUd(qsa zqUZDR<+yz#P2EoYEzg%D*T4HxcVWuhJ8x*AYlbAWZy3dl$9-*R z0>Iq`I{*l-Gd49d25UZIZf$M10@!)UzKo^PSpb06$;2a`$pMneKN7DRD>^pc4HHR5 zSJIvhhS>E2%i69MJrnDhA=R+x+Wm|cFH9`oGf2(dLr>@<##-WE4fY1{~Zp;Y7j%-FyJVc*o%osFduzU-#+qwwdtP6y*HJ2-(IxC{zFGINOU>w0DO?et*Yo` zS3>8kG^;`IvduP3{IP)T)FP=>@}HAMDAw>rQkpf*X}HVm7?Dj<)Kw#`ApUuNOtb;R zMNqeY{fl~?S$xFCgVmi&=Te`m2S&?`s0A%j?xxd2@$FVjWiF9Do%bj#o62GL(^d+z z3@I2oiJRqL+d3e>_vx++$skw{dfA-)S5S{0+F35+H=Crx_JQ^S?wJUvX-tVmyvSBX zmY}ILchl5ZW#j#IM1h8zo*MJ3lWoa)v#4Y4uQRpy?LgHDd%~i;hxKGagFJ`{-^`WW z|2mp3aNBf~{h8Z|1+T?N9&D5{y?*_jr4`cA6OSt{3r5ur5aZwGd*TJLPGLj?#71ei z`aFv^k=t1fY<6kg!A~(1sV;(?18Ux~7^;{1RgS-oM$n?i%rZ&LfX{hGBE4=PcN2-G zx_MXZG1e89u1DmwWnpg`BOjv26h7U;`sCsJC)6_8(=Q&IUt+#9iwi{~maIy3AK<3q zEK^Je6B+9Rl`8E;2Oa4ctr>}9())KEc!~>=6f1xAnJ@HNv5rWn9%6+@=GwinJp%>%*Z*xNS)|@Uob0PJRwStXuzX8Ea;v($l>!<%0S*o4S5(dDv z#FKn{IcfxyV$Mi}B=&N^4%7LC*B>W}zP}m5zhc1o#A>@{`{+LMB-|4nyX71TCcu2| z7~p=TGlxoS8H|*U$5lgGx&FxccbC|I)*t+!Dapo!VIlFDKKfBJL$T(&pKye}&?D@; k!F1rjB@}3F@o;TppKqECBCWT~UiwoclPJWS_Ce`?0TR?9h5!Hn literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/guis/pattern_modes.png b/datapacks/ReApplied/assets/ae2/textures/guis/pattern_modes.png new file mode 100644 index 0000000000000000000000000000000000000000..a88a830e21065ef9bc757c0e50211ff15b086f78 GIT binary patch literal 1911 zcmcIkYg7~07CtjfFq4RvgjW=(fn*g$#Y9UHp%Na3go|7Z;c0<{cSU(9RaQZmDugIP z1GN}|8Y);z6|^8?X_XO$g4%+jToqRvTZy0|v8|7Cqq%3IuGJs+?>%eI+27vh+uxjh z=FHh084+s3Sik@P*hnQIG5`<=5kR+sCi_^NobtBHLW4m2PcBo?!7>Ba1p@HRCrp!) z2K}{>;qtXZ13eQH*K%?*cI_;zud6Y8e{ z$iw~COIK$r!`)n+X1|>|rEX6TS3;$+fTHctI2FhuqF~DZXuu#cBtZ(ECyCz*0Mm}@ z2&ix5z~IUBIBAAd>Ivx3p@9Vm%~DDj^qgN~SRGh|SXtsI#6koG^Po+D{eue363>E| zYSQ@#n1q|~#^xzM$SLs3NiX1fdkF!Y(98iC)uafUC=x7^z!rH663(cuk*%%f)*(wUqy;y-$lw=bihvL^-HJ z4I6FFiW$LUEZg_^!lOmED(PUn^n={V&-ZLxn z%jXLg&%G%ojnR0N9hLGYI#$H9Z!_m(nk6ST-A&cj>$6(~e7eN(Q?J~VvTgIm8eRqB z9#=)qeXx!y;VLt3Cch9{$l(>YG7yu>!yi zLmJ(3sP&rcfh4|zH`!5nZ-(mHKve6f0gO<4qbc=rEvvfLEx@dfCABYprmue(f9Kk= z%hOX&Zy6mq)|ZAqp+(vp%X`+9_Ux97Bt<19p8DQ-K5Y-LRX^_=eALxStO+hDaVOip zJ3RHHZgxw4uK^3O?m$jC*si#H&xv{Z^n{;PJQ8em6F4&`VQ4>YJo@bOp(wxiKg$Vz zmmEU}HM(Rj_t?+*2kb_i2d(3x!3*uA{$oEZNwLlzvJF=mVU;hdKxxK zJK4IG*e3`|B?JhUFLG3wPS9BtW{CTkd8^ZceQ_8&ZBMflvH@x~Eg# anU}QOjI5TliEF2+`(C;>BBVV?vGc#I>+RV9 literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/guis/states.png b/datapacks/ReApplied/assets/ae2/textures/guis/states.png new file mode 100644 index 0000000000000000000000000000000000000000..abcf756aa22184613b3b9358d40a43afa03a2957 GIT binary patch literal 16310 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 a%O8e)2ibk^Eq)IQItEWyKbLh*2~7ZleVTIs literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/blank_pattern.png b/datapacks/ReApplied/assets/ae2/textures/item/blank_pattern.png new file mode 100644 index 0000000000000000000000000000000000000000..d3f6f29388057abe88d482b592a5a5931ed63216 GIT binary patch literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}r0G|-ooZOVq$lwKYrnI(H?b@g|9^Y? z_GvGlB%qENeEalo z5nOuCk&juChuOh;p~$YBfB)~4GVKjn#oyrW#qvn~KjVXa-#KSgc0MrKCd4w!G|Wrj zOL#qh>zS1;KRq`tlVCM_zVv(4={xRD^XpQXIUP5Y=SR)Z?AV5#vm2j;@+Eb5Lk7c)I$ztaD0e0svp&dKmx! literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/calculation_processor.png b/datapacks/ReApplied/assets/ae2/textures/item/calculation_processor.png new file mode 100644 index 0000000000000000000000000000000000000000..b3110aa407af275527ffe4171f8eca1a5e2a886c GIT binary patch literal 521 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}Z0G|+7@7V6JlI3Tf{CM~2S2Qz&JqyFqv+q;;kNsz0c+Seuxc>eWPR4C~ zjP@=CMGOq4ObjMEA-X`l3=D@J3;O{n;gTS~;QttaVN>lL4xlt=fk$L90|Vb-5N14{ zzaj-FxFt2hGtJXeivgs9l|hP;m4Ok+@&aOMC>!J(4Mt|LI1`X<$jHRN2c)BbIJ2Dv zES>>mgFpfhgY?7bg2c?c61}|C5(QH|Lk3`IOkihV0m>T~85=MzfS3tV&$<9&&Lkik z1ek!PFo9JDSy}*DP+f)w1|Zop8W9hDd7tV4nN^-Hjv*SsrM-@PhYdJb-m>K67%chs zKbc#lT`TB&QyPo+&Gml-mpXCz*6uDmTew7O;xm@8p|u zaPRTHncNO+>-H_KDnB6bwfd^%?^Ap#i5xj^V{Rrk^Dy_9F1_*XV|-`jCzX%kHkF-w Y_kU^O&7F5Fehzopr069gHVgLXD literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/calculation_processor_press.png b/datapacks/ReApplied/assets/ae2/textures/item/calculation_processor_press.png new file mode 100644 index 0000000000000000000000000000000000000000..4063c3290428d6da9a65865690fdbd5a84eb44cd GIT binary patch literal 479 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}H0G|-ou#)B8vEBAA1!tc8c=zd-iB3pr|FNZK-#4zm4^-lMny(&6ag_x5 z1^P@RF1u>s=(h?yY!SQkLdnFM5m029zuCa}sNOA8{&803^FzxsC={KU_mTb}6hOP~ADid+0g?0Y8b$gR0> z=@DatqYj76QAy70%;lXN+8+*{QFtPgNS%G}l0G|-ofDr%3k1roRw9VelX;OdN%BAxREX|7;7^ZMCZsTKI9moHimEk`F z!|(e6zrSyv)GK0mL zfNVoXCI&tr9R5`Y+_A4V4>X6BXX<)xM=nCcla07GX2I|B<)-oVJ% zfN=rDOptok1rT#40ofqH1T=*StTM>b0?2~uGBhv%$)3@Oc<9UfR0qiH^>lFz(FoQ( z&naXZYrMXlx_j!eJES9f$lQ~PRHb-S?i8H%lc`c8u%zNS%G}l0G|-ofDr%3k1roRw9VelX;OdN%BAxREX|7;7^ZMCZsTKI9moHimEk`F z!|(e6zrSyv)GK0mL zfNVoXCI&tr9R5`Y+_A4V4>X6BXX<)xM=nCcla07GX2I|B<)-oVJ% zfN=rDOptok1rT#40ofqH1T=*StTM>b0?2~uGBhv%$)3@Oc<9UfR0qiH^>lFz(FoQ( z-zjuhfrBOB5R<3R?HJwv|5wJEoU8bdRvNIWt>6oDf9=d=p7PS&LAw?<&)99(#>aOg znKeOyNmVQGz^#O|b$m?Bp^^`HK5+Tmy~`BXD01fXt_(@$wWf@(-)>!-T2WtSr@blY z#ic%D)pf6zZJhV<@7p&fkL21u-#H#{&=bA&tYy#Hw6uSWvqL!@p08v&1ahROtDnm{ Hr-UW|xp=5z literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/card_energy.png b/datapacks/ReApplied/assets/ae2/textures/item/card_energy.png new file mode 100644 index 0000000000000000000000000000000000000000..84178a130e58206b732f847ff4f903dec3ef6c7c GIT binary patch literal 566 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}l0G|-ofDnIsH>bysFHh=kJ9=o_%BAxvEAtI3&6CsOiWnHCa56H?n){rU z;XebzHa^CxKOg@8|Ig6cVRHQ{LvmWw+dHR#Tn2^>$D`_jlz2&yUocPs7Qpb#;aMC| z31@*vWHAE+-(e7DJf6QI1t_>BHNrE^(^HFq1IS@zkYZ$IU<9(ffLI#J2Ki2dkr^z` z1Y{dBGBNN0=_nx1Y-a(BX8_qCkO0IW{V=*9F*C13FE6!3!Bo$X0T?bP0l+XkKNvg1T literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/card_equal_distribution.png b/datapacks/ReApplied/assets/ae2/textures/item/card_equal_distribution.png new file mode 100644 index 0000000000000000000000000000000000000000..6574b36f1aa886987529d26d6ee9cad185bb5c06 GIT binary patch literal 563 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}l0G|-ofDnIsH>bysFHh=kJ9=o_%BAxvEAtI3&6CsOiWnHCa56H?n){rU z;XebzHa^CxKOg@8|Ig6cVRHQ{LvmWw+dHR#Tn2^>$D`_jlz2&yUocPs7Qpb#;aMC| z31@*vWHAGSo)QQ%u6lHL5>RkUYJ_K+r>7PJ2av z3CK2NWMbe0(osO1+0FtM&j7MP;QnM5h8MseJB*4rHwY~=&ROM}^3+(QDOdS0%c2_f z2lJLDtx7YCWXf1u;2(5EIAX0%k-MRQgR+K#5m&^d18?*fEVW%U_0TerFZWn=A63Yt z8`;E*-)2(xw4VLtyX}!|-d)eCk3X-zxUyQO?f1TG@fIeM>$jZUEb+Y0@EHFgeoo7u SE4SVOxz*Fv&t;ucLK6V^+pzrr literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/card_fuzzy.png b/datapacks/ReApplied/assets/ae2/textures/item/card_fuzzy.png new file mode 100644 index 0000000000000000000000000000000000000000..1099f245ac2e4be181873c6e9ed6ea9c0bf00cc3 GIT binary patch literal 562 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}l0G|-ofDnIsH>bysFHh=kJ9=o_%BAxvEAtI3&6CsOiWnHCa56H?n){rU z;XebzHa^CxKOg@8|Ig6cVRHQ{LvmWw+dHR#Tn2^>$D`_jlz2&yUocPs7Qpb#;aMC| z31@*vWHAE+-(e7DJf6QI1t_>BHNrE^(^HFq1IS@zkYZ$IU<9(ffLI#J2Ki2dkr^z` z1Y{dBGBNN0=_nx1Y-a(BX8_qCkO0IW{V=*9F*C13FE6!3!Bo$X0T?kg2I+`yX7f4{`dA@DstP@?&(^_&DCpKw(W}LG* zBUd z*R`J`A1t}D+3UAW?4l_t*UyyK)SFxPo=B~jSN)gubVbj$ozq+we82a9!zxZ0ONobD PK~D8_^>bP0l+XkK2uZN; literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/card_inverter.png b/datapacks/ReApplied/assets/ae2/textures/item/card_inverter.png new file mode 100644 index 0000000000000000000000000000000000000000..4c2dd991ce2845952005bd92b7017715dfc739b2 GIT binary patch literal 562 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}l0G|-ofDnIsH>bysFHh=kJ9=o_%BAxREX^w`^OMu!iWnHCa56H?n){rU z;XebzHa^CxKOg@8|Ig6cVRHQ{LvmWw+dHR#Tn2`)1^*WSDe;mZzhIyOEP&ye!?QS` z63zmT$YKTtzQZ8Qcszea3Q%xMYJ_K+r>7PJ2av z3CK2NWMbe0(osO1+0FtM&j7MPAOVO$`eAfIVrE{6US4X6f~lS%12A+Zursg#vp>5|9l7Oh8kZz$$|*Er2YjE<*zYkn9NS%G}l0G|-ofDr%3k1roRw9VelX;OdN%BAxREX|7;7^ZMCZsTKI9moHimEk`F z!|(e6zrSyv)GK0mL zfNVoXCI&tr9R5`Y+_A4V4>X6BXX<)xM=nCcla07GX2I|B<)-oVJ% zfN=rDOptok1rT#40ofqH1T=*StTM>b0?2~uGBhv%$)3@Oc<9UfR0qhM;OXKRq7kgy z&&_w(fWujn?bfo}zi#jNADBK#sr7+6dq+yELDj)c%QI(vNmSPKOn>2UCRVMG*h&R19I(n@;;mr{*3S%V6FGBw*NSiJE=36kSeY)m*dV2K4 zsVybP0l+XkK<-)6y literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/card_speed.png b/datapacks/ReApplied/assets/ae2/textures/item/card_speed.png new file mode 100644 index 0000000000000000000000000000000000000000..cae2a3d623b8cb12d9847e8824cf7ee733b4374e GIT binary patch literal 563 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}l0G|-ofDnIsH>bysFHh=kJ9=o_%BAxREX^w`^OMu!iWnHCa56H?n){rU z;XebzHa^CxKOg@8|Ig6cVRHQ{LvmWw+dHR#Tn2`)1^*WSDe;mZzhIyOEP&ye!?QS` z63zmT$YKTtzQZ8Qcszea3Q%xMYJ_K+r>7PJ2av z3CK2NWMbe0(osO1+0FtM&j7MPAOVO$`eAfIVrE{6US4X6f~lS%12A+Zursg#vp>5|9l7Oh8kZz$$|*Er2YjE<*zYkn9-o%G-_?=yZVs&hD6SM1s2JxED?-{Epu0?ZF*!WnRq*6hQg^@#@~Ci zD;czEtPo(a6pZ&L$e@fxXO_tMK6M78)t^dO*l2y>G P4sxrftDnm{r-UW|ng6Y| literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/card_void.png b/datapacks/ReApplied/assets/ae2/textures/item/card_void.png new file mode 100644 index 0000000000000000000000000000000000000000..aece450477ba4965af447cc73e5db51e2ad2555e GIT binary patch literal 557 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}l0G|-ofDr%3k1roRw9VelX;OdN%BAxREX|7;7^ZMCZsTKI9moHimEk`F z!|(e6zrSyv!m!08CJ5{v@x6k|v1#Ny*RZm&AxlR10JD!{XxxKyE_p2pk+)Z6+FYm>FW9?x+p*fizc+u5 zn&`IB+y0!u{&lmDeQkQ5pT6|ncau5K?fxHfzig3mGv{)IhszQ9`Oi5$tG#aB0lCuC L)z4*}Q$iB}K)$Vz literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/cell_component_16k.png b/datapacks/ReApplied/assets/ae2/textures/item/cell_component_16k.png new file mode 100644 index 0000000000000000000000000000000000000000..9b21aee3b2ad2b22f714ecb49cd658e91c21cac0 GIT binary patch literal 555 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|~0G|+7|CC9N?j>>|R$3V@Q;xhYSa2iuKzh>ce76Y!hadg?@cEaqc5r0P zCQ*0eQ~yDr>dyy@THmO*cTBEd4OtooG$!YjNk5PhD+%%o1}i})7#J@dcmhO>_ z%)r2R7=#&*=dVZs3T{b_@J#dc)MDTOa#$Ip7+Dz@fh;c|mWHxHKGR@i28%NR*@lcv z417R33Wzh?S-|2MKsE>@05M2Ej4nvb%q!8$OD$0_)iY!OhRg(Z1{R>afswHR;{u48 zAoZ*ZAm&U0vO$0eXbKZpWss!>kOkFcXkY-6J);rv(3khA4v;y))5S4FBiQzQBww=u z56gwZuuXy)AOEhu)w$4PqRqU18_88%9iQ)6pNRV5#53tro4}2Pw-bHiCi4bl#R|4I z_KI$uazm;83tQ*jYv)upDr{pszTwh7?-#knA3T{Z&td;MCE^LsmSn%n{$kJS_w}E% z&-;J%x?o`rJ;&%vHabk65xdvQL{S2y&;VtDnm{ Hr-UW|?HRQ2 literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/cell_component_1k.png b/datapacks/ReApplied/assets/ae2/textures/item/cell_component_1k.png new file mode 100644 index 0000000000000000000000000000000000000000..95a5442d5fa0496f7038c8450ddb77ff431940b5 GIT binary patch literal 534 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}B0G|-oDS8eyvgWD$2G7DHek3G>vTL385BZ;+?VmEq(Y<7~qwka>uL~C3 zIQ;16htI!^wSyyTHUYK9GNv{FDWQ@ezu^DqfZ@^p{X#%l&H|6fVg?4j!ywFfJby(B zP;g6XglC$krxpVTki*I##mLIQ2xNHyu{4wo@`(l`GgzDn$TnnTV&DVPQ9zv8&H@(C z0J1?K0f<5RVRS)aW?qS2UTTSgsh%MNFeE0hGq3>V4UCKp7#Bdy1gU3T05NA0kPQM% zKvS5&DuXO7fGnskLjwbl>=})ShrYZ|b%4xnPZ!4!jo{dGk$fzQ94rB1t_7J-|4oaVbNb#?Iv*SVdy9 zRd`=dkzMh+@>oQ6-maxnKCEe(<&g0C$mHboWM7AklGm-umy6HP^*S%M^TEfXd1=xv pdF|KbmV3Pa(DeM=6(oh1MO literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/cell_component_256k.png b/datapacks/ReApplied/assets/ae2/textures/item/cell_component_256k.png new file mode 100644 index 0000000000000000000000000000000000000000..6f04a84c30450c199f82dfea593150292b4690d8 GIT binary patch literal 923 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47@IPkodZ0bofQI#^3yVNQh^fZ zr%tr=V0M&f-G4;*qXv&g(#F;(NdeJ~S2Q{n2rP11B=#=PM`Y9N4bmGoisZ0z_a9rm zVdJ%Hhr$F{_yxSRwOyqrex2VtLBXXUVMf3CXF211g^CG=y4yFg>sY@(a!e`8#&Gpj zn_ySd-jovC-X+Jw}dzJgO_}iJ9OHb#d_Y|siE=t^R$Vl>2OX^nF!p@U*OM3R7{qBA=wIf?H zSY~m`#tXIfulVcAUoZPr#qIf3a7ERpJ=^_O+-zF!d;Yi0mp$v1S5&lc?|yM!?!bfH zFJ`;0O_rZ^?ctkED|(jn{doH=(Ug^FhZ&CB9e1U7gNbw8s3309SIX*q&Ub6jqhFNnN zT08txCPlryV{-kfqkGAeBd@Fed^r5*=c)hyBWpGlEV%LE^RNH^|8s2H!;qY2tR1|w z^h=oeqPK1Tuhjisn*0K2`IOBO!M^AV&DLBSQ(@kSs56CEH5CIhO$9POM{UaEY1XE8!|F6@B!&4AkJ)O z0gGn<*&yI4$;j{mm;zyRL1JcJiC$i6iGrz~Ap=nN1a<}%pgIF1V*|zo5HtV(2Ww^U zDyWtI{N8#wkhjv)#W6%9Shqh~?63j{E3f{+RU0?@zWQe#8cRh4P52J*AC8)vk~KGfL$d5)Nz=s{Vl ziaz6dXYu)f>pv>1f5oE9#4sU#NS%G}B0G|+7|CC9N?j;vzx*lk)}T~A1#gg@cEaq zcJP}+{*g7C<^~w9O*a8*-7eBu0HlOUg8YL2qXULV`}Ye0WjPBxB8wRq_zr_G4(t;iJ5sNdU>fO3Z{C748V|>z|Oz|ls7OkHeg%;F%zVobpgbjNkBFT zFab?r0;>$Nv;eZ8x(p2rK(c2vA|CqkKGgv-n>}3|Lo|Y2&v$YiQQ&dCD3NTMclH1O zo6mNhVR5n16<=D}-XUWaedb>EB!MGG8s;_dAj>(|FVzh1uX7wdL=H#zpQ`YmifzVF;B9=`wYL}UFK i%lj?YyWTfDGeNS%G}-0G|+7OTl@Y}><-oCY+{LNsO{kdiD3@(TvbU?CV7 zO}MrL6>%1LL>4nJ@ErzW#^d=bQh+QC z7@5K1OhC3FBNGE3kd6Z4%yt&Acm|LS0trA2(hs8x5;OBk^zu?m6ioFD8GxZQft`T` zC~sh7Y{0kxVkSsE>jH>5lYndxU;>)L1XdYjX#r$Gbr~8MfMm~TL_GB6eX0XwF7R}5 z4ABVI?T;2}Rp4=6D7s`%VBoj?m!x;3w0Tz9d8|G*<O=n;=2#e&-DG)k zx97{&9WxHBmGvX}guB)z3Es@KZycu6~dtaK>KI>r#eeZe{+ zDVx#nkoey3-~YCpi`Km2rL{MH{sOVzi^NPdYj>AzXldA&TU=VU&MbNQ+s8ZBK9=~* gl>9>a5=ZhM2GbKf>83YN{sg(()78&qol`;+01x-SNdN!< literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/certus_quartz_axe.png b/datapacks/ReApplied/assets/ae2/textures/item/certus_quartz_axe.png new file mode 100644 index 0000000000000000000000000000000000000000..1b3ac6f028d731686edd744aac057fce716ee037 GIT binary patch literal 476 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|&0G|-o$eK-uAN`zi4nJ@ErzW#^d=bQh$Nv;eZ8x(p2rK(c2v zA|CqkKGgv-Gd*1#Lo|YY`=j{|C~&Y;YKFb5zrSw5+Ru$|96XlX5IA8jth70!Z0gOP z+xlAnn~t1W()mq!L&KRj^A9+dhs+RJBDHvT!DlP3W5$Q2!?sD(F4`p@Xz97}8^3qV nXVs2%KZT;^TRA-V;(mmi{RoFA%k~YgKo0P9^>bP0l+XkK9ut5G literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/certus_quartz_crystal.png b/datapacks/ReApplied/assets/ae2/textures/item/certus_quartz_crystal.png new file mode 100644 index 0000000000000000000000000000000000000000..81efe0ea42f5166a7c1a5dbd35a776458b52bb13 GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}%0G|+7|CC9N?j;2aZcI7y`tYNlA3pyw)((!W*#wk#yyagDq&Q20{DS{O z0Yk8Vg%C)vz$3Dlfr0NZ2s0kfUy%Y7jPi7G4ABUVJ?klUz=4G&U=_!A`$Cnfs@$XI zp8pgV%}r@$konX+!P`!t*qm=>KubC^_W|KGVQ-o&8q60ksIzcAv5-pSyO}TgP)>^5 n>&|fpXRVumIal5)ea6iZ$a-m!wTx00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj58&FJCMOl2ZPh^tA;`x-s>p@3!@bmg`px84jQvd(} z`@Mv{00009bW%=J|NsC0|NsC008>wR5&!@I32;bRa{vGi!TWnKNT3fs1o z-Jeq^+i{@K5kcM0a-gi+W??Jqxu9(8vC&HdtYtwy*Ro1jk7F(8vYqF?Ef$tz=M&nx zt{1|7775$Qm`u&I*S0gjwlHi6kBd%)IgaJZgPBdLqp|#h- zAK{@;>9UriAWS@T%fMsV#AB&EPVV)z0}ocGb#xwEF6_7PAl#V;chF__2azG3e4Kck z0#weyA08uwjZPbL@+WyPEJ!6JkFyKGW8qOGF-ia4ABA;K{t%v0=6pGtKP(LSLNG(V zoJ{3u2Y-Yx_@jpZ*ZgrDBM(+F^LX;dJzoyiIPlPS+(6spegl$I>?&te<#FH$=H$=i z?+#~OtmD%C;!&zUSQzQWIB|<5x_^(y*etwhn8qUwGx7*P=?|?b01fpt3T*R7CQ#;! zAAKn}zt>Z+-|DFhBY#vo_^#0(VVH>rhPm;`k6mc(weXsU9@2Rtlw~~{4?SD#(0PQg zHN*6JY92Ow=YbwPgis^&{e__5A%8HYgvau$cxaWM^+)H?@}>JjOxb)W9^4`xnJ==# zz(e)p&-kOPc~ynhUJKY(d!Abej+GDQp|2H5SvwE%+Dfe-Ec~Ng?W^MwP)%%g5NKf+`3hj`@i z>pC&wF`hp(DQg>q&81DBL*VIh5DEY(JQmgz7x7PT7M{w50`Z8n=;82BW>fgC4i29y zDLG?a=+f9fa2XLF2I~+tVLDpm9=2Vd1$J+%EL#4+$DK?ZElN z0#fw{_iH8@$O6Y)ZUd68Eg+E|5q}D@dt6kZwb#OvKeU9-LoT-^dC=yeBbEKZ)9Z$j zKk8|VOZ!95&i(*HY_HWH+~V|T{y;(C_|bO{aKmfdJ(yNod-n&GfGL@?3NC&+;L=if z?C+YUz2gQS=e&eBN2{Y@5o+knqy?lyT*dezQ z3y(Oj8&EFn^>IUU^T~pFa92y9;K3BM6u!@+`lE(l?%Qjvry2ghBe#>}!HFxj69VZx zG{$2cc*Hu^Px6pqSgwV7{L=C*n8)q-^%r>Xl;AAD4>^zw@Ye2p+9`*7Q&euDJDeRy(Vpwby&y;!c!IqGQ@D7vUEP zdD>zz?Z*s^Y%C(Gw>{Bn9c z{oJt!4?@+~@YuChro9xo?4$}Tq5j;#U^RU6P_ODBB+A9$ASu@kkifnJ=-WJOn5lfC zf5;==*52cxWr&B)##)DYFjC8?;4x+t(l6w}0IzxIQP$&^HYrjcBP9}r{ck*&w9%4?rC{htNy6_i(lWwgHK)2lbSW$wNPPbRHCGA|HA9m%*6_liYdi-_Dn@S$Gpr;~^RV z>O3p}sPRx)5TND{4FL-r;P+d;Q`21@6dwKnv^Z_Kme9**JFkNSnhb;75(tOsQRyYx z0`EM2cFdImod7iRfW{B=@TC3q9v)#Bf(kp-g2J64L_skC34CY6ct_IUgUVTqpYl8sp6 P00000NkvXXu0mjfD=4z6 literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/certus_quartz_crystal_charged.png.mcmeta b/datapacks/ReApplied/assets/ae2/textures/item/certus_quartz_crystal_charged.png.mcmeta new file mode 100644 index 0000000..7e77c64 --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/textures/item/certus_quartz_crystal_charged.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} \ No newline at end of file diff --git a/datapacks/ReApplied/assets/ae2/textures/item/certus_quartz_cutting_knife.png b/datapacks/ReApplied/assets/ae2/textures/item/certus_quartz_cutting_knife.png new file mode 100644 index 0000000000000000000000000000000000000000..2f97b788047391d663e848a1f2f98afacef74202 GIT binary patch literal 457 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|&0G|-o$eK-uAN}-Cne^fFuPH}fJGz$?EV!W|$L(n*n&BtcnXV30*c~C- z2c&pPg8YL2BLIWY{d4Dl;+zE@k;M!Qe1}1p@p%4<6rkXi)CkWsPfsld4j_k>L5h); zff2~^0%B<>8{}dQMrN=$6Oe7l$i%=0q@#d1vz-Mjo&jWoKmrhh^uy?a#LT=By}Z;C z1yemk2B428ursg#vp>5|9l7Oh8kZz$$|*Er2YjE<*zYkn9)6Af#dKO?wqtMgk)~x=xzDVrI%pB*FY){`^S0kC3A_Ch&h}^JZTO>c>@SlNS%G}f0G|-of(17YKl=IM^RLL7O;e7%_D`7vlqp#*5Cx>zOM?7@|APU8lsB^* zP>8d@BeIx*f$uN~Gak=hkpdLlk{aQe=IN=$zyaj2GDtD9GB5&JUO+4jWrJL&!N?32 zX9BVf8JQUPfHcUO%yt&Acm|LS0trA2(hs8x5;OBk^zu?m6ioFD8GycKdKmdsb76Ht9--eGn;G9FS~u$`O<+sZX9PaB9<`xuVw9b zWRNbMq}B4`jew)-?`3xaX3EZFRXNK1KPKQS<4jSO^MSvPg@f$!boFyt=akR{08X}O A_5c6? literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/certus_quartz_hoe.png b/datapacks/ReApplied/assets/ae2/textures/item/certus_quartz_hoe.png new file mode 100644 index 0000000000000000000000000000000000000000..c90248c251bc882765f2b63bc9b137051742df0a GIT binary patch literal 470 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|&0G|-o$eK<5DU%LA`uXAWuYv_PrW|?g=w9M!CYs?V*O{)aA;%3=nCRYI z4WxKVg8YL2BLIWY{d4Dl;+zE@k;M!Qe1}1p@p%4<6rkXi)CkWsPfsld4j_k>L5h); zff2~^0%B<>8{}dQMrN=$6Oe7l$i%=0q@#d1vz-Mjo&jWoKmrhh^uy?a#LT=By}Z;C z1yemk2B428ursg#vp>5|9l7Oh8kZz$$|*Er2YjE<*zYkn9cTc(QNP3zfZYMCxxR4-Vc fugLiGSKn{mi61zHjw`;A1X=Cr>gTe~DWM4f06lla literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/certus_quartz_pickaxe.png b/datapacks/ReApplied/assets/ae2/textures/item/certus_quartz_pickaxe.png new file mode 100644 index 0000000000000000000000000000000000000000..b936033874e2cda11e75563c572f5f46ea40f34e GIT binary patch literal 470 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|&0G|-o$eK-4j=cWx`Pbn`KmAiC6)d=s;V0*5CaNLF-I=cL=w1R;7^kh- z4WxKVg8YL2BLIWY{d4Dl;+zE@k;M!Qe1}1p@p%4<6rkXi)CkWsPfsld4j_k>L5h); zff2~^0%B<>8{}dQMrN=$6Oe7l$i%=0q@#d1vz-Mjo&jWoKmrhh^uy?a#LT=By}Z;C z1yemk2B428ursg#vp>5|9l7Oh8kZz$$|*Er2YjE<*zYkn9NS%G|&0G|-o$eK-uAN~CB`PY;qul-Xd6)d>nX(rm4uC5`+?dV>T;U@=FxTsf) z2T1Xh1o;L3M*s$)`{&L9#W@Q+B8wRq_zr_G4(t;iJ5sNdU>fO z3Z{C73_u@GU}sFsm6gZfbAFRLge;@0XN3YkMaAE#i$bI0FYCuN;r%1y| zdEJ(5R*#?qzMc!$7N?%NS%G}@0G|-o$eK-uAN`zin=w4#19qef)n&BtcnXaxO#|>0l zUZ4~KqpeamXl|hykKo(S&p@9KN z_KZfvLtoyfIzVQor;B5VMsR4ax7Yy%4rXSKFNgo0j}C~=H8c9GqOfg&(Q~ej2(!jz zOJ+MfUM4nw!m^|D1y0G&bMDd-V=L8Dj68ecVC_+lNyYV?Vp9(;z9On$UO1<3XTYJp p*L|r9W%qvm5_NS%G|s0G|-of(17YKl(Z4$m__OO&>o0a&#~8PniUioY}a40g&P-3Gxg64*?AK zn)gNm#W)K*B8wRq_zr_G4(t;iJ5sNdU>fO3Z{C73_u@FU}sb0?2~uGBhv%$)3@Oc<9UfR0qh6^K@|x z(Fl(1p=fS?83{1OOXYZR`L5 literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/crafting_pattern.png b/datapacks/ReApplied/assets/ae2/textures/item/crafting_pattern.png new file mode 100644 index 0000000000000000000000000000000000000000..114a84313e54d31a5b16a78f10eb4f8ceed98820 GIT binary patch literal 538 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|~0G|-ooZOVq$lwKYrnI(H&5JZzmuXXMsjzFynr?3`Z*7Uqk3TnUS~vat z(agT7m%jY}|Nrgn+ozp8UE}Wj_wq@~`u`tj%qkm`1Ry0=666;QRDlT?7%v@o0#w0S z;1OBOz`%DHgc*aVy6Kmmd(cU_h0IrP{kdDM{%qrdki4_v3Qf(4nl|c>wGNzfy8e{GMNS%G}@0G|-o)|RTA+>~8g)-0Ga!|A$#{{@*n&O1GFS&YoG?GU?FaV{?it?=DPf)j6lpfFl44$rjF6*2UngFPpc3A)b literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/engineering_processor.png b/datapacks/ReApplied/assets/ae2/textures/item/engineering_processor.png new file mode 100644 index 0000000000000000000000000000000000000000..4ec5c74a46b7c6c4e6aa0c9b2c65cce77b577b85 GIT binary patch literal 521 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}Z0G|+7hFNntw(U9f9|WSA8SGgYs{VX1xqkIO1H*GxhN!o9rf@QD<6~rK z?I>bkFlA!U1!_!A0}@jfJ2nC-;gTS~V6bi!f?-qb9S)#0XMsm#F#`kNVGw3Kp1&dm zD7Ymx!ZXd&Q;Pwlf|Wsvk(GfF$npYWX($`y8x2Ngus9QtZOF*Pzz3wGfHXPwLc^xF9dGzv=#=Rjxy`+}u$NQD+cLc*BVXJ~ZolrdxNq79e(zZ9j?SGP@tXgq WGH+G+ucMPeF7kBsb6Mw<&;$T*C6O=y literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/engineering_processor_press.png b/datapacks/ReApplied/assets/ae2/textures/item/engineering_processor_press.png new file mode 100644 index 0000000000000000000000000000000000000000..71c3844c6a130e47604f3a69b35c2ea4c7d1faa5 GIT binary patch literal 483 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}H0G|+7j%|AwX3b@2?Kt%x1Q?RjOs-$8`tu>`?H!kOkFcXkY-6-84Ealo5gdEoo9~DL2XlZO>*2rpG0vAFdAdC+52<+kzuL4R#^yjk*(6hrLzls9@7l3p&mC-QJ6c#vZ42v=WL(>~?Xk9Z++Ek} z6fhvuO<|yX2of{|7RC$=#OQ*CukjTEQz68E#_$7y4Kn5e!wAmz+A=mpyyQOK-}8HZ z_q@;Zyic9gGCMtWVk&|l=_aGz2H(%fcZvc&bChH32$J+BqtjVUIvr}|SuYa+(9phd zeS7Y4I_p$rZFb|-4_6%@XKCEBaA#I_=}&~c_Uzpb{L6D+^+e{Lo!`1QXK8Quk;)_U zwYi3!zcy~GOY83L>sau{lH~RaeSdtjy}$3RnbfE4icLi}(~WeMaaZ2f&THXUp4$Av zrSgFDy62t!>vl8?Y4)TgYxgC0m94loUFbdh{kXcW)QkC}8gln+8oPbM_KwrLvwKn_ zIdxY3y+u;dN6D$3pVWNa#%7A82CohJWOx@p^Gho*T$r+b0x z{l<)pw*J#yrKcLk;G?}Cdq#}WeNcbrO53^5Ztfo2Gwo#i7pndB&W%|UtJ+NK=%S0C zdm8E+>R#NqkrO_P<54PBtZrIu!`x`ZC=Ea{ump657Lm3Z+mFJrYGp7T7##qAxdyU26uBmcsJ=m<7>8XVh2^E4s zq){mt2nnP_VKHG6e#Z9+R4nhq)mp6Ta!@L_9szFGcf}wH(NK=sZfie*C ziGB)G7Ys$q8P70K_78;RM9&W~@Q<1V+4;yoVKX$a$Z_e4f8%l@Nh>3PfK$%|K}djN z@!vkOR6Ne2V*@O2hs_Eg9YY5bOvVgm)&udpp*S33i5W&=f^BvQYBJ~w)Y^gqrA7q> zU@b`K#dxE7T7ZeB(9jU%QFe&4;8@p`UoAv8kR{nKn z1tJafry2LVq&2N8OQ*F~6z9!}X7LLYi(V&p6la~;V{3c@0wR8sHV4`i{3W(Cr7GBZtm>4m?Y0Tlfk0jTe5iN-`q!rhX4Qo literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/fluid_storage_cell_16k.png b/datapacks/ReApplied/assets/ae2/textures/item/fluid_storage_cell_16k.png new file mode 100644 index 0000000000000000000000000000000000000000..789c7dfee4d140b990ed9ef18fbe1c19ceeb8d2d GIT binary patch literal 661 zcmV;G0&4w4Tx04UFukMBfkoZ@sz>l%`-pL{CK@L zl5CZ&qQu6p1%ClsWvvvElAW?9HcZcXM$M#V;oj~!pZmS{obEXn%9Ny*GAnu@mChQW z(V%xWJm+;j6Jh771 zZQd5H*AnWY@TqX8ArBP3we?7zUu=%&`O9WQ2@OeYwZh(b5l4zxOBg9(sT^M_xvc%Z z$F9U3P0vh=Z;{oENr+K`co}DyAp-O=AT~f3e!68xiTIwM_$e|HtBKWF#bAjz39@vG zx-8kF;$xymWhPm*`~SDEW~|Sj&+ZOF<&$N-wSjXBa+{X*d1zU=BPf4_i*zAAa{&GC zqHh*7-#&QO;q0=YMRwqP0~#N6)lh$=a#>}u7`&c9O&IE~p?W^wv)^-$??G9UueyTW zJ!qHvo`r9?*k}uo&)K*D001XYOjJdwPC1Q2GvbO|#brZAkWllceqqmSWb$=as$u%W zsWW#>bvG*j0005$=Y#+N01b3fPE-H?|NsC0|NsC0|Nj6z=pu#y000SaNLh0L01FcU z01FcV0GgZ_0001VNkljA~bx=Iado(Y-=pS@R}<4P~0^b6@o6O#NJ!YPQ$Qn5CMTR!-5Md4HS(* vfT=ccYEP?n&U2}7MK$I^igaThc$4`BAsPp$svFB!00000NkvXXu0mjf9fcy< literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/fluid_storage_cell_1k.png b/datapacks/ReApplied/assets/ae2/textures/item/fluid_storage_cell_1k.png new file mode 100644 index 0000000000000000000000000000000000000000..183eaa1ad41e82d3caf6d7b91d96eac1e610cc80 GIT binary patch literal 671 zcmV;Q0$}}#P)4Tx04UFukMBfkoZ@sz>l%`-pL{CK@L zl5CZ&qQu6p1%ClsWvvvElAW?9HcZcXM$M#V;oj~!pZmS{obEXn%9Ny*GAnu@mChQW z(V%xWJm+;j6Jh771 zZQd5H*AnWY@TqX8ArBP3we?7zUu=%&`O9WQ2@OeYwZh(b5l4zxOBg9(sT^M_xvc%Z z$F9U3P0vh=Z;{oENr+K`co}DyAp-O=AT~f3e!68xiTIwM_$e|HtBKWF#bAjz39@vG zx-8kF;$xymWhPm*`~SDEW~|Sj&+ZOF<&$N-wSjXBa+{X*d1zU=BPf4_i*zAAa{&GC zqHh*7-#&QO;q0=YMRwqP0~#N6)lh$=a#>}u7`&c9O&IE~p?W^wv)^-$??G9UueyTW zJ!qHvo`r9?*k}uo&)K*D001peOjJdULNj$YE5&6)sZKeoK~3U{T=ZI6|7&a0QdaY( zevBqOVl6FU&unD!bpQYWywGSR0000FbW%=J|NsC0|NsC0|NsC0|Nj8g+?b&N000Sa zNLh0L01FcU01FcV0GgZ_0001XNkl37_t;u)zT& z2>F+H0Ob7V1yrqsaGHCRAQ2kgdheqIDK<3*q4}QLa8cYf7!`sJr^K97%~nCPY7hZ| zGtGhvcM2#P9|BCZfK&5pyRG$HDqOJ}b09^kF%SHbc>}0w2%229sfGXm002ovPDHLk FV1lEgD8&E( literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/fluid_storage_cell_256k.png b/datapacks/ReApplied/assets/ae2/textures/item/fluid_storage_cell_256k.png new file mode 100644 index 0000000000000000000000000000000000000000..25e8d9b561fd3f3e8d206299156cba48420e5d84 GIT binary patch literal 671 zcmV;Q0$}}#P)4Tx04UFukMBfkoZ@sz>l%`-pL{CK@L zl5CZ&qQu6p1%ClsWvvvElAW?9HcZcXM$M#V;oj~!pZmS{obEXn%9Ny*GAnu@mChQW z(V%xWJm+;j6Jh771 zZQd5H*AnWY@TqX8ArBP3we?7zUu=%&`O9WQ2@OeYwZh(b5l4zxOBg9(sT^M_xvc%Z z$F9U3P0vh=Z;{oENr+K`co}DyAp-O=AT~f3e!68xiTIwM_$e|HtBKWF#bAjz39@vG zx-8kF;$xymWhPm*`~SDEW~|Sj&+ZOF<&$N-wSjXBa+{X*d1zU=BPf4_i*zAAa{&GC zqHh*7-#&QO;q0=YMRwqP0~#N6)lh$=a#>}u7`&c9O&IE~p?W^wv)^-$??G9UueyTW zJ!qHvo`r9?*k}uo&)K*D001peOjJe1Wkab>IrFA|;)-0QW9a(BspEqG|Be5?dH4O? z#gkRrjY2bF&unD!bpQYW?n|z+0000FbW%=J|NsC0|NsC0|NsC0|Nj8g+?b&N000Sa zNLh0L01FcU01FcV0GgZ_0001XNkl37_t;u)zT& z2>F+H0Ob7V1yrqsaGHCRAQ2kgdheqIDK<3*q4}QLa8cYf7!`sJr^K97%~nCPY7hZ| zGtGhvcM2#P9|BCZfK&5pyRG$HDqOJ}b09^kF%SHbc>}0w2%229sfGXm002ovPDHLk FV1g)bFlPV& literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/fluid_storage_cell_4k.png b/datapacks/ReApplied/assets/ae2/textures/item/fluid_storage_cell_4k.png new file mode 100644 index 0000000000000000000000000000000000000000..c3bc5a6cfc23a0301ac4066ddddb166ab2b87f31 GIT binary patch literal 671 zcmV;Q0$}}#P)4Tx04UFukMBfkoZ@sz>l%`-pL{CK@L zl5CZ&qQu6p1%ClsWvvvElAW?9HcZcXM$M#V;oj~!pZmS{obEXn%9Ny*GAnu@mChQW z(V%xWJm+;j6Jh771 zZQd5H*AnWY@TqX8ArBP3we?7zUu=%&`O9WQ2@OeYwZh(b5l4zxOBg9(sT^M_xvc%Z z$F9U3P0vh=Z;{oENr+K`co}DyAp-O=AT~f3e!68xiTIwM_$e|HtBKWF#bAjz39@vG zx-8kF;$xymWhPm*`~SDEW~|Sj&+ZOF<&$N-wSjXBa+{X*d1zU=BPf4_i*zAAa{&GC zqHh*7-#&QO;q0=YMRwqP0~#N6)lh$=a#>}u7`&c9O&IE~p?W^wv)^-$??G9UueyTW zJ!qHvo`r9?*k}uo&)K*D001peOjJdwPC1Q2GvbO|#bra{rCRf*e*fZD|Nlkr$xQmg zsmzr=bvG+v&unD!bpQYW)&jZ90000FbW%=J|NsC0|NsC0|NsC0|Nj8g+?b&N000Sa zNLh0L01FcU01FcV0GgZ_0001XNkl37_t;u)zT& z2>F+H0Ob7V1yrqsaGHCRAQ2kgdheqIDK<3*q4}QLa8cYf7!`sJr^K97%~nCPY7hZ| zGtGhvcM2#P9|BCZfK&5pyRG$HDqOJ}b09^kF%SHbc>}0w2%229sfGXm002ovPDHLk FV1m0@Es+2K literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/fluid_storage_cell_64k.png b/datapacks/ReApplied/assets/ae2/textures/item/fluid_storage_cell_64k.png new file mode 100644 index 0000000000000000000000000000000000000000..a32e6b6960655527b10090440fa04f249319ec52 GIT binary patch literal 671 zcmV;Q0$}}#P)4Tx04UFukMBfkoZ@sz>l%`-pL{CK@L zl5CZ&qQu6p1%ClsWvvvElAW?9HcZcXM$M#V;oj~!pZmS{obEXn%9Ny*GAnu@mChQW z(V%xWJm+;j6Jh771 zZQd5H*AnWY@TqX8ArBP3we?7zUu=%&`O9WQ2@OeYwZh(b5l4zxOBg9(sT^M_xvc%Z z$F9U3P0vh=Z;{oENr+K`co}DyAp-O=AT~f3e!68xiTIwM_$e|HtBKWF#bAjz39@vG zx-8kF;$xymWhPm*`~SDEW~|Sj&+ZOF<&$N-wSjXBa+{X*d1zU=BPf4_i*zAAa{&GC zqHh*7-#&QO;q0=YMRwqP0~#N6)lh$=a#>}u7`&c9O&IE~p?W^wv)^-$??G9UueyTW zJ!qHvo`r9?*k}uo&)K*D001peOjJe1Wkab>IrFA|;)+~NtGN2ZsbuK%YXARS!`J=X z#XF3cjY2bF&unD!bpQYW=R37_t;u)zT& z2>F+H0Ob7V1yrqsaGHCRAQ2kgdheqIDK<3*q4}QLa8cYf7!`sJr^K97%~nCPY7hZ| zGtGhvcM2#P9|BCZfK&5pyRG$HDqOJ}b09^kF%SHbc>}0w2%229sfGXm002ovPDHLk FV1g)9FE{`I literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/fluix_axe.png b/datapacks/ReApplied/assets/ae2/textures/item/fluix_axe.png new file mode 100644 index 0000000000000000000000000000000000000000..996a1df01a4e85b4f3497015c5c5f72e02346a5d GIT binary patch literal 805 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47@ISlodZ0bofQI#^3yVNQh^fZ zr%v?Na0!$-R-fj!Vy4N`=gb$pR9tSoOP@8B?NVli?Zo_9ZEe{rX6kG`QWyLWBbZh!vAU%|g@&Zml|SZB;w2#gh#0G|-o(!eeM4?g}f;q$H9 z9|5*4E3@up_{o`RC3%{OcBZRq$Z-P|MmQ^{11X-8Aiv=M2*4n8|J*sCIA?)JWHAE+ zw=f7ZGR&GI0Tk>?jqptK^weVD0CHFvq!?Kl7=bJ=AeM%*L1{#Tkr^z`1Y{dBGBNN0 z=_nx1Y-a(BX8_qC;3>(-@B)~WV01xZW?qS2UTTSgsh%MNQ1=9O1{R}%Wq7m%d=Ph(Vfy4QyOXlgn?{7D3OE#M@y+>oGYRLJr zIay^)f#uHmxBC~ezlah2%$~*&(RqOB&^Oj%w%>ujB<yJE&1vU!mv;>w~{f{aFO7mm9?^-sebFX{zZ1xxv%b&t;ucLK6V6dNvyX literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/fluix_crystal.png b/datapacks/ReApplied/assets/ae2/textures/item/fluix_crystal.png new file mode 100644 index 0000000000000000000000000000000000000000..d547ccf557601e2d84e7a6a0ae146edd0ec1b521 GIT binary patch literal 3976 zcmcgvTZkM*6de-yjdH#^41z)Vlyx^?Q_ zTj$HmX8@F$}Y+Eju+dea0nSu5iD7tpt@1=m-1Y zu`Qk3JOBIOlRNhI_3wf7tk(4YB$qq;!t8rm?y)B>$>q+ig|&rrp}NQ8Q6tYp?6<;of&7%6W))XkWw{hiAByGtp}jSJ=pc86y8DLh z+X@{I5E?RNN~ck8CSIqgc7Z+kpNTb9>8hj$i)txbQCXQUn?(S#74QgPO@TJ&-<3MJ7BBTWJ_Il?;~o(Q;Z;!Q!4Pjn)vmne^iYk<&V? zrI9?&T|H3P$vbWWa#&luA|eK@(b6s1wJ6m1ZM;qaPJq+zhZg4xI#RoMwQ zP|Ze$sx7Y^OO{4)EsE*`4$Tg1Q_5v!=dEE=MD1i(=5}9QR#+;FD#a8d>>y&+F!oGf z6uk~p596L{6$mO=%KoHm)hPB1;+gsyZYoKdqEU87;IbEV2e^~H5a?9Rjb}i zGf7#K%b7}11yl23C_F=u0K2A-fd3Miw&5d(>H)m^z9Bd_aS#mVS0cWgQ7W6?%Q6vh zz!>g@XHnwn*pW!5wu>xoZ~!t*oAa&J7s3FY!TP85X}=+ z$w=XW9pDqo(y*uwgbNv?>&rc%O)-2llKu84?cZel#PBW65cYzqN=7TMYv??bIxq;< z>dI!rj;t?KLI`crGr}4j*}rzATZXclROsfiHytLx&efr~UtH$p9V4Q?upTPil=c|! zdB!ttOQH6~;d%raYb$!N?Ij5@JPGT2YDpBNZ5GSYA_RW3oYKZ{BVj8icf#U233P`d zLYRYiMs)`ZhM0?it|H)!z;0~h1oepHVKT_ZQ*fd;g)gz@qJ*9X1@>QY3yADO%5r4u z43dl)4swJLNJy#Mrfut%us3k)uSMp6bBjmK6&a7vuEk;o&05AuQ4Qj#p|Dn~9`bHV zYAa3A?|s8`SJFrsDQ@G0Qph+Q;mGKULvxh>XzfkeIbIE3m!1E^HWsw(a57p?3flUm zr(cmOy;x6WJJ~$~c=mO0om znT34m6J%#60>_2(1Pv@^G2L*b@0)rFlWyJU@D~MlM5LHut1( z(}FjsH-l?l_BOmK$|m&E7%qa3Ts?muTp|z8R7$m-^Tl^>y5Mf*oUQLaz5C1GwEAsV zzPaV_)?G_yd{%$_;Dj|uj^^IG^zO%w?0K&A>ai~j;~D$KJ6_p!#JKSLhhP73<;bJA@BirO jdmjDpF1)YQ-u>jqr+@R#NS%G|s0G|-o(!edZYJYs0@Hxn)=l{XSE3@vIX(a(Abt)`B11XM@Aiv=M5WsM+ zd2b|8jI+QavY3H^?=T269?xHq0u8ZuQ0pzeUNHMZ9FalX#Kr9VqgIuV= z$P5-|0}%W zq7mGC#+&be0tZV#9rO47g)^OU9<9m{ky~*^^uMFurs=ct&6c+&K4HBkrOaaZxJ7~8 zWq1FJx4OJ}r_^T%GU+VXyFpmwty#(c6{kwJMeVy4N`=gb$pR9tSoOP@8B?NVli?Zo_9ZEe{rX6kG`QWyLWBbZh!vAU%|g@&Zml|SZB;w2#gh#0G|-o(!ecWCVc*X@Ns}` z%dOfUW?D%rv+jACiDvl8b*8Ip$Z-P|${JTq1yVdEL4Lvi5r9GH{<(8Nan1sd$YKTt zZeb8+WSBKa0w~y(8sVAd>8ZuQ0pzeUNHMZ9FalX#Kr9VqgVKlwBQsc>3CK2NWMbe0 z(osO1+0FtM&j7MPz*CZu;RP@$!RUg-%)Ao4ywnl}Q$0flpzaCm3@ku(21dpPj0+%U z{{Iiw%HUN{EB*Ps^>QFD(bL5-L?bx%yf@zg1rC+~7RKmz_4kw5>|g5e>@$?otkYcJ z;~ODu%Z3p>-!PC{xWt~$(69CwwFgpMM literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/fluix_pearl.png b/datapacks/ReApplied/assets/ae2/textures/item/fluix_pearl.png new file mode 100644 index 0000000000000000000000000000000000000000..dc26cf6f1f5dc16380355b7800cd5403f0771319 GIT binary patch literal 469 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|s0G|-o(!ec2Ha#n|?%k^W@nyp2{|6tNX(a(AXB=xg0i-xeg8YL2Ljc3Q z=Dm?XG0p;y$YKTtzQZ8Qcszea3Q%xMYJ_K+r>7PJ2av3CK2NWMbe0(osO1+0FtM&j7MPAOVO$`eAfIVrE{6US4X6f~lS%1JH*P*cn)W z@&-o628;_JW`fkSE`XRb3CIQkCZH)yV3k3Z7C;tMm!W|HNcN0I#6w@+r#e7pk*AAe zh(>Vixr;LGwh4vqi+KYq99>jY!dx0$YM>t8p`{P}m*^rKM^otYk;yK{lDh;6Ct zEwzZu(7tHSFRK~MpNTwJ&Tu5IuJJ|cMD{ePnUR}Yxeh)0AnE0L{ZXLf1;1$XV7Uza kQm>y5=Ewd1Jczx^?>?0!+3L|mMUYE8UHx3vIVCg!0CtCc>;M1& literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/fluix_pickaxe.png b/datapacks/ReApplied/assets/ae2/textures/item/fluix_pickaxe.png new file mode 100644 index 0000000000000000000000000000000000000000..9d1296061f9e6b1ed3c5cc6321cd7ac2515e14d5 GIT binary patch literal 799 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47@ISlodZ0bofQI#^3yVNQh^fZ zr%v?Na0!$-R-fj!Vy4N`=gb$pR9tSoOP@8B?NVli?Zo_9ZEe{rX6kG`QWyLWBbZh!vAU%|g@&Zml|SZB;w2#gh#0G|-o(!ebNwk@}6fBZlA z_{)UPE3@up_{n*iiE7Akcc!bGX(a&_#yJ*v04bi5Aiv=M2*4n8|J*sCIA?)JWHAE+ zw=f7ZGR&GI0Tk>?jqptK^weVD0CHFvq!?Kl7=bJ=AeM%*L1{#Tkr^z`1Y{dBGBNN0 z=_nx1Y-a(BX8_qC;3>(-@B)~WV01xZW?qS2UTTSgsh%MNQ1=9O1{R$)78&qol`;+0K7;su>b%7 literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/fluix_shovel.png b/datapacks/ReApplied/assets/ae2/textures/item/fluix_shovel.png new file mode 100644 index 0000000000000000000000000000000000000000..83fb54d74246f6f5d68e4f766d864f6a21e69971 GIT binary patch literal 794 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47@ISlodZ0bofQI#^3yVNQh^fZ zr%v?Na0!$-R-fj!Vy4N`=gb$pR9tSoOP@8B?NVli?Zo_9ZEe{rX6kG`QWyLWBbZh!vAU%|g@&Zml|SZB;w2#gh#0G|-o(!ecWCVc*X@bSv5 zdjYmBw`zZQnu&I%t82({n`tFw_{jkkCh%{b4y1TWg8YL2BLIWY{d4Dl;+zE@k;M!Q z+`=Ht$S`Y;1W>RmHNrE^(^HFq1IS@zkYZ$IU<9(ffLI#J2Bi@VMrN=$6Oe7l$i%=0 zq@#d1vz-Mjo&jWofTtuQ!wX*YXRyr+v}h(>U1ucy!f1rC;*CQ|?Y-{;ATc-ie2%=5%P&+&oS z5hb3jiY!w_!bGH#qGwDxRKT^`ASW_vzT44HIz`v}&I^6by{D|-__N}mfZ=@yfu}Vb j-JhJ-oY{6%$96}3IRnQ_!MK~!Ad5X+{an^LB{Ts5+3PMB literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/fluix_sword.png b/datapacks/ReApplied/assets/ae2/textures/item/fluix_sword.png new file mode 100644 index 0000000000000000000000000000000000000000..ac1816958bcb5f0dfd15f32a4e49522bd6778718 GIT binary patch literal 802 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47@ISlodZ0bofQI#^3yVNQh^fZ zr%v?Na0!$-R-fj!Vy4N`=gb$pR9tSoOP@8B?NVli?Zo_9ZEe{rX6kG`QWyLWBbZh!vAU%|g@&Zml|SZB;w2#gh#0G|-o(!ecWCVc*X@Ns}` z%dOfUE3@vIX(f4@iDvl8b*8Ip$Z-P|7B7q!1X4UDL4Lvi5r9GH{<(8Nan1sd$YKTt zZeb8+WSBKa0w~y(8sVAd>8ZuQ0pzeUNHMZ9FalX#Kr9VqgVKlwBQsc>3CK2NWMbe0 z(osO1+0FtM&j7MPz*CZu;RP@$!RUg-%)Ao4ywnl}Q$0flpzaCm3@ku(21dpPj0+%U z{{Iiw%HUN{EB*Ps^>QFD-P6S}L?hU@*IVp>0tYj*;ID`OzUyjiJL{JA!1aj!iZ3yZ zEB>)g5vW^KVGzgI%K14rt+?~m!W)k?TkOuXiBErU!ph`4U)Q9wt4;Dh9iA$5{H5MC swWEc11^<;Xq!-Q7-4QNZus%&mPW~i^Tw_Q7RFDHaUHx3vIVCg!0B)@{0RR91 literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/fluix_upgrade_smithing_template.png b/datapacks/ReApplied/assets/ae2/textures/item/fluix_upgrade_smithing_template.png new file mode 100644 index 0000000000000000000000000000000000000000..ec0417b6e32f579ca451fab3a5a3d6a537312d1f GIT binary patch literal 802 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47@IPkodZ0bofQI#^3yVNQh^fZ zr%tr=V0M&f-S48RB*-1yvE+tQ)J!*59n~%+4G$qjxz^p%!mV$l%9PEfHRT>SwD_Y| z&YG=TH;A$vWIl53nAb(Ol)vf9Djb3`63-r=-E;hmG>4ps&*@wlrqgq8U z(|Hp?Ri_TQyCvO|S6(zJJ$_u5aqGP!p<@4~*WPr!-qN6ElOi^E(ubxG2clN4sBpJP z(t8>CF!-UIyPihP`jW+m^t(RWv4^G|@lb8j7u+>0V72*z$e6YT6a!MS>UZpdp0d= zdHwqJmkFQ$AAEeP_Q%Ssd!>O}fU0UQ8dU))?vfzC;Qw&I;N{Qw2`J22;1OBOz@VoD z!i=jP-JJv!>`IOBO!M^AV&DLBSQ(@kSs56CEH5CIhO$A)LxYhSEY1XE8!|F6@B!&4 zAkJ)O0gGn<*&uL#G7G~CU@C&q1&Nt?C3<l!}9$?>ysi?q>?x v@+Gq^UL<8#MaAA5k~0=m);(CyeXWWycplpnSEc`|AXj+0`njxgN@xNApBXtG literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/formation_core.png b/datapacks/ReApplied/assets/ae2/textures/item/formation_core.png new file mode 100644 index 0000000000000000000000000000000000000000..91ca92c4cc250d510c35afd3b646d4d769694bb5 GIT binary patch literal 598 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%LhJ0G|-oy!^E2_z3R+?<6_L=BA1Uo#01Fxi&5ii*1uX)tAqj*7tW=|8f7^ z(!eeH7G^86?tPi?`Bv?Z{|6uM{k%7LK~jKiOYh?e=|_w7BfMY!dhJ{j0W|pRcNtG0 zB~udQ7yKVLU=ZK*=sHjxXMsm#F#`kNVGw3Kp1&dmD7Ymx!ZXd&Q;UHE$YEuWVq|4t z1hTwpeamXl|hykKo(S&p@9KN_KZfv zLtoyfIzZ-PPZ!4!jbPpWNU>%E9%fy^0*wh9^q>CwzQ*a~^z?a;)NlW_VfGZMa8>1+ zRN;Ep!kI(thxo?ayGP|ObaliYe<2`!YTmBQi`$*K42-2#?{m-jWTE=>>+!ph-z(=W zcbx2ER3US$^4#gDo|dJ#Qp@+q$9xN3a#i#B!-zuNc+*mLr(4(br)7t-FIGw^lB-TM tz3S6Yr}3Y|Kd50ozy0NS%G|s0G|+7YX^5jW1EQRcn_bTtlWaS#uhDYBcP=DHJ78eR=R!7NV~#}JL+(sO})%nBUL7q&Ir`F~9NMcuSD@>%gr zf`2FfXZUdMJIj&?!#&4h9F?cuS+hWLsSTfHFmp_x)gs4~pRu7`7R(>6m`pIJV4E0c z5xJqFol#M@VwJ?@bCvc>!+nbNOm?2F{NVeYy`q9;W-HsTD?nQrJYD@<);T3K0RUTT BS?mA+ literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/item_storage_cell_16k.png b/datapacks/ReApplied/assets/ae2/textures/item/item_storage_cell_16k.png new file mode 100644 index 0000000000000000000000000000000000000000..4b2bac26f2e845f464733637059de8ff8f662f6a GIT binary patch literal 299 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}@0G|+751$}w2luSpf{5sNw+R7tjV+1ib5cH)hObJTK6|opxsRc-4N$H4 zbpDG#ink=lFZe$aV6c6m)CQE`EbxddW?8eR=R!4gjw#}JL+(sPb{E{Yt? z0U8U8ivEB0JNn;zvX6LHJX7E+_5Y48?`!=94@7Zn-|5~xh2_xkImKH&R;nfmw#{G3 zEZ=3_)F`yU=I1$|8E@MX@4AF?%#jp}skr3e$kQZo;lRo{Ww-8~_n)fmm#jA>%luiR bd1$=ST=vx=MVIaX?Pu_G^>bP0l+XkKg;#1( literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/item_storage_cell_1k.png b/datapacks/ReApplied/assets/ae2/textures/item/item_storage_cell_1k.png new file mode 100644 index 0000000000000000000000000000000000000000..3ea3dd7aa5e2846a6e610b437380d35a7a7846a6 GIT binary patch literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}r0G|+7YX^5jW1EQRcn_bT)sDVdxdmUMqW))RUk(bZYi#LJv(eHvN<5#F z@~IT4L*~-t!$69^B*-uLKMG*Da%aXupcH3;M`SSr1K%MKW)#)%Y5)qBdAc};Xatv@ zJIKeZ$iWgI;jr}fr~mVJE9dF^TCtbLF$KO-|L^E>zSd9hKorOFo$lRJSPmVZQ@qt< zrD~F3+xwNg`d!vdjY1o2exCE05zBjcSLZ4L3uB!f1R kcN?;MZI%9fz&zA^FVdQ&MBb@0K{c-ApigX literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/item_storage_cell_256k.png b/datapacks/ReApplied/assets/ae2/textures/item/item_storage_cell_256k.png new file mode 100644 index 0000000000000000000000000000000000000000..df358cbaec71d6e87a8d6ab0f6b1c445ca4d323a GIT binary patch literal 678 zcmV;X0$KfuP)4Tx04UFukvT{MK^TR<#1ru-3@Bo;g<2U96|vMPh@cRnLZTM#ZcG%io3I

V?+SY`3Q(U4qpO$cbhLuSs&3oi%{tmboy zcZ5UclAaVk74CNAg2MMoHwyfsIPG&#Wrm#T*obgQSWB0%QNreuV+r>QcO)%a@`LdL zCl#+LwlXW`&pp)(>lf{rDW%J7XN++siK1b!!ZI21gk`lwaf!)(q>R7K_eaHLh-(>B z9HV5h(0xDZ4}N#+ruupdN%aw^dh)!tPN>;}uT9VUJoLP;BdBCzc=$l2Y zV;`E<;q0=g8QXBa0j&=?-O+uiLS`_Pg4YxIrUW!!L)~1Vx1W8E?_gTGnz(}9J?KhH z_I#Ol*OvD7=NZ30BHtMea)Zim5Y_+y04-2VR7F@@Ur0<+eu0E)ZE&Sy=$D(5L>p}M9+Or5x`mqr@2Rqlmx=ZoO88EsU>0&hVQ8jFN!;YffBGh`OZw3 zT@Ay!iK-AdGc34pr-6ca6U2Z9PUXjTyRPS_$`!jY2THXY^T0P%H>vFioy1VK8~^|S M07*qoM6N<$g1odWX8-^I literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/item_storage_cell_4k.png b/datapacks/ReApplied/assets/ae2/textures/item/item_storage_cell_4k.png new file mode 100644 index 0000000000000000000000000000000000000000..c1ecbf880d599c90b3fda90e45361e4170d25655 GIT binary patch literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}r0G|+751$}w2luSpf{5t&M@ysX8e9H93j6=x_5Deo>9Z%FnQCWfY?F9C zC*@Nq$hdV&{s1Zdk|4j}|0sar%AFYtfl{0W9+AZi419+`m{C;2s{trj=IP=Xq7htr z?jRqtA_q%=gu~L?pZ?F^t(>RtYsFp~#}xQV{lBBj`C32015q5yce-~^VL5bsPVrWc zm8waCZSPm|>UUW;H41I8`FYM~MlA2)U7f20ER1z_6fAFSst`WXz~=Y#c-iiC&zGMP k-EGM3wN?7_0rODvm2Wxb9tqec19Sm{r>mdKI;Vst08*xQNdN!< literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/item_storage_cell_64k.png b/datapacks/ReApplied/assets/ae2/textures/item/item_storage_cell_64k.png new file mode 100644 index 0000000000000000000000000000000000000000..49d4fbecf79bf3dee4f2f0b36f3e6daa7d912a0f GIT binary patch literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}r0G|-oi0F6^pP;(NmaN5|1pQJ@7lH8x@U&9gL~rn zoRm+cAXCM5YyeXHB|(0{|4{(Ll{+&Q0;M<$JR*x382Ao>Fr%o3R|8P6%+tj&L?gKL z+(ABOMGlq#35TV(KmDJ-TRBhP*NVL~jw$e!`hQ24^R<402ckHZ?{x2;!gA>NoZ_t> zD^-&O+upC_)$g)yY82XF^Yfg~j9A{oyE<11SQzWNS%G}Z0G|-o)p7hsn}q&;E&2U@do(kHJqyF{`vG?siTr0^c+Sf3;eg>3PR4C~ zjFUV#ix?P8nHY2#7)mvmfVwTxXY&Cm;gTS~;QttaVN>lL4xlt=fk$L90|Vb-5N14{ zzaj-FxFt2hGtJXeivgs9l|hP;m4Ok+@&aOMC>!J(4Mt|LILJ0bMkWT3bx}Z^+0FtM z&j7MPAOVO$`eAfIVrE{6US4X6f~lS%128luursg#vp>5|9l7 zOh8kZz$$|*Er2YjE<*zYkn935RKr{UQfOw1{^GJS@tw4KK^fC z#_(Lg)hj+=>H^Q#Q~4(r@$`33>A$S@K&)?RNXxamGYVvmINVY2TbB5GisOy4JDADdTOKUXqb7ZY8&0cUs&xZ3Dk|EOtldPLFua Y|5KT_s{Gf{$siYby85}Sb4q9e0OxCtY5)KL literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/logic_processor_press.png b/datapacks/ReApplied/assets/ae2/textures/item/logic_processor_press.png new file mode 100644 index 0000000000000000000000000000000000000000..abf4967acaa46e4323c6eafed95ed6345cd8cbf9 GIT binary patch literal 473 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}H0G|-oqfJ7q{8vAQ`Qi#$JEe~;ffK5(Hf#ua%lMK1w5OQ3 zTgLH6Obu>495N?m+1GKulMNS%G|&0G|-o%?lB9|0JI?w>mc6z44Ph%9Dc;5!V$jK}j=qyPoCq(*qAd3tIwZ~!^13{s4& z42(dQ7Z6KB*&r8dFfxP1nSg9VMkWS6ARPt7ne8lK@eCjv1QLK4q#s5XBxdH7=;fuB zD46OQG5~!%ft`T`C~sh7Y{0kxVkSsE>jH>5lYndxU;>)L1XdYjX#r$Gbr~8MfMm~T zL_GB6eX0Xw#(KIqhG+zb_IQdNP~dQ8bX{}j|Gv}>UYk#N+c9Tw`A8lT6*|=l|gMe3>bg4OaXcvhMr$ Zhs1|oNS%G|&0G|-o%?l>JdV25s*H4|*#aB-4%8!lGkmKIAq|eh#G{aA>GhH31aHf?~ zEs)|V3Gxg6j{pop_s^XJigOltL>4nJ@ErzW#^d=bQh$Nv;eZ8x(p2rK(c2v zA|CqkKGgv-eLYzopr04B3NS%G|&0G|-o%?l>JdV25s*H2IHU+b(c&X0|{a%z{SnP`TeTxYtvh8#CgVce6d zBS4C$B*-uLKLRia-9L8@D9%~n5n0T@z;_sg8IR|$NC66NNsaJK^YqkW-~e)18Kf9l z85n^qFCdnNvOzA^U}Of1GXdF#j7$uCKspMDGuv6f;u%0T2qXY8NI#4&NX*PD(aTFM zQ83jrWB~ej0y_f>P~O1E*nn{X#7vNS)&&rACIQ(Xzyvgf39K^6(gMhW>M}Gi0Lh-w zh zH6kmz;c9Hp{e2C+U$a_G8qeIbl04wiTibh@_0V$$gBrDi-x!Xo@A$*Aeg1;`vh&~V Ys6S-J*|^+kOD)JwPgg&ebxsLQ0KHy%bN~PV literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/nether_quartz_pickaxe.png b/datapacks/ReApplied/assets/ae2/textures/item/nether_quartz_pickaxe.png new file mode 100644 index 0000000000000000000000000000000000000000..16d2adf29ca8bd6cd882f24b3504a949f11607f3 GIT binary patch literal 476 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}50G|-o%?la#v36>P%PHkmJse zjRGovSmpN~Nb!{f`33(+1`MtT?wkP1a29w(76TO=24TkI`72U@f?HA}JkvZqwHP>n z999M?Mpgz!Aj=DgrJ-z)%QYC8!QxCnwjm=E10RqES(@3-0v68zvOypLh(Y>cbU|Wf zUWr~_YKelWo*@I!=M&f&Sb*{dM#ct=3m|5K)Uz&tm@^5;1_36ZDNJCML6#Ok7F3s^ zfdNSNj7G#mU*4xWKxU$+i(`mJaBQC=-vI>NS%G}@0G|-o%?lb0?2~uGBhv% z$)3@Oc<9UfR0qh6^mK6y(Fl$`8_Cq5z`+tAFva9u{k;NB_2=C8c1)1}$@q1RrPC2j zMvm-ro^}F#k7qJ&5eaH^_vJQhhz;HOHb42h*l+H#>y|n%{+?>M%Wv>P{ej)OE5Zuz Y_{A!?I1>FVdQ&MBb@010Y#w*UYD literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/nether_quartz_sword.png b/datapacks/ReApplied/assets/ae2/textures/item/nether_quartz_sword.png new file mode 100644 index 0000000000000000000000000000000000000000..949151ea9a998c44a4a700a011a4ed6e557dd3b4 GIT binary patch literal 485 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}r0G|-o%?l>JdV25s*H4|*#doh9dwT!cl~cP;?pc=~8?|jopQo8M+7 tmjZ944#iyK3X~7~Ahz0+c~6wwMCp!qTw6=JH2gred%F6$taD0e0sxF-gJS>y literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/nether_quartz_wrench.png b/datapacks/ReApplied/assets/ae2/textures/item/nether_quartz_wrench.png new file mode 100644 index 0000000000000000000000000000000000000000..31fac0dbaabde180f86c723f8138aac625dae056 GIT binary patch literal 459 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}H0G|-oZAIesvJDxT82Es66cA^&vw+1jfNT&*0Ai4S7+sKafswHR;{u48AoZ*ZAm&U0vO$0eXbKZpWss!>kOkFcXkY-6J);rv(3khA z4v?AP>Ealo5ggmc$;Y6`!5r;4;eUO_N3+{UT4qjAdNkdgL3SO(PhnQ2;%qjbFv~@g zLiR3NH7)7cZsnabzh-vK>S>HkDO64^R1&`Zu;Id4J$9R$@e|K)ls0xg(`@`ZSzAzk Xqb$3^O%BZ~AbUMs{an^LB{Ts5HFkC2 literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/printed_calculation_processor.png b/datapacks/ReApplied/assets/ae2/textures/item/printed_calculation_processor.png new file mode 100644 index 0000000000000000000000000000000000000000..6177e178078c0723f0c654955ef40b2a24b9e50c GIT binary patch literal 470 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}H0G|+7@7V6JlI3Tf{CM~2*V41^Q~QrKuD@^ZQedJJ0#tJD_JK4Y#Z?mI z7yKUv7&e{JIS&-&EbxddW?rIsj|>KQTs zeL8`ifdwdUU}S8-xBy}%NImNUh&hvhY!F}qn!*HD8DwbzWI=Tq8W@0N&uBzE^yPi3 z17v1ACv)cI%{}FZ7xP6+9>~ls5Zx9rHTq#z%I%~tOA}sP ib_$i_tZ#OopYV(=eJR_N9g^)}CwRL0xvXNS%G}H0G|+7hFNntw(U9f9|WrYd@#9wHR|mhhSm;-P~O1E*nn{X#7vNS)&&rACIQ(Xzyvgf39K^6(gMhW>M}Gi0Lh-whR;nN0p&TO5}$QlZf}2aYmc(u h)07Xoes+s~Gi9x2oAXcO>okxPJYD@<);T3K0Ra1Ld>sG) literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/printed_logic_processor.png b/datapacks/ReApplied/assets/ae2/textures/item/printed_logic_processor.png new file mode 100644 index 0000000000000000000000000000000000000000..3b6ba781355ba985e969f916a347b3bc0248089a GIT binary patch literal 470 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}H0G|-o)p7hsn}q&;E&2U@`|tY!cNd9#IAA!*gR@kF38bWQWi^oEDhcun z{tp8To6hK*2a0kQctjR6Fz_7)VaDV6D^h@hTT&xD(>y)37&w3&Rt70XRt82O%L|C5 zp=^*#H5i$};vh>58JQUPfOHfPXSTC|#WR3x5J&)GkbW3lkeHcQqL-IiqF}0L$N==| z1a<}%puB;Ru>s=(h?yYutP3FKOaih&fC*>{6If-Cr3H`$)n#a40FphU5%JKM_o)t$ zneFM~7@`qe+7r#!;K0FLsjKsS{|4Q4orW9jQ`ow`sM|Z0usJJc^{w1IEE3?~T zNy|Lj7IQ|r^sf=!F;lzj#wjh1qdo<8_E(Y?KApDn)xXAl0?KnlB|huA+}{4;)*fZQ hrzszF{p=R~X3AR4Hs_zl*J&Upc)I$ztaD0e0stUgdglND literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/printed_silicon.png b/datapacks/ReApplied/assets/ae2/textures/item/printed_silicon.png new file mode 100644 index 0000000000000000000000000000000000000000..e77a14b9027432e73f3039381917d2de3136b0dd GIT binary patch literal 470 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}H0G|+7R}YVX@W`GS%jR!7RMXfUm7JB6S7vTup`on}RC1*2Up$cFDhcun z{tp8To6hK*2a0kQctjR6Fz_7)VaDV6D^h@hTT&xD(>y)37&w3&Rt70XRt82O%L|C5 zp=^*#H5i$};!HrcAtMt5ACQg$;>>myuy_WL4FU;34AKvy3lcN)O7!wlOB77?3>knv zoxsk(0+cr}GB#jb05KD!o^=7loJl}72rvOnVFIfRva|rQpt=kV3_!AHG$J1Q@;=o8 zGP6Bh978mMOM9aE8XP#7D|L0g@86)iuG4U%eF|IG7j=855;kYWtiF|-ryT51ePwoA zENPi%+hWd0m;N=PJ7#K^-8iMianz^4&i+c$!l%=AzWUd=Pe6H&sKjSom)qN4+}fk; h_cY~$uAkka-%MGn+2;Jy_&N>b1W#8#mvv4FO#rtKcntsm literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/processing_pattern.png b/datapacks/ReApplied/assets/ae2/textures/item/processing_pattern.png new file mode 100644 index 0000000000000000000000000000000000000000..99a02ab41dec9beff3971d1085c36fec4c942b40 GIT binary patch literal 510 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}x0G|-ooZOVq$lwKYrnI(H#ohUz_5c5_Eo(ME{@k=_-SqQEGyA4q`ttw( z|F^eqpLX(e_3}vq>g#N6oeZP|OM?7@fpRE-L3Qm+kQ&YckH}&M2EM}}%y>M1MG8=G zOKOB?ny0500|$`9${@wa%D@O@c>%FBlnwHQ1|u_AoC(M_WMpFC1JY4IoY~F-7S8~( zK_CH$LHc2IL1JcJiC$i6iGrz~ApXA+PN0!%X6s4hbT1CZ<)jfjW7yiaw2%yLf`#}JL+(sQTz4lD4u1ln^hb@=l?{`N*s z^Ql(chirv{H0r*|cl@Y1@2Rp#wLz;mUsdGFraNyqSYKa_zvvd$@?2>?N$l+geH literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/quartz_glass.png b/datapacks/ReApplied/assets/ae2/textures/item/quartz_glass.png new file mode 100644 index 0000000000000000000000000000000000000000..5baa12590d8cf7d1dc8a152277b427e7e8f51399 GIT binary patch literal 446 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}f0G|-o`I`>)%vctcoD~ornUhym)7TBtrdOl{q}WS>{DS|30fUq`vl~!| zv%n*=n1O-sFbFdq&tH)O6x@;;;hE;?sl~tnIes zvJDxT82Es66cA^&vw+1jfNT&*0Ai4S7+sKafswHR z;{u48AoZ*ZAm&U0vO$0eXbKZpWss!>kOkFcXkY-6J);rv(3khA4v-n|>Ealo5uDq9 zo9}=Ehx6&wKmXO&iwecY$g}tfXfPPtbNS%G}H0G|-ofbhtiyt10cZdVVFo*B#LZ#radVG)&_rJ=12RPuVUssfPWDhcun z{tp8To6hK*2a0kQctjR6Fz_7)VaDV6D^h@hTT&xD(>y)37&w3&Rt70XRt82O%L|C5 zp=^*#H5i$};!HrcAtMt5ACQg$;>>myuy_WL4FU;34AKvy3lcN)O7!wlOB77?3>knv zoxsk(0+cr}GB#jb05KD!o^=7loJl}72rvOnVFIfRva|rQpt=kV3_!AHG$J1Q@;=o8 zGP68g978mMOV2s-F)Q*gJKSbu`v1Q`Heq|v(qAp?QyRWbwr5C}*J}_G)OR>5xIJgZ zKM%(*tJr$EU+vw!`G`PLvf9)qjmN|UJv5&;h8$qp^T7YgWE*GO!{sUGDzEeD7p$&I g=q;SR`QhxXb^)DiI_qT$NS%G}H0G|-ofbd9H4-az-i=G+F=5IQrp{*U2oK@4WitTM>b0?2~uGBhv%$!?ma)^pKI zwin1O@pN$v(Fl$`?&rwcUn_5JjgriHUnp zaH~jLCh&yq6hADkbS3T8wR0IKd^Wgq#Bk14UoFf#*CRogdl$nMmA+i2C=<>`xrMD! sHl3`cuD1?dmdKI;Vst09`D0u>b%7 literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/singularity.png b/datapacks/ReApplied/assets/ae2/textures/item/singularity.png new file mode 100644 index 0000000000000000000000000000000000000000..c027d3988da075fcde92fb7a6a09518dfbb9628d GIT binary patch literal 1488 zcmbVLhf|Yh82=KI3qwW$0g(m)s~}s&GE%}UVMT`4Fa(iN!7~IwAfibSFbF3|N&um< zjDjK&kmV@DAYp~ka=joZ1i`SBgn%{>NWZB42m0Lo-sku1ciel!59^_Z<4!^Qu)RN4)0<4{fB z9Z=aO1z-cgDgQ?RhtTf^z#a+&Oi&^KsIX*!u;Xi^KxcC_&NIf-^AI2p8gM`t0tX-< z^8&H=8<*X%F+}c*9}0472oz8ObufrnD(s8@9LQyI2868sKTU{;#V1+dqm%a8SXcw# z3*ABhFfeX)_=pvx@@r37KD_d49~#JI0tLH3zhnm3*@Em_m9>?XEIMS2`Z=n!rLQ-~N6;V@AIl zQxRnn^cJT{JIa~8Bh?_5=Qg)18Xl~sG1Q&=1dmMXm0DODB$M)G8pcGSII15u*70}n z!)t3Wm(svU!S$2o^Ra46_{Xa5V=#mMex2%!%jYmr5`Q7HZbA5yp7Dnu%tL13Dz(6P zt^pau_^4_KvKXC9DJ%C6EdFr*FKo1t$%IR#S zH}D{t$*)-C=3}fjV+Q;7!0YkHHC;vyc}B%;h1Ly8NOsPkx$6Q3uiKgU^b&ZoH?}$` zm+b8^A0SDiM7T?Dp_wvzcut|;b?ugU=p2iCSBq%unii+zDd&YgEUudvs7fqcq8{5LbFKd zBpamhe2R}q9a<>1MMLxT^9k*ueKry&vjXaN^Lct{w~@-R6G6Kjh8#OSLsvKwT$#3H zBB$2{y%Ca$M_ru~5Zk}}HCE8!dL{5&zB{=jblYFKeVaWR}vjda>c?b#XC zsK}}VGB;O#kvCV3{cL=j8gD-s8LF(>4S9L?csbQW&rliVR%@YjMO+~knj-gRmLv3a z5;eLqyaLhbYMG3Rm^j^|J#_YpqtVsyfxf#!gnn|Fep0Xf(^fecBh6wwj?|^%#WNp~ z^R63@qGze`W5c}6j8|uH4aY4n@DL47Shb>f*Ri#@7s4*mgI138FOnFZPs(WEi<)*8 z`V$`QPl=r=nD5Gn@#D7HD4B4as%%y#Q^U^aF7N*sg48bk6fqsfr+(T>wn1A_RJ?k{ zjoD2kJR^&BVOlpVqSkk+t?2UwXVDzCfQ@D?n-1re-Pf^So%|qa7vYM?kR{q|o+{%> Qh3pf1x?|m#E@!U&3$7}x+5i9m literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/singularity.png.mcmeta b/datapacks/ReApplied/assets/ae2/textures/item/singularity.png.mcmeta new file mode 100644 index 0000000..79afc0a --- /dev/null +++ b/datapacks/ReApplied/assets/ae2/textures/item/singularity.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} \ No newline at end of file diff --git a/datapacks/ReApplied/assets/ae2/textures/item/sky_dust.png b/datapacks/ReApplied/assets/ae2/textures/item/sky_dust.png new file mode 100644 index 0000000000000000000000000000000000000000..ae1dd253e722b202549a5032cb9c437bd70ab783 GIT binary patch literal 448 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}%0G|+7U40W*&!CX#G<9|Ln#OJm8^@j*%Vea4f$~Bx|K$NG&XOR%;Qvs- z5bR$e1QIOph%9Dc;5!V$jK}j=qyPoCq(*qAd3tIwZ~!^13{s4&42(dQ7Z6KB*&tVH zFfxP1nSg9VMkWS6ARPt7ne8lK@eCjv1QLK4q#s5XBxdH7=;fuBD46OQG5~!!ft`T` zC~sh7Y{0kxVkSsE>jH>5lYndxU;>)L1XdYjX#r$Gbr~8MfMm~TL_GB6eX0XwMtZt9 zhG+!$o_6FrpupjBF;V2UsLS(jJYhCEo*zd)>@E-p00i_ I>zopr0I}|7Z2$lO literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/smithing_table_pattern.png b/datapacks/ReApplied/assets/ae2/textures/item/smithing_table_pattern.png new file mode 100644 index 0000000000000000000000000000000000000000..83304b7d9a2ff781b38dca6bdbdc2f8e28b6e6e3 GIT binary patch literal 535 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|~0G|+7eFJkfbzM*Icn7E8oZOVSJO8u(|KGJ`&4M{oLL-A)TdFoc{@k=_ z-SqQEGyA4q`tmL5h);ff2~^0%B<>8{{($MrN=$6Oe7l z$i%=0q@#d1vz-Mjo&jWoKmrhh^uy?a#LT=By}Z;C1yemk24KicU}s4qr*Fpx5 zmhVZj-o^6e^3tns9E%RzySjUo(r1nd=dM3pEg;ISEO?GRIHl=s(<;7JLG>H50@*!( mFPG2Ke#PSbGTQ9Tj9P|JUf!p#-~Z1CxyjSj&t;ucLK6VVN1uKG literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/spatial_cell_component_128.png b/datapacks/ReApplied/assets/ae2/textures/item/spatial_cell_component_128.png new file mode 100644 index 0000000000000000000000000000000000000000..8abccc7bc36d9a5cad14c73ad6136dd7962a08ad GIT binary patch literal 550 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}}0G|-o(!ec2Ha*Gq>+5`uf0^+4O5N|bZU2`hzqnQV?fM%?je$f|5iIxQU1^>qa7_@KJz5*)XEbxdd zW?uDdU%UJg;LDnUii=&yc8C@4<6yOYWr{9nPHwH)a$skKzopr0CK6gz5oCK literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/spatial_cell_component_16.png b/datapacks/ReApplied/assets/ae2/textures/item/spatial_cell_component_16.png new file mode 100644 index 0000000000000000000000000000000000000000..c5018e56a20a75221fcdfe53325ec2438d63f415 GIT binary patch literal 520 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}x0G|-o(!ec2Ha%Y^e7;!bdLY5_R_%`;YlHqD2>gHW@ye`wkD8+QB7@5K1OhC3FBNGE3kd6Z4%yt&Acm|LS z0-wql8D0QA3!@7XGxJLH@={9_O!W*IfD#kf8CZbo42+Bo7#Bdy1lh;B0AkK0AR7dj zfTl8mRR&pF09jC7h6V;8*-g{bdMbY*%EDOjs`nRZ$sunZlkUH-YW~ToRD@56YXDGz^YLD zr8^-$rSa|e7kxZ0KhEB{z0c~pypuP}b$d5imh0>9yMOq8ebwBn{q5V ei(lolivKbEzsbR^ce3j!$YGwYelF{r5}E+RO`VYd literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/spatial_cell_component_2.png b/datapacks/ReApplied/assets/ae2/textures/item/spatial_cell_component_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d6ac1b534d2e503903f3e66d583ffc4df041fcd7 GIT binary patch literal 517 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}x0G|+7+sKpV-rLl5yNsPz`}P0yU;4K+a7&O)k9W;`m#n*f>;B!U{joCZ z-v5J-zfAaSrj-QLmvC`$3Xl>k3Gxg6j|Lc2*Uki~;VkfoEM{QfI|Ravq8eTeK*24k z5uRzDo>~kXKn^Q|6eBAGBar0<#L`eU$QK%n%wTaQAls0UiGdGDM*(qWI}2Dm1IPw} zPi2e@FMytf(FKW_c_n&zsU-@gdWH-@i3#isEI@SzM#ct=3m|5K>|N$>q-oNS%G}Z0G|-oo*Bz(8oTFjIuw6Ka2`qr;reDc_?==cb8tyFi@ zni!|)B>|geCSAN;_hV1ti+4R=rj#i)0uA9T@Q5sCVBk9p!i>lBSEK+1x1>gRrg?g5 zF>nAmtPE0&tPG4mmKP99L)jqbYA`Z`#hHL?Lq;YBJ|GL*!YMr2Z+CTs^|LvwY5r=FWxB%74|e($tX1x?Fu z*gdy0RxC`q`C^gV*M+!R^*l8YyYT$^ pm-|&M&Rb4Ad#Gd_w)dlOEhA?J`}CB$HhYj;Jzf1=);T3K0RV9qlVtz^ literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/spatial_storage_cell_128.png b/datapacks/ReApplied/assets/ae2/textures/item/spatial_storage_cell_128.png new file mode 100644 index 0000000000000000000000000000000000000000..6ae5cdf2ec49f81b70220ebe3cc37aae0ac3a7a2 GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}50G|-o(8ypXPuHB>l-8E21#_nC+Op;)=cGVgCFkm4%|@(cct3>aJw+&KZ1;VkfoECwn#1j3A>8eR=R!7@)5#}JL+)brka zM-+IN119sAXzcu7dffBIRqg}+jvPmL4XWOY3QQDoGBY*4D#9}7x#jgwLPrif-e)v# zJ4e%f(Y`*GQ=iwEs=Jpto~k)t_@HUVM)~Xu`~h6|+9t8(dKg+S^4S;k=$u~l``NS%G}}0G|-o(8ypXPuGyh;H=yfCr`JQ)~W^brtI3XX2F~(KNm*+KkdG2`eh%9Dc z;5!7ujG`J|4M4#TPZ!4!jo{ex(R@b~I9LNFJes_4>!$x(#a7Quc~+P4j?<9i+jM<~ z2fOYYw>Y>QXKQefNluw(oG_v2Nl;dZ_v3q5?!}R@?>ihKvr<9nTXL7EYJ=1o& XFHiLIli|OCZes9s^>bP0l+XkK!3>c< literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/spatial_storage_cell_2.png b/datapacks/ReApplied/assets/ae2/textures/item/spatial_storage_cell_2.png new file mode 100644 index 0000000000000000000000000000000000000000..7edc502f0649b82cac50d5a3d68ae252601a5bdc GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}50G|-o(8ypXPuHB>l-8E21#_nC+Oj6B`@jGC|F>_S{{R22k+r3N{v*%G zgFxkV)^E21DZY{*zu^DKfWh^^ofAMA&H|6fVxWRUAj~ML;ne^XEb(-44ABTKJ?G8G ztjNP0@SJ^$;`jY|a}8E|eP#L(?4VHpNuFWn?^wprT*VOMa&v7*r3$&^a~Y0YVMo@u z+*Q)BTVD{urICHslFi-hVAQcNS%G}}0G|-o|NsBzFVW^1T;fss<94`5-kbx3kDj60T{Gz*1iHN;4JWn zEM{QfI}E~%$MaXD00p5`Y+_A4V4>X6BXX<)xM=nCcla07GR0I|B<)-oVJ%fN=rD zOptok1rT#40ofqH1T=*StTM>b0?2~uGBhv%$)3@Oc<9Uf6y)m$PZ!4!jo{KgN4~=f zJS@3F&9Ms_kNmIC7FXXJ@=9jS+=&wu{y)rDDCpneqZ!!Md-zPWMXq4QbRO@e0hdIt z#7$i>NS%G}50G|+7Cr?)+Ys;M6l+eiFvf0+HEmhu)nrrU|9RBa$x6OOOoGH7utWnk1 z1uA#2=(Gh=d?i7C!T*r~gX@7iCx9}X1s;*bKm~_Dm{C;2s{trj=IP=Xq7htr&XLbq zk;666L8D{S|F_>d|NGCH()es%g3{IVf7q4weYfp&apQh4ZPnI*S|1-zopr0KUm`XaE2J literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/item/wireless_receiver.png b/datapacks/ReApplied/assets/ae2/textures/item/wireless_receiver.png new file mode 100644 index 0000000000000000000000000000000000000000..05339d2233da7ed7d377abb4f362bdc253541b43 GIT binary patch literal 504 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}r0G|-o(!ec2Ha%Y^eExs%@ye`wW?D(NYJar0RE0(c=j5jB+OlTBoGG_& zpZ@>peamXl|hyk zKo(S&p@9KN_KZfvLtoyfIzVQnr;B5VMzHU>*Fp@6EUXDz*1FvLUl{&lV_L}b*?A8_ z8E$mX%jlWJw1B-ah^s(>;jBG_&3k^CPA&5fhb*U?7<|6BD(N?ug?zWwu{0?rz27%F zuic)sKylh*!%l0LVp&o1wZFTLyz^OQt>_o27Pk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~e1o(uw?kRjRGwGtPzKOcJx`KkVq$rP!l(4y0s=H}TNx&ux8%I~qppfXa z7^msC>wW+=oxFAB5s(rn3Gxg6j|vzbD91_yO=u<5X=vX`tYi)CkWs zPfsld4j_k>L5h);ff2~^0%B<>8{`8GMrN=$6Oe7l$i%=0q@#d1vz-Mjo&jWo08cq1 z!waBCVRS)aW?qS2UTTSgsh%MNP+|f*0}D`{fswHR;{u48Ap2MsK+Ks0WP<<`&{QU{ z${Gw;Def$9g_}sz(Ui~#+%F{L8Y+|guBe7f;RFzd7Z>-Q*mr@ zPQ<~PhAN7j58gc9Dj)9PmBQnBR_lTrU2BY=^{-uY)sub*XcEGRC2uQy)`FuPG?5a#Rn3T zCio{AY|JR&@jStF@W`TrK-;(%_(w3X+<|gfguB^}PiTobk^olzA;85x-3}u8aA8L} zMAp4=a;Ix^vd1BQra0&O&Cyc+f(6mHl#}gPSo~uyX{W#L`FX=>=B3Y_-%5cF)evn@ z` q|F{1`^&O_|4Uffku*z&dAn{(?ZfCVqzVc^KvhZ~Eb6Mw<&;$Uw?n=J^ literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/assets/ae2/textures/models/skychest.png b/datapacks/ReApplied/assets/ae2/textures/models/skychest.png new file mode 100644 index 0000000000000000000000000000000000000000..1daf47aac58538db9e85f35b4b7ca26136cd2433 GIT binary patch literal 898 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~e1o(uw?kRjRGwGtPzKOcJx`KkVq$rP!l(4y0s=H}TNx&ux8%I~qppfXa z7^msC>wW+=oxFAB5s(rn3Gxg6j|vzbD91_yO=u<5X=vX`tYi)CkWs zPfsld4j_k>L5h);ff2~^0%B<>8{`8GMrN=$6Oe7l$i%=0q@#d1vz-Mjo&jWo08cq1 z!waBCVRS)aW?qS2UTTSgsh%MNP+|f*0}D`{fswHR;{u48Ap2MsK+Ks0WP<<`&{QU{ z${Gw;Def$9g_}sz(Ui~#+%F{L8Y+|guBe7f;RFzd7Z>-Q*mr@ zPQ<~PhAN7j58gc9Dj)9PmBQnBR_lTrU2BY=^{-uY)sub*XcEGRC2uQy)`FuPG?5a#Rn3T zCio{AY|JR&@jStF@W`TrK-;(%_(w3X+<|gfguB^}PiTobk^olzA;85x-3}u8aA8L} zMAp4=a;Ix^vd1BQra0&O&Cyc+f(6mHl#}gPSo~uyX{W#L`FX=>=B3Y_-%5cF)evn@ z` q|F{1`^&O_|4Uffku*z&dAn{(?ZfCVqzVc^KvhZ~Eb6Mw<&;$Uw?n=J^ literal 0 HcmV?d00001 diff --git a/datapacks/ReApplied/pack.mcmeta b/datapacks/ReApplied/pack.mcmeta new file mode 100644 index 0000000..ef0ff7a --- /dev/null +++ b/datapacks/ReApplied/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "pack_format": 8, + "description": "Resourcepack for Applied Energistics 2 Mod" + } +} diff --git a/datapacks/ReApplied/pack.png b/datapacks/ReApplied/pack.png new file mode 100644 index 0000000000000000000000000000000000000000..b8b215bbef6dabfa57328a362ae693528ac54f84 GIT binary patch literal 27218 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 literal 0 HcmV?d00001 diff --git a/datapacks/idasalexsmobs-1.20/data/idas/advancements/ancient_mines.json b/datapacks/idasalexsmobs-1.20/data/idas/advancements/ancient_mines.json new file mode 100644 index 0000000..6a53359 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/advancements/ancient_mines.json @@ -0,0 +1,44 @@ +{ + "parent": "idas:idas_root", + "display": { + "icon": { + "item": "minecraft:netherite_axe" + }, + "title": { + "translate": "Ancient Mines" + }, + "description": { + "translate": "The Drums of the Deep Call..." + }, + "show_toast": true, + "announce_to_chat": true, + "frame": "challenge", + "hidden": false + }, + "rewards": { + "experience": 100 + }, + "criteria": { + "in_ancient_mines": { + "trigger": "minecraft:location", + "conditions": { + "player": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "location": { + "structure": "idas:ancient_mines" + } + } + } + ] + } + } + }, + "requirements": [ + [ + "in_ancient_mines" + ] + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/advancements/apothecary_abode.json b/datapacks/idasalexsmobs-1.20/data/idas/advancements/apothecary_abode.json new file mode 100644 index 0000000..973460b --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/advancements/apothecary_abode.json @@ -0,0 +1,43 @@ +{ + "parent": "idas:idas_root", + "display": { + "icon": { + "item": "minecraft:crimson_fungus" + }, + "title": { + "translate": "The Apothecary's Abode" + }, + "description": { + "translate": "A vivid and magical yet twisted building among the trees..." + }, + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "rewards": { + "experience": 50 + }, + "criteria": { + "in_apothecary_abode": { + "trigger": "minecraft:location", + "conditions": { + "player": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "location": { + "structure": "idas:apothecary_abode" + } + } + } + ] + } + } + }, + "requirements": [ + [ + "in_apothecary_abode" + ] + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/advancements/bearclaw_inn.json b/datapacks/idasalexsmobs-1.20/data/idas/advancements/bearclaw_inn.json new file mode 100644 index 0000000..5f3c67d --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/advancements/bearclaw_inn.json @@ -0,0 +1,43 @@ +{ + "parent": "idas:idas_root", + "display": { + "icon": { + "item": "alexsmobs:bear_fur" + }, + "title": { + "translate": "The Bearclaw Inn" + }, + "description": { + "translate": "An Inn for a Weary Traveler" + }, + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "rewards": { + "experience": 50 + }, + "criteria": { + "in_bearclaw_inn": { + "trigger": "minecraft:location", + "conditions": { + "player": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "location": { + "structure": "idas:bearclaw_inn" + } + } + } + ] + } + } + }, + "requirements": [ + [ + "in_bearclaw_inn" + ] + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/advancements/castle.json b/datapacks/idasalexsmobs-1.20/data/idas/advancements/castle.json new file mode 100644 index 0000000..c6dbff9 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/advancements/castle.json @@ -0,0 +1,43 @@ +{ + "parent": "idas:idas_root", + "display": { + "icon": { + "item": "minecraft:lodestone" + }, + "title": { + "translate": "Castle" + }, + "description": { + "translate": "Fortress of the Villagers" + }, + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "rewards": { + "experience": 100 + }, + "criteria": { + "in_castle": { + "trigger": "minecraft:location", + "conditions": { + "player": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "location": { + "structure": "idas:castle" + } + } + } + ] + } + } + }, + "requirements": [ + [ + "in_castle" + ] + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/advancements/enchantingtower.json b/datapacks/idasalexsmobs-1.20/data/idas/advancements/enchantingtower.json new file mode 100644 index 0000000..03ce18d --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/advancements/enchantingtower.json @@ -0,0 +1,43 @@ +{ + "parent": "idas:idas_root", + "display": { + "icon": { + "item": "minecraft:lapis_lazuli" + }, + "title": { + "translate": "Enchanting Tower" + }, + "description": { + "translate": "A Cleric's Tower" + }, + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "rewards": { + "experience": 100 + }, + "criteria": { + "in_enchantingtower": { + "trigger": "minecraft:location", + "conditions": { + "player": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "location": { + "structure": "idas:enchantingtower" + } + } + } + ] + } + } + }, + "requirements": [ + [ + "in_enchantingtower" + ] + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/advancements/fishermans_lodge.json b/datapacks/idasalexsmobs-1.20/data/idas/advancements/fishermans_lodge.json new file mode 100644 index 0000000..20d5dee --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/advancements/fishermans_lodge.json @@ -0,0 +1,43 @@ +{ + "parent": "idas:idas_root", + "display": { + "icon": { + "item": "minecraft:cod" + }, + "title": { + "translate": "Fisherman's Lodge" + }, + "description": { + "translate": "The Fisherman of the Lake" + }, + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "rewards": { + "experience": 50 + }, + "criteria": { + "in_fishermans_lodge": { + "trigger": "minecraft:location", + "conditions": { + "player": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "location": { + "structure": "idas:fishermans_lodge" + } + } + } + ] + } + } + }, + "requirements": [ + [ + "in_fishermans_lodge" + ] + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/advancements/hunters_cabin.json b/datapacks/idasalexsmobs-1.20/data/idas/advancements/hunters_cabin.json new file mode 100644 index 0000000..5b13c8b --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/advancements/hunters_cabin.json @@ -0,0 +1,43 @@ +{ + "parent": "idas:idas_root", + "display": { + "icon": { + "item": "alexsmobs:moose_antler" + }, + "title": { + "translate": "Hunter's Cabin" + }, + "description": { + "translate": "The Huntsman of the Woods" + }, + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "rewards": { + "experience": 50 + }, + "criteria": { + "in_hunters_cabin": { + "trigger": "minecraft:location", + "conditions": { + "player": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "location": { + "structure": "idas:hunters_cabin" + } + } + } + ] + } + } + }, + "requirements": [ + [ + "in_hunters_cabin" + ] + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/advancements/idas_root.json b/datapacks/idasalexsmobs-1.20/data/idas/advancements/idas_root.json new file mode 100644 index 0000000..19ef7d7 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/advancements/idas_root.json @@ -0,0 +1,22 @@ +{ + "display": { + "icon": { + "item": "minecraft:filled_map" + }, + "title": { + "translate": "Integrated Dungeons and Structures" + }, + "description": { + "translate": "Start exploring for structures!" + }, + "show_toast": false, + "announce_to_chat": true, + "hidden": false, + "background": "minecraft:textures/block/purple_terracotta.png" + }, + "criteria": { + "always": { + "trigger": "minecraft:tick" + } + } +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/advancements/labyrinth.json b/datapacks/idasalexsmobs-1.20/data/idas/advancements/labyrinth.json new file mode 100644 index 0000000..d1c8a57 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/advancements/labyrinth.json @@ -0,0 +1,44 @@ +{ + "parent": "idas:idas_root", + "display": { + "icon": { + "item": "alexsmobs:guster_eye" + }, + "title": { + "translate": "Labyrinth of the Serpent" + }, + "description": { + "translate": "May the fates be on your side..." + }, + "show_toast": true, + "announce_to_chat": true, + "frame": "challenge", + "hidden": false + }, + "rewards": { + "experience": 100 + }, + "criteria": { + "in_labyrinth": { + "trigger": "minecraft:location", + "conditions": { + "player": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "location": { + "structure": "idas:labyrinth" + } + } + } + ] + } + } + }, + "requirements": [ + [ + "in_labyrinth" + ] + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/advancements/necromancers_spire.json b/datapacks/idasalexsmobs-1.20/data/idas/advancements/necromancers_spire.json new file mode 100644 index 0000000..c93c183 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/advancements/necromancers_spire.json @@ -0,0 +1,43 @@ +{ + "parent": "idas:idas_root", + "display": { + "icon": { + "item": "minecraft:skeleton_skull" + }, + "title": { + "translate": "The Necromancer's Spire" + }, + "description": { + "translate": "A Chilling Evil Lurks Within..." + }, + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "rewards": { + "experience": 50 + }, + "criteria": { + "in_necromancers_spire": { + "trigger": "minecraft:location", + "conditions": { + "player": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "location": { + "structure": "idas:necromancers_spire" + } + } + } + ] + } + } + }, + "requirements": [ + [ + "in_necromancers_spire" + ] + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/advancements/nexus.json b/datapacks/idasalexsmobs-1.20/data/idas/advancements/nexus.json new file mode 100644 index 0000000..4cf858b --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/advancements/nexus.json @@ -0,0 +1,44 @@ +{ + "parent": "idas:idas_root", + "display": { + "icon": { + "item": "minecraft:flint_and_steel" + }, + "title": { + "translate": "The Nexus" + }, + "description": { + "translate": "The Gateway to Multiple Realities" + }, + "show_toast": true, + "announce_to_chat": true, + "frame": "challenge", + "hidden": false + }, + "rewards": { + "experience": 100 + }, + "criteria": { + "in_nexus": { + "trigger": "minecraft:location", + "conditions": { + "player": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "location": { + "structure": "idas:nexus" + } + } + } + ] + } + } + }, + "requirements": [ + [ + "in_nexus" + ] + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/advancements/pillager_fortress.json b/datapacks/idasalexsmobs-1.20/data/idas/advancements/pillager_fortress.json new file mode 100644 index 0000000..78163d6 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/advancements/pillager_fortress.json @@ -0,0 +1,44 @@ +{ + "parent": "idas:idas_root", + "display": { + "icon": { + "item": "minecraft:totem_of_undying" + }, + "title": { + "translate": "Pillager Fortress" + }, + "description": { + "translate": "Pillage the Illage Away" + }, + "show_toast": true, + "announce_to_chat": true, + "frame": "challenge", + "hidden": false + }, + "rewards": { + "experience": 100 + }, + "criteria": { + "in_pillager_fortress": { + "trigger": "minecraft:location", + "conditions": { + "player": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "location": { + "structure": "idas:pillager_fortress" + } + } + } + ] + } + } + }, + "requirements": [ + [ + "in_pillager_fortress" + ] + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/advancements/redhorn_guild.json b/datapacks/idasalexsmobs-1.20/data/idas/advancements/redhorn_guild.json new file mode 100644 index 0000000..d1cc180 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/advancements/redhorn_guild.json @@ -0,0 +1,43 @@ +{ + "parent": "idas:idas_root", + "display": { + "icon": { + "item": "minecraft:wooden_sword" + }, + "title": { + "translate": "The Redhorn Guild" + }, + "description": { + "translate": "A Refuge and Training Grounds" + }, + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "rewards": { + "experience": 50 + }, + "criteria": { + "in_redhorn_guild": { + "trigger": "minecraft:location", + "conditions": { + "player": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "location": { + "structure": "idas:redhorn_guild" + } + } + } + ] + } + } + }, + "requirements": [ + [ + "in_redhorn_guild" + ] + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/advancements/sunken_ship.json b/datapacks/idasalexsmobs-1.20/data/idas/advancements/sunken_ship.json new file mode 100644 index 0000000..b5bc41d --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/advancements/sunken_ship.json @@ -0,0 +1,43 @@ +{ + "parent": "idas:idas_root", + "display": { + "icon": { + "item": "alexsmobs:skelewag_sword" + }, + "title": { + "translate": "A Sunken Ship" + }, + "description": { + "translate": "A Captain Always Goes Down With Their Ship..." + }, + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "rewards": { + "experience": 50 + }, + "criteria": { + "in_sunken_ship": { + "trigger": "minecraft:location", + "conditions": { + "player": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "location": { + "structure": "idas:sunken_ship/sunken_ship" + } + } + } + ] + } + } + }, + "requirements": [ + [ + "in_sunken_ship" + ] + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/advancements/tinkers_workshop.json b/datapacks/idasalexsmobs-1.20/data/idas/advancements/tinkers_workshop.json new file mode 100644 index 0000000..1628792 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/advancements/tinkers_workshop.json @@ -0,0 +1,44 @@ +{ + "parent": "idas:idas_root", + "display": { + "icon": { + "item": "create:brass_ingot" + }, + "title": { + "translate": "Tinker's Workshop" + }, + "description": { + "translate": "Become the latest test subject of the Tinker..." + }, + "show_toast": true, + "announce_to_chat": true, + "frame": "challenge", + "hidden": false + }, + "rewards": { + "experience": 100 + }, + "criteria": { + "in_tinkers_workshop": { + "trigger": "minecraft:location", + "conditions": { + "player": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "location": { + "structure": "idas:tinkers_workshop" + } + } + } + ] + } + } + }, + "requirements": [ + [ + "in_tinkers_workshop" + ] + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/advancements/winter_wagon.json b/datapacks/idasalexsmobs-1.20/data/idas/advancements/winter_wagon.json new file mode 100644 index 0000000..5ebad5b --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/advancements/winter_wagon.json @@ -0,0 +1,43 @@ +{ + "parent": "idas:idas_root", + "display": { + "icon": { + "item": "supplementaries:present_red" + }, + "title": { + "translate": "Winter Wagon" + }, + "description": { + "translate": "A Festive Travelling Wagon" + }, + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "rewards": { + "experience": 50 + }, + "criteria": { + "in_winter_wagon": { + "trigger": "minecraft:location", + "conditions": { + "player": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "location": { + "structure": "idas:winter_wagon" + } + } + } + ] + } + } + }, + "requirements": [ + [ + "in_winter_wagon" + ] + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/advancements/witches_treestump.json b/datapacks/idasalexsmobs-1.20/data/idas/advancements/witches_treestump.json new file mode 100644 index 0000000..ae525d7 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/advancements/witches_treestump.json @@ -0,0 +1,43 @@ +{ + "parent": "idas:idas_root", + "display": { + "icon": { + "item": "minecraft:nether_wart" + }, + "title": { + "translate": "A Witch's Stump" + }, + "description": { + "translate": "A place of dark magic in the woods" + }, + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "rewards": { + "experience": 50 + }, + "criteria": { + "in_witches_treestump": { + "trigger": "minecraft:location", + "conditions": { + "player": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "location": { + "structure": "idas:witches_treestump" + } + } + } + ] + } + } + }, + "requirements": [ + [ + "in_witches_treestump" + ] + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/advancements/wizardtower.json b/datapacks/idasalexsmobs-1.20/data/idas/advancements/wizardtower.json new file mode 100644 index 0000000..ecde12e --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/advancements/wizardtower.json @@ -0,0 +1,43 @@ +{ + "parent": "idas:idas_root", + "display": { + "icon": { + "item": "create:rose_quartz" + }, + "title": { + "translate": "Wizard Tower" + }, + "description": { + "translate": "A Mage's Spire" + }, + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "rewards": { + "experience": 50 + }, + "criteria": { + "in_wizardtower": { + "trigger": "minecraft:location", + "conditions": { + "player": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "location": { + "structure": "idas:wizard_tower" + } + } + } + ] + } + } + }, + "requirements": [ + [ + "in_wizardtower" + ] + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/ancient_mines_bottom.json b/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/ancient_mines_bottom.json new file mode 100644 index 0000000..6ebfddb --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/ancient_mines_bottom.json @@ -0,0 +1,8 @@ +{ + "mobs": [ + { + "name": "alexsmobs:centipede_head", + "weight": 15 + } + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/ancient_mines_top.json b/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/ancient_mines_top.json new file mode 100644 index 0000000..fd0fca3 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/ancient_mines_top.json @@ -0,0 +1,16 @@ +{ + "mobs": [ + { + "name": "minecraft:spider", + "weight": 15 + }, + { + "name": "minecraft:cave_spider", + "weight": 10 + }, + { + "name": "minecraft:stray", + "weight": 15 + } + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/generic.json b/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/generic.json new file mode 100644 index 0000000..7480320 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/generic.json @@ -0,0 +1,16 @@ +{ + "mobs": [ + { + "name": "minecraft:zombie", + "weight": 15 + }, + { + "name": "minecraft:skeleton", + "weight": 10 + }, + { + "name": "quark:wraith", + "weight": 5 + } + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/labyrinth.json b/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/labyrinth.json new file mode 100644 index 0000000..451e188 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/labyrinth.json @@ -0,0 +1,12 @@ +{ + "mobs": [ + { + "name": "minecraft:husk", + "weight": 15 + }, + { + "name": "minecraft:stray", + "weight": 10 + } + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/nexus.json b/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/nexus.json new file mode 100644 index 0000000..8205ff7 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/nexus.json @@ -0,0 +1,8 @@ +{ + "mobs": [ + { + "name": "quark:wraith", + "weight": 5 + } + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/pillager.json b/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/pillager.json new file mode 100644 index 0000000..ef4a401 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/pillager.json @@ -0,0 +1,8 @@ +{ + "mobs": [ + { + "name": "minecraft:pillager", + "weight": 15 + } + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/sunken_ship.json b/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/sunken_ship.json new file mode 100644 index 0000000..1f8d2cb --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/sunken_ship.json @@ -0,0 +1,8 @@ +{ + "mobs": [ + { + "name": "alexsmobs:frilled_shark", + "weight": 15 + } + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/tinkers_workshop.json b/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/tinkers_workshop.json new file mode 100644 index 0000000..1331001 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/tinkers_workshop.json @@ -0,0 +1,16 @@ +{ + "mobs": [ + { + "name": "alexsmobs:centipede_head", + "weight": 10 + }, + { + "name": "minecraft:skeleton", + "weight": 10 + }, + { + "name": "quark:forgotten", + "weight": 5 + } + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/tinkers_workshop_tuff.json b/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/tinkers_workshop_tuff.json new file mode 100644 index 0000000..c9c73a8 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/tinkers_workshop_tuff.json @@ -0,0 +1,8 @@ +{ + "mobs": [ + { + "name": "alexsmobs:rocky_roller", + "weight": 10 + } + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/wizard_tower.json b/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/wizard_tower.json new file mode 100644 index 0000000..8205ff7 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/integrated_structure_spawners/wizard_tower.json @@ -0,0 +1,8 @@ +{ + "mobs": [ + { + "name": "quark:wraith", + "weight": 5 + } + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/abandonedhouse/abandonedhouse.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/abandonedhouse/abandonedhouse.json new file mode 100644 index 0000000..cd2e936 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/abandonedhouse/abandonedhouse.json @@ -0,0 +1,462 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 20 + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "quark:seed_pouch" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:golden_apple" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:music_disc_otherside" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:golden_carrot" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:lead" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:name_tag" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "create:builders_tea" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_iron", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_gold", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_copper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:raw_zinc", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:empty", + "weight": 50 + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:lapis_lazuli", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bucket" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:redstone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:coal", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:rose_quartz", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:pumpkin_pie", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": 3, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:gunpowder", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:rotten_flesh", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:apple", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:wheat", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bread", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:leather", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:brick", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:flint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:wheat_seeds", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:clay_ball", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/abandonedhouse/abandonedhouse_create.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/abandonedhouse/abandonedhouse_create.json new file mode 100644 index 0000000..60e8968 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/abandonedhouse/abandonedhouse_create.json @@ -0,0 +1,313 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 10 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:andesite_alloy", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 10 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:redstone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 9 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:lapis_lazuli", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 9 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:diamond", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:coal", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:zinc_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:rose_quartz", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "name": "create:sand_paper" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:cogwheel", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:large_cogwheel", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:shaft", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:gearbox", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:goggles" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:minecart_coupling", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": 2, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 20, + "name": "create:crushed_raw_iron", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:crushed_raw_gold", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:crushed_raw_copper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:crushed_raw_zinc", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 5 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/abandonedhouse/abandonedhouse_library.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/abandonedhouse/abandonedhouse_library.json new file mode 100644 index 0000000..9d3f332 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/abandonedhouse/abandonedhouse_library.json @@ -0,0 +1,157 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 10 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:paper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:map" + }, + { + "type": "minecraft:item", + "name": "minecraft:compass" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 20 + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 20 + }, + + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:writable_book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:crafting_blueprint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:painting", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "quark:abacus", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_mines/minesbasic.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_mines/minesbasic.json new file mode 100644 index 0000000..aa8abc7 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_mines/minesbasic.json @@ -0,0 +1,395 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:golden_apple" + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "create:honeyed_apple" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:enchanted_golden_apple" + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:name_tag" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_pickaxe" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "quark:trowel" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:builders_tea" + }, + { + "type": "minecraft:empty", + "weight": 5 + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 5, + "max": 15 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:redstone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 9 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:lapis_lazuli", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 9 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:diamond", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:bread", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:glow_berries", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "alexsmobs:lava_bottle" + } + ] + }, + { + "rolls": 2, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:rail", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:powered_rail", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:detector_rail", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "create:controller_rail", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:activator_rail", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:torch", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 16 + }, + "add": false + } + ] + }, + { + "type": "minecraft:empty", + "weight": 3 + } + ] + }, + { + "rolls": 1, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:raw_iron", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:raw_copper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:raw_gold", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:raw_zinc", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:coal", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 10 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_mines/minescreate.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_mines/minescreate.json new file mode 100644 index 0000000..60e8968 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_mines/minescreate.json @@ -0,0 +1,313 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 10 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:andesite_alloy", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 10 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:redstone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 9 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:lapis_lazuli", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 9 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:diamond", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:coal", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:zinc_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:rose_quartz", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "name": "create:sand_paper" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:cogwheel", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:large_cogwheel", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:shaft", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:gearbox", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:goggles" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:minecart_coupling", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": 2, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 20, + "name": "create:crushed_raw_iron", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:crushed_raw_gold", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:crushed_raw_copper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:crushed_raw_zinc", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 5 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_mines/mineshall.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_mines/mineshall.json new file mode 100644 index 0000000..1cc2ce6 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_mines/mineshall.json @@ -0,0 +1,749 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 2, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:golden_apple" + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "create:honeyed_apple" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:enchanted_golden_apple" + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:name_tag" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:ender_pearl" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:music_disc_mellohi" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "quark:trowel" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:lava_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:builders_tea" + }, + { + "type": "item", + "name": "alexsmobs:ghostly_pickaxe", + "weight": 5, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 5, + "max": 15 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:redstone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 9 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:lapis_lazuli", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 9 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:diamond", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:black_candle", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:centipede_leg", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "alexsmobs:lava_bottle" + } + ] + }, + { + "rolls": 1, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:rail", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:powered_rail", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:detector_rail", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "create:controller_rail", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:activator_rail", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:torch", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 16 + }, + "add": false + } + ] + }, + { + "type": "minecraft:empty", + "weight": 3 + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:diamond_sword", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:empty", + "weight": 7 + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:diamond_boots", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:diamond_chestplate", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:diamond_leggings", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:diamond_helmet", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:diamond_pickaxe", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:diamond_shovel", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_sword", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:iron_boots", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:iron_chestplate", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:iron_leggings", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:iron_helmet", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_pickaxe", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_axe", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:diamond_axe", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_shovel", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + } + ] + }, + { + "rolls": 1, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:raw_iron", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:raw_copper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:raw_gold", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:raw_zinc", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:raw_gold_block", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:raw_iron_block", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:raw_copper_block", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:raw_zinc_block", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:coal", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 10 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_portal/ancient_portal_nether.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_portal/ancient_portal_nether.json new file mode 100644 index 0000000..400112b --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_portal/ancient_portal_nether.json @@ -0,0 +1,350 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 4, + "max": 9 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 40, + "name": "minecraft:obsidian", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "create:powdered_obsidian", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:crying_obsidian", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 40, + "name": "minecraft:soul_torch", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 40, + "name": "minecraft:flint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 40, + "name": "minecraft:iron_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 9, + "max": 18 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 40, + "name": "supplementaries:ash", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 9, + "max": 18 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "create:rose_quartz", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 40, + "name": "minecraft:flint_and_steel" + }, + { + "type": "minecraft:item", + "weight": 40, + "name": "minecraft:fire_charge" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:golden_apple" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:gold_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 24 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:golden_sword", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:golden_axe", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:golden_hoe", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:golden_shovel", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:golden_pickaxe", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:golden_boots", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:golden_chestplate", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:golden_helmet", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:golden_leggings", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "supplementaries:bomb" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:glistering_melon_slice", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 12 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:golden_horse_armor" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:golden_carrot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 12 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:clock" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:gold_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:bell" + }, + { + "type": "minecraft:item", + "name": "minecraft:enchanted_golden_apple" + }, + { + "type": "minecraft:item", + "name": "minecraft:gold_block", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_portal/ancient_portal_overworld.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_portal/ancient_portal_overworld.json new file mode 100644 index 0000000..40b160d --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_portal/ancient_portal_overworld.json @@ -0,0 +1,350 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 4, + "max": 9 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 40, + "name": "minecraft:obsidian", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "create:powdered_obsidian", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:crying_obsidian", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 40, + "name": "minecraft:soul_torch", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 40, + "name": "minecraft:flint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 40, + "name": "minecraft:iron_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 9, + "max": 18 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 40, + "name": "supplementaries:ash", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 9, + "max": 18 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "quark:black_corundum", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 40, + "name": "minecraft:flint_and_steel" + }, + { + "type": "minecraft:item", + "weight": 40, + "name": "minecraft:fire_charge" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:golden_apple" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:gold_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 24 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:golden_sword", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:golden_axe", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:golden_hoe", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:golden_shovel", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:golden_pickaxe", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:golden_boots", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:golden_chestplate", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:golden_helmet", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:golden_leggings", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "supplementaries:bomb" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:glistering_melon_slice", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 12 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:golden_horse_armor" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:golden_carrot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 12 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:clock" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:gold_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:bell" + }, + { + "type": "minecraft:item", + "name": "minecraft:enchanted_golden_apple" + }, + { + "type": "minecraft:item", + "name": "minecraft:gold_block", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_statue/ancient_statue_jungle.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_statue/ancient_statue_jungle.json new file mode 100644 index 0000000..8656752 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_statue/ancient_statue_jungle.json @@ -0,0 +1,400 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 30 + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "quark:seed_pouch" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_iron", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_gold", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_copper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:raw_zinc", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:empty", + "weight": 50 + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:lapis_lazuli", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bucket" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:redstone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:coal", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:rose_quartz", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": 3, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:gunpowder", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:rotten_flesh", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bamboo", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:rope", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:cocoa_beans", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "alexsmobs:banana_peel", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:flint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:melon_seeds", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:clay_ball", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_statue/ancient_statue_treasure_desert.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_statue/ancient_statue_treasure_desert.json new file mode 100644 index 0000000..627d2b4 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_statue/ancient_statue_treasure_desert.json @@ -0,0 +1,348 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:name_tag", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:raw_iron", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 9 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:raw_gold", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 9 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:raw_copper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 9 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:diamond", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:spider_eye", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "alexsmobs:rattlesnake_rattle", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:rotten_flesh", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:guster_eye" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:vine_lasso" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:golden_apple" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:enchanted_golden_apple" + }, + { + "type": "minecraft:empty", + "weight": 15 + } + ] + }, + { + "rolls": 4, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:gunpowder", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:rotten_flesh", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:paper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:coal", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:dried_kelp", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:sand", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_statue/ancient_statue_treasure_jungle.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_statue/ancient_statue_treasure_jungle.json new file mode 100644 index 0000000..c2a7e94 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_statue/ancient_statue_treasure_jungle.json @@ -0,0 +1,195 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 4, + "max": 7 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:diamond", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:iron_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:gold_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "create:zinc_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:bamboo", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "alexsmobs:banana", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 16, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "name": "minecraft:iron_horse_armor" + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_horse_armor" + }, + { + "type": "minecraft:item", + "name": "minecraft:diamond_horse_armor" + }, + { + "type": "minecraft:item", + "name": "supplementaries:slingshot" + }, + { + "type": "minecraft:item", + "name": "supplementaries:rope_arrow" + }, + { + "type": "minecraft:item", + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_statue/ancient_statue_treasure_plains.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_statue/ancient_statue_treasure_plains.json new file mode 100644 index 0000000..b1c5a06 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/ancient_statue/ancient_statue_treasure_plains.json @@ -0,0 +1,195 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 3, + "max": 7 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:diamond", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:iron_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:gold_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "create:zinc_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:wheat", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:wheat_seeds", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 16, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "name": "minecraft:iron_horse_armor" + }, + { + "type": "minecraft:item", + "name": "minecraft:golden_horse_armor" + }, + { + "type": "minecraft:item", + "name": "minecraft:diamond_horse_armor" + }, + { + "type": "minecraft:item", + "name": "supplementaries:slingshot" + }, + { + "type": "minecraft:item", + "name": "supplementaries:rope_arrow" + }, + { + "type": "minecraft:item", + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/apothecary_abode/apothecary_abode.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/apothecary_abode/apothecary_abode.json new file mode 100644 index 0000000..47bfa01 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/apothecary_abode/apothecary_abode.json @@ -0,0 +1,525 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:splash_potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_poison" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:long_strength" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_regeneration" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:splash_potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_harming" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:long_leaping" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:slow_falling" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_healing" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:long_invisibility" + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "create:wrench" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "supplementaries:wrench" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "quark:bottled_cloud" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:name_tag" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:diamond", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 4 + } + } + ] + } + ] + }, + { + "rolls": 2, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "quark:gravisand", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "create:fluid_pipe", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "create:crushed_raw_copper", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:amethyst_shard", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:amethyst_cluster", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:golden_apple", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:golden_carrot", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "create:rose_quartz", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:glow_ink_sac", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "create:powdered_obsidian", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 3 + } + } + ] + } + ] + }, + { + "rolls": 4, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:gunpowder", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:sweet_berries", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 4 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:glow_berries", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 4 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:glowstone_dust", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:redstone", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:brown_mushroom", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:red_mushroom", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "quark:glow_shroom", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:warped_fungus", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:crimson_fungus", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:nether_wart", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "quark:dirty_shard", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "create:raw_zinc", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/apothecary_abode/apothecary_abode_books.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/apothecary_abode/apothecary_abode_books.json new file mode 100644 index 0000000..118a93a --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/apothecary_abode/apothecary_abode_books.json @@ -0,0 +1,157 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 10 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:paper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:map" + }, + { + "type": "minecraft:item", + "name": "minecraft:compass" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 20 + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 20 + }, + + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:writable_book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:crafting_blueprint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:painting", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "quark:abacus", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/bazaar/bazaar.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/bazaar/bazaar.json new file mode 100644 index 0000000..dc5faec --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/bazaar/bazaar.json @@ -0,0 +1,499 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 20 + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "quark:seed_pouch" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "supplementaries:sack" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:music_disc_otherside" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "idas:music_disc_calidum" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:golden_carrot" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:lead" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:name_tag" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "create:builders_tea" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_iron", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_gold", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_copper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:raw_zinc", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:empty", + "weight": 50 + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:lapis_lazuli", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bucket" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:redstone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:coal", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:rose_quartz", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": 3, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:gunpowder", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:rotten_flesh", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:apple", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "quark:dirty_shard", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bread", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:leather", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:brick", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:flint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:wheat_seeds", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:clay_ball", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:ash", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:rope", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:flax", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/bazaar/bazaar_food.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/bazaar/bazaar_food.json new file mode 100644 index 0000000..f627bae --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/bazaar/bazaar_food.json @@ -0,0 +1,244 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 5, + "entries": [ + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:glass_bottle", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:water" + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:honey_bottle" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:honeyed_apple", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "quark:dirty_shard", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:flower_pot", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 4 + } + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:pumpkin_pie" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:cake" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:milk_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:honey_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:rabbit_stew" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:mushroom_stew" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:beetroot_soup" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:builders_tea" + } + ] + }, + { + "rolls": 4, + "entries": [ + { + "type": "minecraft:item", + "weight": 3, + "name": "create:wheat_flour", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:dough", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:egg", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 7 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:sugar", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:carrot", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:potato", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:bread", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 7 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:baked_potato", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/bazaar/bazaar_tools.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/bazaar/bazaar_tools.json new file mode 100644 index 0000000..495834f --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/bazaar/bazaar_tools.json @@ -0,0 +1,275 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:splash_potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_poison" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:long_strength" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:splash_potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_harming" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:long_invisibility" + } + ] + } + ] + }, + { + "rolls": 2, + "entries": [ + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:flint_and_steel" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:shears" + }, + { + "type": "item", + "name": "minecraft:iron_leggings", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_boots", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_helmet", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_chestplate", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:crossbow", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_axe", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:fishing_rod", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "supplementaries:slingshot", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + } + ] + }, + { + "rolls": 3, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:arrow", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:spectral_arrow", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:tripwire_hook", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:chain", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_bars", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 7 + } + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/bearclaw_inn/bearclaw_inn_bedroom.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/bearclaw_inn/bearclaw_inn_bedroom.json new file mode 100644 index 0000000..92e0f5d --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/bearclaw_inn/bearclaw_inn_bedroom.json @@ -0,0 +1,564 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:paper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:map" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:compass" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:clock" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:banner_pattern_bear" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 20 + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:goblet", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:rope", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:soap", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 15 + }, + + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:writable_book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:crafting_blueprint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "alexsmobs:frontier_cap", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_axe", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_hoe", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_shovel", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_pickaxe", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:crossbow", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:bow", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:fishing_rod", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:carrot_on_a_stick", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 10 + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:bear_fur", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "alexsmobs:dropbear_claw", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 20 + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_iron", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_gold", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_copper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:raw_zinc", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 7, + "name": "minecraft:experience_bottle" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:leather", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:arrow", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:gold_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/bearclaw_inn/bearclaw_inn_food.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/bearclaw_inn/bearclaw_inn_food.json new file mode 100644 index 0000000..59d22dc --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/bearclaw_inn/bearclaw_inn_food.json @@ -0,0 +1,264 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 4, + "entries": [ + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:glass_bottle", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:water" + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "quark:dirty_shard", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:flower_pot", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "alexsmobs:fish_oil" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:honey_bottle" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:pumpkin_pie" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:cake" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:milk_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:shrimp_fried_rice" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:boiled_emu_egg" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:honey_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:honeyed_apple" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:rabbit_stew" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:mushroom_stew" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:beetroot_soup" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:builders_tea" + } + ] + }, + { + "rolls": 4, + "entries": [ + { + "type": "minecraft:item", + "weight": 3, + "name": "create:wheat_flour", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:dough", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:egg", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 7 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:sugar", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:carrot", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:potato", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:bread", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 7 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:baked_potato", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "alexsmobs:bear_fur", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 3 + } + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/beekeepers_house/beekeepers_bedroom.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/beekeepers_house/beekeepers_bedroom.json new file mode 100644 index 0000000..ac453e7 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/beekeepers_house/beekeepers_bedroom.json @@ -0,0 +1,358 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:paper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:map" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:compass" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:clock" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:flower_banner_pattern" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 20 + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:goblet", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:rope", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:soap", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 15 + }, + + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:writable_book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:crafting_blueprint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 10 + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:bear_fur", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "supplementaries:flower_box", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 7, + "name": "minecraft:experience_bottle" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:leather", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:honeycomb", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:arrow", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:gold_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/beekeepers_house/beekeepers_food.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/beekeepers_house/beekeepers_food.json new file mode 100644 index 0000000..bc08d3f --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/beekeepers_house/beekeepers_food.json @@ -0,0 +1,249 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 5, + "entries": [ + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:glass_bottle", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:water" + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:honey_bottle" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:honeyed_apple", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "quark:dirty_shard", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:flower_pot", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:honeycomb" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:pumpkin_pie" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:cake" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:milk_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:honey_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:rabbit_stew" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:mushroom_stew" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:beetroot_soup" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:builders_tea" + } + ] + }, + { + "rolls": 4, + "entries": [ + { + "type": "minecraft:item", + "weight": 3, + "name": "create:wheat_flour", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:dough", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:egg", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 7 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:sugar", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:carrot", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:potato", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:bread", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 7 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:baked_potato", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/beekeepers_house/beekeepers_tools.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/beekeepers_house/beekeepers_tools.json new file mode 100644 index 0000000..495834f --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/beekeepers_house/beekeepers_tools.json @@ -0,0 +1,275 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:splash_potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_poison" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:long_strength" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:splash_potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_harming" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:long_invisibility" + } + ] + } + ] + }, + { + "rolls": 2, + "entries": [ + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:flint_and_steel" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:shears" + }, + { + "type": "item", + "name": "minecraft:iron_leggings", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_boots", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_helmet", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_chestplate", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:crossbow", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_axe", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:fishing_rod", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "supplementaries:slingshot", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + } + ] + }, + { + "rolls": 3, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:arrow", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:spectral_arrow", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:tripwire_hook", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:chain", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_bars", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 7 + } + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/brickhouse/brickhouse.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/brickhouse/brickhouse.json new file mode 100644 index 0000000..cd2e936 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/brickhouse/brickhouse.json @@ -0,0 +1,462 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 20 + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "quark:seed_pouch" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:golden_apple" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:music_disc_otherside" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:golden_carrot" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:lead" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:name_tag" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "create:builders_tea" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_iron", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_gold", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_copper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:raw_zinc", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:empty", + "weight": 50 + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:lapis_lazuli", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bucket" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:redstone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:coal", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:rose_quartz", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:pumpkin_pie", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": 3, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:gunpowder", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:rotten_flesh", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:apple", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:wheat", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bread", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:leather", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:brick", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:flint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:wheat_seeds", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:clay_ball", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/brickhouse/brickhouse_library.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/brickhouse/brickhouse_library.json new file mode 100644 index 0000000..9d3f332 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/brickhouse/brickhouse_library.json @@ -0,0 +1,157 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 10 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:paper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:map" + }, + { + "type": "minecraft:item", + "name": "minecraft:compass" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 20 + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 20 + }, + + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:writable_book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:crafting_blueprint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:painting", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "quark:abacus", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/brickhouse/brickhouse_windmill.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/brickhouse/brickhouse_windmill.json new file mode 100644 index 0000000..279f1a0 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/brickhouse/brickhouse_windmill.json @@ -0,0 +1,107 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 5, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bread", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:wheat_flour", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:wheat_seeds", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:dough", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:wheat", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/castle/castle.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/castle/castle.json new file mode 100644 index 0000000..cd2e936 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/castle/castle.json @@ -0,0 +1,462 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 20 + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "quark:seed_pouch" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:golden_apple" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:music_disc_otherside" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:golden_carrot" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:lead" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:name_tag" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "create:builders_tea" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_iron", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_gold", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_copper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:raw_zinc", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:empty", + "weight": 50 + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:lapis_lazuli", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bucket" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:redstone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:coal", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:rose_quartz", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:pumpkin_pie", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": 3, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:gunpowder", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:rotten_flesh", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:apple", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:wheat", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bread", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:leather", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:brick", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:flint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:wheat_seeds", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:clay_ball", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/castle/castle_library.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/castle/castle_library.json new file mode 100644 index 0000000..9d3f332 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/castle/castle_library.json @@ -0,0 +1,157 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 10 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:paper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:map" + }, + { + "type": "minecraft:item", + "name": "minecraft:compass" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 20 + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 20 + }, + + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:writable_book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:crafting_blueprint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:painting", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "quark:abacus", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/castle/castle_throne.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/castle/castle_throne.json new file mode 100644 index 0000000..2b33097 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/castle/castle_throne.json @@ -0,0 +1,267 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 5, + "max": 8 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:copper_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 5, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:diamond", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:iron_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 5, + "max": 10 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:gold_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 5, + "max": 10 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:golden_apple", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_sword", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_boots", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_chestplate", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_leggings", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_helmet", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_pickaxe", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_shovel", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "create:honeyed_apple", + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ] + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 8, + "max": 15 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 6, + "name": "create:rose_quartz", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 7, + "name": "minecraft:glow_berries", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/cottage/cottage.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/cottage/cottage.json new file mode 100644 index 0000000..e220dec --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/cottage/cottage.json @@ -0,0 +1,220 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stone_axe" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:wooden_axe" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:stone_pickaxe" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:wooden_pickaxe" + } + ] + }, + { + "rolls": 3, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + }, + "add": false + } + ], + "name": "minecraft:apple" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + }, + "add": false + } + ], + "name": "minecraft:bread" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + }, + "add": false + } + ], + "name": "minecraft:salmon" + } + ] + }, + { + "rolls": 4.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 12.0 + }, + "add": false + } + ], + "name": "minecraft:stick" + }, + { + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 12.0 + }, + "add": false + } + ], + "name": "minecraft:oak_planks" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 3.0 + }, + "add": false + } + ], + "name": "minecraft:oak_log" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 3.0 + }, + "add": false + } + ], + "name": "minecraft:spruce_log" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 3.0 + }, + "add": false + } + ], + "name": "minecraft:birch_log" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 3.0 + }, + "add": false + } + ], + "name": "minecraft:jungle_log" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 3.0 + }, + "add": false + } + ], + "name": "minecraft:acacia_log" + }, + { + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 3.0 + }, + "add": false + } + ], + "name": "minecraft:dark_oak_log" + } + ] + } + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/enchantingtower/enchantingtower_basic.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/enchantingtower/enchantingtower_basic.json new file mode 100644 index 0000000..cd2e936 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/enchantingtower/enchantingtower_basic.json @@ -0,0 +1,462 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 20 + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "quark:seed_pouch" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:golden_apple" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:music_disc_otherside" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:golden_carrot" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:lead" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:name_tag" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "create:builders_tea" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_iron", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_gold", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_copper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:raw_zinc", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:empty", + "weight": 50 + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:lapis_lazuli", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bucket" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:redstone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:coal", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:rose_quartz", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:pumpkin_pie", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": 3, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:gunpowder", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:rotten_flesh", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:apple", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:wheat", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bread", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:leather", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:brick", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:flint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:wheat_seeds", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:clay_ball", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/enchantingtower/enchantingtower_library.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/enchantingtower/enchantingtower_library.json new file mode 100644 index 0000000..9d3f332 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/enchantingtower/enchantingtower_library.json @@ -0,0 +1,157 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 10 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:paper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:map" + }, + { + "type": "minecraft:item", + "name": "minecraft:compass" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 20 + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 20 + }, + + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:writable_book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:crafting_blueprint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:painting", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "quark:abacus", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/enchantingtower/enchantingtower_top.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/enchantingtower/enchantingtower_top.json new file mode 100644 index 0000000..e6d1592 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/enchantingtower/enchantingtower_top.json @@ -0,0 +1,266 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_poison" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:long_strength" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_regeneration" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:slow_falling" + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "name": "quark:slime_in_a_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "quark:abacus" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:name_tag" + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:diamond", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 2 + } + } + ] + } + ] + }, + { + "rolls": 2, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "quark:gravisand", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:amethyst_shard", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:golden_apple", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "create:rose_quartz", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "create:powdered_obsidian", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 3 + } + } + ] + } + ] + }, + { + "rolls": 4, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:rotten_flesh", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:nether_wart", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "create:raw_zinc", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/farmhouse/farmhouse.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/farmhouse/farmhouse.json new file mode 100644 index 0000000..ee97eeb --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/farmhouse/farmhouse.json @@ -0,0 +1,379 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:wheat_seeds", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:beetroot_seeds", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:melon_seeds", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:pumpkin_seeds", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:carrot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:potato", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:melon_slice", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:bone_meal", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:poisonous_potato", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:wheat", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:tree_fertilizer", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:wheat_flour", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 5 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 15 + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_hoe", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:stone_hoe", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "quark:seed_pouch", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "quark:music_disc_crickets", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "quark:music_disc_fire", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:carrot_on_a_stick", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 10 + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 5, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/farmhouse/farmhouse_bedroom.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/farmhouse/farmhouse_bedroom.json new file mode 100644 index 0000000..6254a84 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/farmhouse/farmhouse_bedroom.json @@ -0,0 +1,307 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:paper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:map" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:compass" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:clock" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 20 + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 15 + }, + + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:writable_book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:crafting_blueprint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_axe", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_hoe", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_shovel", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_pickaxe", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:carrot_on_a_stick", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 7, + "name": "minecraft:experience_bottle" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:leather", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:arrow", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:gold_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/farmhouse/farmhouse_food.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/farmhouse/farmhouse_food.json new file mode 100644 index 0000000..95b2230 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/farmhouse/farmhouse_food.json @@ -0,0 +1,240 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 4, + "entries": [ + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:glass_bottle", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:water" + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "quark:dirty_shard", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:flower_pot", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "alexsmobs:fish_oil" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:honey_bottle" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:pumpkin_pie" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:cake" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:milk_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:cookie" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:honeyed_apple" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:rabbit_stew" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:mushroom_stew" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:beetroot_soup" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:builders_tea" + } + ] + }, + { + "rolls": 4, + "entries": [ + { + "type": "minecraft:item", + "weight": 3, + "name": "create:wheat_flour", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:dough", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:egg", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 7 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:sugar", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:carrot", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:potato", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:bread", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 7 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:baked_potato", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/farmhouse/farmhouse_mill.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/farmhouse/farmhouse_mill.json new file mode 100644 index 0000000..279f1a0 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/farmhouse/farmhouse_mill.json @@ -0,0 +1,107 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 5, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bread", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:wheat_flour", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:wheat_seeds", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:dough", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:wheat", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/fishermans_lodge/fishermans_lodge.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/fishermans_lodge/fishermans_lodge.json new file mode 100644 index 0000000..a58e90a --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/fishermans_lodge/fishermans_lodge.json @@ -0,0 +1,227 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:axolotl_bucket" + }, + { + "type": "minecraft:empty", + "weight": 10 + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:pufferfish_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:lobster_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:platypus_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:cod_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:salmon_bucket" + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:name_tag" + } + ] + }, + { + "rolls": 2, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:cod", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:salmon", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "quark:crab_leg", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "alexsmobs:raw_catfish", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:fish_bones", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + } + ] + }, + { + "rolls": 4, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:rotten_flesh", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:feather", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:leather", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "alexsmobs:raccoon_tail", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 10 + } + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/fishermans_lodge/fishermans_lodge_tools.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/fishermans_lodge/fishermans_lodge_tools.json new file mode 100644 index 0000000..a2d1d03 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/fishermans_lodge/fishermans_lodge_tools.json @@ -0,0 +1,256 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:splash_potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_poison" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:long_strength" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:splash_potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_harming" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:long_invisibility" + } + ] + } + ] + }, + { + "rolls": 2, + "entries": [ + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:flint_and_steel" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:saddle" + }, + { + "type": "item", + "name": "minecraft:iron_leggings", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_boots", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_helmet", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_chestplate", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:crossbow", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_axe", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:fishing_rod", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + } + ] + }, + { + "rolls": 3, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:arrow", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:spectral_arrow", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:tripwire_hook", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:chain", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_bars", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 7 + } + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/haunted_manor/haunted_manor.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/haunted_manor/haunted_manor.json new file mode 100644 index 0000000..7ead363 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/haunted_manor/haunted_manor.json @@ -0,0 +1,252 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:skeleton_skull" + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:carved_pumpkin" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:golden_apple" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:music_disc_11" + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:name_tag" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_iron", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:raw_gold", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "alexsmobs:lobster_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:elastic_tendon" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:blood_sac", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:rope", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:redstone_block", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": 4, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:redstone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:rotten_flesh", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:pumpkin_seeds", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:cobweb", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 8 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/haunted_manor/haunted_manor_library.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/haunted_manor/haunted_manor_library.json new file mode 100644 index 0000000..9d3f332 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/haunted_manor/haunted_manor_library.json @@ -0,0 +1,157 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 10 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:paper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:map" + }, + { + "type": "minecraft:item", + "name": "minecraft:compass" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 20 + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 20 + }, + + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:writable_book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:crafting_blueprint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:painting", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "quark:abacus", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/haunted_manor/haunted_manor_tools.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/haunted_manor/haunted_manor_tools.json new file mode 100644 index 0000000..516d3c9 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/haunted_manor/haunted_manor_tools.json @@ -0,0 +1,288 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:empty", + "weight": 1 + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:splash_potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_poison" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:long_strength" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:splash_potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_harming" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:long_invisibility" + } + ] + } + ] + }, + { + "rolls": 2, + "entries": [ + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:flint_and_steel" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:saddle" + }, + { + "type": "item", + "name": "minecraft:iron_leggings", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_boots", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_helmet", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_chestplate", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:crossbow", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_axe", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:fishing_rod", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "supplementaries:slingshot", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + } + ] + }, + { + "rolls": 3, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:arrow", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:spectral_arrow", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:tripwire_hook", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "supplementaries:rope", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "supplementaries:candle_holder_black", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:chain", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_bars", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 10 + } + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/haunted_manor/haunted_manor_treasure.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/haunted_manor/haunted_manor_treasure.json new file mode 100644 index 0000000..c3dec3d --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/haunted_manor/haunted_manor_treasure.json @@ -0,0 +1,251 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 5, + "max": 8 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:copper_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 5, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:diamond", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:iron_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 5, + "max": 10 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:gold_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 5, + "max": 10 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:golden_apple", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_sword", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_boots", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_chestplate", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_leggings", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:diamond_helmet", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_pickaxe", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:diamond_shovel", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 8, + "max": 15 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "supplementaries:candy", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 8, + "max": 15 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 6, + "name": "create:rose_quartz", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/hauntedhouse/bophauntedhouse.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/hauntedhouse/bophauntedhouse.json new file mode 100644 index 0000000..6a38a82 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/hauntedhouse/bophauntedhouse.json @@ -0,0 +1,247 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:skeleton_skull" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:golden_apple" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:music_disc_11" + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:name_tag" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "alexsmobs:blood_sprayer" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_iron", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:raw_gold", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "biomesoplenty:hair", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "biomesoplenty:blood_bucket" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "alexsmobs:blood_sac", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:redstone_block", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "biomesoplenty:flesh_tendons", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": 4, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:redstone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:rotten_flesh", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "biomesoplenty:flesh", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 8 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/hauntedhouse/hauntedhouse.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/hauntedhouse/hauntedhouse.json new file mode 100644 index 0000000..b1420c9 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/hauntedhouse/hauntedhouse.json @@ -0,0 +1,247 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:skeleton_skull" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:golden_apple" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:music_disc_11" + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:name_tag" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "alexsmobs:blood_sprayer" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_iron", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:raw_gold", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:nether_wart_block", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "alexsmobs:lobster_bucket" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "alexsmobs:blood_sac", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:redstone_block", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:weeping_vines", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": 4, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:redstone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:rotten_flesh", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:nether_wart", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 8 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/hermits_hollow/hollow_bedroom.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/hermits_hollow/hollow_bedroom.json new file mode 100644 index 0000000..6254a84 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/hermits_hollow/hollow_bedroom.json @@ -0,0 +1,307 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:paper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:map" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:compass" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:clock" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 20 + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 15 + }, + + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:writable_book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:crafting_blueprint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_axe", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_hoe", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_shovel", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_pickaxe", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:carrot_on_a_stick", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 7, + "name": "minecraft:experience_bottle" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:leather", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:arrow", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:gold_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/hermits_hollow/hollow_food.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/hermits_hollow/hollow_food.json new file mode 100644 index 0000000..95b2230 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/hermits_hollow/hollow_food.json @@ -0,0 +1,240 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 4, + "entries": [ + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:glass_bottle", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:water" + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "quark:dirty_shard", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:flower_pot", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 4 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "alexsmobs:fish_oil" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:honey_bottle" + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:pumpkin_pie" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:cake" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:milk_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:cookie" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:honeyed_apple" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:rabbit_stew" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:mushroom_stew" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:beetroot_soup" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:builders_tea" + } + ] + }, + { + "rolls": 4, + "entries": [ + { + "type": "minecraft:item", + "weight": 3, + "name": "create:wheat_flour", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:dough", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:egg", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 7 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:sugar", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:carrot", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:potato", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:bread", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 7 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:baked_potato", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/hunters_cabin/hunters_cabin.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/hunters_cabin/hunters_cabin.json new file mode 100644 index 0000000..3100398 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/hunters_cabin/hunters_cabin.json @@ -0,0 +1,350 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:axolotl_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:pufferfish_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:lobster_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:platypus_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:frilled_shark_bucket" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "alexsmobs:moose_antler" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "alexsmobs:falconry_hood" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "alexsmobs:falconry_glove" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "alexsmobs:vine_lasso" + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:name_tag" + } + ] + }, + { + "rolls": 2, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:porkchop", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:beef", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:chicken", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:rabbit", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:cod", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:salmon", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "alexsmobs:kangaroo_meat", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "alexsmobs:moose_ribs", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "quark:crab_leg", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "alexsmobs:raw_catfish", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + } + ] + }, + { + "rolls": 4, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:rotten_flesh", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:feather", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:leather", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "alexsmobs:bear_fur", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "alexsmobs:bison_fur", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "alexsmobs:raccoon_tail", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "alexsmobs:emu_feather", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 10 + } + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/hunters_cabin/hunters_cabin_library.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/hunters_cabin/hunters_cabin_library.json new file mode 100644 index 0000000..9d3f332 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/hunters_cabin/hunters_cabin_library.json @@ -0,0 +1,157 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 10 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:paper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:map" + }, + { + "type": "minecraft:item", + "name": "minecraft:compass" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 20 + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 20 + }, + + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:writable_book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:crafting_blueprint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:painting", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "quark:abacus", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/hunters_cabin/hunters_cabin_tools.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/hunters_cabin/hunters_cabin_tools.json new file mode 100644 index 0000000..1a2d59f --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/hunters_cabin/hunters_cabin_tools.json @@ -0,0 +1,270 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:splash_potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_poison" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:long_strength" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:splash_potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_harming" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:long_invisibility" + } + ] + } + ] + }, + { + "rolls": 2, + "entries": [ + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:flint_and_steel" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:saddle" + }, + { + "type": "item", + "name": "minecraft:iron_leggings", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_boots", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_helmet", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_chestplate", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:crossbow", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_axe", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:fishing_rod", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "supplementaries:slingshot", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + } + ] + }, + { + "rolls": 3, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:arrow", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:spectral_arrow", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:tripwire_hook", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:chain", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_bars", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 7 + } + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/labyrinth/labyrinth.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/labyrinth/labyrinth.json new file mode 100644 index 0000000..bc3b69d --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/labyrinth/labyrinth.json @@ -0,0 +1,401 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:name_tag", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:raw_iron", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 9 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:raw_gold", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 9 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:raw_copper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 9 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:diamond", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:spider_eye", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "alexsmobs:rattlesnake_rattle", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:rotten_flesh", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "idas:music_disc_calidum" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "idas:disc_fragment_slither", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:guster_eye" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:vine_lasso" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:golden_apple" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:enchanted_golden_apple" + }, + { + "type": "minecraft:empty", + "weight": 15 + } + ] + }, + { + "rolls": 4, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:gunpowder", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:rotten_flesh", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:paper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:stick", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:coal", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "quark:moss_paste", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:dried_kelp", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:sand", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/labyrinth/labyrinth_croc.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/labyrinth/labyrinth_croc.json new file mode 100644 index 0000000..359a354 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/labyrinth/labyrinth_croc.json @@ -0,0 +1,242 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "alexsmobs:crocodile_scute", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:rocky_shell", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:ancient_dart", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:crocodile_egg", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:diamond", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "quark:slime_in_a_bucket", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:vine_lasso" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:golden_apple" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:enchanted_golden_apple" + }, + { + "type": "minecraft:empty", + "weight": 10 + } + ] + }, + { + "rolls": 4, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:gunpowder", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:slime_ball", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:leather", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 6 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/labyrinth/labyrinth_library.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/labyrinth/labyrinth_library.json new file mode 100644 index 0000000..9d3f332 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/labyrinth/labyrinth_library.json @@ -0,0 +1,157 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 10 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:paper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:map" + }, + { + "type": "minecraft:item", + "name": "minecraft:compass" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 20 + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 20 + }, + + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:writable_book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:crafting_blueprint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:painting", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "quark:abacus", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/labyrinth/labyrinth_tomb.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/labyrinth/labyrinth_tomb.json new file mode 100644 index 0000000..560afd4 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/labyrinth/labyrinth_tomb.json @@ -0,0 +1,403 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 4, + "max": 6 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 5, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:diamond", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "alexsmobs:bone_serpent_tooth", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:lapis_lazuli", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "alexsmobs:rattlesnake_rattle", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 10, + "max": 25 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:golden_apple" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:enchanted_golden_apple" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "alexsmobs:poison_bottle" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "idas:disc_fragment_slither", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": 4, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:gold_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:golden_carrot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:experience_bottle", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:rose_quartz", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:netherite_scrap", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:diamond_sword", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:diamond_boots", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:diamond_chestplate", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:diamond_leggings", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:diamond_helmet", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:diamond_pickaxe", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:diamond_shovel", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:totem_of_undying" + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/labyrinth/labyrinth_treasure.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/labyrinth/labyrinth_treasure.json new file mode 100644 index 0000000..2b33097 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/labyrinth/labyrinth_treasure.json @@ -0,0 +1,267 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 5, + "max": 8 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:copper_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 5, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:diamond", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:iron_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 5, + "max": 10 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:gold_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 5, + "max": 10 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:golden_apple", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_sword", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_boots", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_chestplate", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_leggings", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_helmet", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_pickaxe", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_shovel", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 20, + "max": 39 + }, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "create:honeyed_apple", + "functions": [ + { + "function": "minecraft:set_count", + "count": 1 + } + ] + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 8, + "max": 15 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 6, + "name": "create:rose_quartz", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 7, + "name": "minecraft:glow_berries", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + } + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/necromancers_spire/necromancers_spire.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/necromancers_spire/necromancers_spire.json new file mode 100644 index 0000000..81ca75c --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/necromancers_spire/necromancers_spire.json @@ -0,0 +1,305 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_poison" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:long_strength" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_regeneration" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:fire_resistance" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "alexsmobs:lava_vision" + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:warped_mixture" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:lava_bottle" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:name_tag" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:diamond", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 2 + } + } + ] + } + ] + }, + { + "rolls": 2, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "quark:gravisand", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:nether_wart", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:golden_apple", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "create:rose_quartz", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "alexsmobs:warped_muscle", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "create:powdered_obsidian", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 3 + } + } + ] + } + ] + }, + { + "rolls": 4, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 12 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:rotten_flesh", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "supplementaries:ash", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:nether_wart", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "create:raw_zinc", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/nexus/nexus.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/nexus/nexus.json new file mode 100644 index 0000000..dfecb54 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/nexus/nexus.json @@ -0,0 +1,296 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_poison" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:long_strength" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_regeneration" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:fire_resistance" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "alexsmobs:lava_vision" + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:warped_mixture" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:lava_bottle" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:name_tag" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:flint_and_steel" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:diamond", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 2 + } + } + ] + } + ] + }, + { + "rolls": 2, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "quark:gravisand", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:nether_wart", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:golden_apple", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "create:rose_quartz", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "create:powdered_obsidian", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 3 + } + } + ] + } + ] + }, + { + "rolls": 4, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 12 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:rotten_flesh", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "supplementaries:ash", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:nether_wart", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "create:raw_zinc", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/pillager_camp/pillager_camp.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/pillager_camp/pillager_camp.json new file mode 100644 index 0000000..fb7b431 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/pillager_camp/pillager_camp.json @@ -0,0 +1,354 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:paper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:map" + }, + { + "type": "minecraft:item", + "name": "minecraft:compass" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 30 + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:goblet", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:rope", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:soap", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 15 + }, + + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:writable_book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "alexsmobs:frontier_cap", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:iron_axe", + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.4, + "max": 0.6 + } + }, + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 5, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:crossbow", + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.4, + "max": 0.6 + } + }, + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 5, + "max": 10 + } + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:dark_oak_log", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 3 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 3 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:experience_bottle" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:arrow", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:tripwire_hook", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/pillager_fortress/pillager_basic.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/pillager_fortress/pillager_basic.json new file mode 100644 index 0000000..cd2e936 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/pillager_fortress/pillager_basic.json @@ -0,0 +1,462 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 20 + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "quark:seed_pouch" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:golden_apple" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:music_disc_otherside" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:golden_carrot" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:lead" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:name_tag" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "create:builders_tea" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_iron", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_gold", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_copper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:raw_zinc", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:empty", + "weight": 50 + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:lapis_lazuli", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bucket" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:redstone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:coal", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:rose_quartz", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:pumpkin_pie", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": 3, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:gunpowder", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:rotten_flesh", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:apple", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:wheat", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bread", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:leather", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:brick", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:flint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:wheat_seeds", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:clay_ball", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/pillager_fortress/pillager_bedroom.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/pillager_fortress/pillager_bedroom.json new file mode 100644 index 0000000..6737c75 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/pillager_fortress/pillager_bedroom.json @@ -0,0 +1,392 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:paper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:map" + }, + { + "type": "minecraft:item", + "name": "minecraft:compass" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 20 + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:goblet", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:rope", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:soap", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 15 + }, + + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:writable_book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:crafting_blueprint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "alexsmobs:frontier_cap", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:iron_axe", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:crossbow", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 10 + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:bison_fur", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 5 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 10 + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:dark_oak_log", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "quark:blossom_log", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 3 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 7, + "name": "minecraft:experience_bottle" + }, + { + "type": "minecraft:item", + "weight": 4, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 4, + "name": "minecraft:arrow", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:tripwire_hook", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/pillager_fortress/pillager_jail.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/pillager_fortress/pillager_jail.json new file mode 100644 index 0000000..a5efb84 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/pillager_fortress/pillager_jail.json @@ -0,0 +1,404 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_poison" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:long_strength" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_regeneration" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:long_invisibility" + } + ] + } + ] + }, + { + "rolls": 2, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "name": "quark:slime_in_a_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "quark:bottled_cloud" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:mimic_octopus_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:axolotl_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:pufferfish_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:lobster_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:blobfish_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:platypus_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:frilled_shark_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "alexsmobs:terrapin_bucket" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:name_tag" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:diamond", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 4 + } + } + ] + } + ] + }, + { + "rolls": 2, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "quark:gravisand", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:amethyst_shard", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:golden_apple", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "create:rose_quartz", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "create:powdered_obsidian", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 3 + } + } + ] + } + ] + }, + { + "rolls": 4, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:rotten_flesh", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:chain", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "quark:iron_rod", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:iron_bars", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "alexsmobs:bear_fur", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "alexsmobs:bison_fur", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "alexsmobs:raccoon_tail", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:nether_wart", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "quark:dirty_shard", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "create:raw_zinc", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/pillager_fortress/pillager_library.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/pillager_fortress/pillager_library.json new file mode 100644 index 0000000..7e6cd1d --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/pillager_fortress/pillager_library.json @@ -0,0 +1,156 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 10 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:paper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:map" + }, + { + "type": "minecraft:item", + "name": "minecraft:compass" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 20 + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 20 + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:writable_book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:crafting_blueprint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:painting", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "quark:abacus", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/redhorn_guild/redhorn_guild.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/redhorn_guild/redhorn_guild.json new file mode 100644 index 0000000..cd2e936 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/redhorn_guild/redhorn_guild.json @@ -0,0 +1,462 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 20 + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "quark:seed_pouch" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:golden_apple" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:music_disc_otherside" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:golden_carrot" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:lead" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:name_tag" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "create:builders_tea" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_iron", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_gold", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_copper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:raw_zinc", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:empty", + "weight": 50 + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:lapis_lazuli", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bucket" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:redstone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:coal", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:rose_quartz", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:pumpkin_pie", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": 3, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:gunpowder", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:rotten_flesh", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:apple", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:wheat", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bread", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:leather", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:brick", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:flint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:wheat_seeds", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:clay_ball", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/redhorn_guild/redhorn_guild_bedroom.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/redhorn_guild/redhorn_guild_bedroom.json new file mode 100644 index 0000000..f09cc51 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/redhorn_guild/redhorn_guild_bedroom.json @@ -0,0 +1,463 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:paper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:map" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:compass" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:clock" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 20 + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:goblet", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:rope", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:soap", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 15 + }, + + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:writable_book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:crafting_blueprint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "alexsmobs:frontier_cap", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_axe", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_hoe", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_shovel", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:carrot_on_a_stick", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 10 + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 25 + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_iron", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_gold", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_copper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:raw_zinc", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 7, + "name": "minecraft:experience_bottle" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:leather", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:arrow", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:gold_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/redhorn_guild/redhorn_guild_tools.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/redhorn_guild/redhorn_guild_tools.json new file mode 100644 index 0000000..e5ad3fa --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/redhorn_guild/redhorn_guild_tools.json @@ -0,0 +1,256 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:splash_potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_poison" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:long_strength" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:splash_potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_harming" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:long_invisibility" + } + ] + } + ] + }, + { + "rolls": 2, + "entries": [ + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:flint_and_steel" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:saddle" + }, + { + "type": "item", + "name": "minecraft:iron_leggings", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_boots", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_helmet", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_chestplate", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:crossbow", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_axe", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "supplementaries:slingshot", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + } + ] + }, + { + "rolls": 3, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:arrow", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:spectral_arrow", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:tripwire_hook", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:chain", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_bars", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 7 + } + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/sunken_ship/sunken_ship_supply.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/sunken_ship/sunken_ship_supply.json new file mode 100644 index 0000000..c35838b --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/sunken_ship/sunken_ship_supply.json @@ -0,0 +1,692 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "min": 3.0, + "max": 6.0, + "type": "minecraft:uniform" + }, + "entries": [ + { + "name": "minecraft:suspicious_stew", + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_stew_effect", + "effects": [ + { + "type": "minecraft:blindness", + "duration": { + "min": 10.0, + "max": 25.0 + } + }, + { + "type": "minecraft:wither", + "duration": { + "min": 10.0, + "max": 20.0 + } + }, + { + "type": "minecraft:weakness", + "duration": { + "min": 30.0, + "max": 50.0 + } + }, + { + "type": "minecraft:poison", + "duration": { + "min": 15.0, + "max": 30.0 + } + }, + { + "type": "minecraft:unluck", + "duration": { + "min": 200.0, + "max": 400.0 + } + }, + { + "type": "minecraft:fire_resistance", + "duration": { + "min": 360.0, + "max": 600.0 + } + }, + { + "type": "minecraft:night_vision", + "duration": { + "min": 60.0, + "max": 120.0 + } + }, + { + "type": "minecraft:saturation", + "duration": { + "min": 10.0, + "max": 12.0 + } + } + ] + } + ] + }, + { + "name": "quark:crab_leg", + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "quark:crab_shell", + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "minecraft:feather", + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "minecraft:clock", + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 1.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "minecraft:compass", + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 1.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "minecraft:book", + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 4.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "minecraft:ink_sac", + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "minecraft:glow_ink_sac", + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "minecraft:paper", + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 10.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "minecraft:cod", + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 10.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "minecraft:salmon", + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 10.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "minecraft:pufferfish", + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 1.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "minecraft:sea_pickle", + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "minecraft:kelp", + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 2.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "minecraft:moss_block", + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 6.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "minecraft:moss_carpet", + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 6.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "minecraft:gunpowder", + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "minecraft:dead_tube_coral", + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "minecraft:firework_star", + "type": "minecraft:item", + "weight": 2, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "minecraft:gray_candle", + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "minecraft:bone", + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 10.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "supplementaries:ash", + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 10.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "supplementaries:bomb", + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "minecraft:glass_bottle", + "type": "minecraft:item", + "weight": 10, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 6.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "quark:dirty_shard", + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 3.0, + "max": 7.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "minecraft:skeleton_skull", + "type": "minecraft:item", + "weight": 1, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 1.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "alexsmobs:fish_bones", + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 3.0, + "type": "minecraft:uniform" + } + } + ] + } + ] + }, + { + "rolls": 1, + "bonus_rolls": 0, + "entries": [ + { + "name": "minecraft:spyglass", + "type": "minecraft:item", + "weight": 5 + }, + { + "name": "supplementaries:antique_ink", + "type": "minecraft:item", + "weight": 5 + }, + { + "name": "supplementaries:rope_arrow", + "type": "minecraft:item", + "weight": 5 + }, + { + "name": "minecraft:water_bucket", + "type": "minecraft:item", + "weight": 2 + }, + { + "name": "quark:music_disc_wind", + "type": "minecraft:item", + "weight": 1 + }, + { + "name": "quark:music_disc_ocean", + "type": "minecraft:item", + "weight": 1 + }, + { + "name": "minecraft:cod_bucket", + "type": "minecraft:item", + "weight": 1 + }, + { + "name": "minecraft:tropical_fish_bucket", + "type": "minecraft:item", + "weight": 1 + }, + { + "name": "minecraft:salmon_bucket", + "type": "minecraft:item", + "weight": 1 + }, + { + "name": "minecraft:pufferfish_bucket", + "type": "minecraft:item", + "weight": 1 + }, + { + "name": "alexsmobs:flying_fish_bucket", + "type": "minecraft:item", + "weight": 1 + }, + { + "name": "alexsmobs:lobster_bucket", + "type": "minecraft:item", + "weight": 1 + }, + { + "name": "alexsmobs:medium_catfish_bucket", + "type": "minecraft:item", + "weight": 1 + }, + { + "name": "alexsmobs:frilled_shark_bucket", + "type": "minecraft:item", + "weight": 1 + }, + { + "name": "minecraft:crossbow", + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + }, + { + "name": "minecraft:iron_helmet", + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + }, + { + "name": "minecraft:iron_sword", + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + }, + { + "name": "minecraft:iron_chestplate", + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + }, + { + "name": "minecraft:iron_leggings", + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + }, + { + "name": "minecraft:iron_boots", + "type": "minecraft:item", + "weight": 5, + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:empty", + "weight": 9 + }, + { + "name": "minecraft:raw_iron", + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "minecraft:raw_gold", + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "minecraft:raw_copper", + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ] + }, + { + "name": "create:raw_zinc", + "type": "minecraft:item", + "weight": 3, + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 5.0, + "type": "minecraft:uniform" + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/sunken_ship/sunken_ship_treasure.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/sunken_ship/sunken_ship_treasure.json new file mode 100644 index 0000000..5dcb3de --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/sunken_ship/sunken_ship_treasure.json @@ -0,0 +1,211 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 3, + "max": 6 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 90, + "name": "minecraft:iron_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:gold_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:copper_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:zinc_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 40, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:diamond" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:experience_bottle" + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 50, + "name": "minecraft:iron_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 10 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:gold_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 10 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:zinc_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 10 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:copper_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 10 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 10 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:lapis_lazuli", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 10 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/tinkers_workshop/tinkers_workshop.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/tinkers_workshop/tinkers_workshop.json new file mode 100644 index 0000000..ce7c4fa --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/tinkers_workshop/tinkers_workshop.json @@ -0,0 +1,361 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 3 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 15 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:andesite_alloy", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 10 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:redstone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 9 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:lapis_lazuli", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 9 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:diamond", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:coal", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:copper_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 7, + "max": 15 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:zinc_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:rose_quartz", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "name": "create:sand_paper" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:cogwheel", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:large_cogwheel", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:shaft", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:fluid_pipe", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:gearbox", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:andesite_ladder", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "create:copper_ladder", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "quark:music_disc_clock" + } + ] + }, + { + "rolls": 2, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 20, + "name": "create:crushed_raw_iron", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:crushed_raw_gold", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:crushed_raw_copper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:crushed_raw_zinc", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 5 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/tinkers_workshop/tinkers_workshop_basic.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/tinkers_workshop/tinkers_workshop_basic.json new file mode 100644 index 0000000..cd2e936 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/tinkers_workshop/tinkers_workshop_basic.json @@ -0,0 +1,462 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 20 + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "quark:seed_pouch" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:golden_apple" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:music_disc_otherside" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:golden_carrot" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:lead" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:name_tag" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "create:builders_tea" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_iron", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_gold", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_copper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:raw_zinc", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:empty", + "weight": 50 + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:lapis_lazuli", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bucket" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:redstone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:coal", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:rose_quartz", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:pumpkin_pie", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": 3, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:gunpowder", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:rotten_flesh", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:apple", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:wheat", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bread", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:leather", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:brick", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:flint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:wheat_seeds", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:clay_ball", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/tinkers_workshop/tinkers_workshop_bedroom.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/tinkers_workshop/tinkers_workshop_bedroom.json new file mode 100644 index 0000000..f09cc51 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/tinkers_workshop/tinkers_workshop_bedroom.json @@ -0,0 +1,463 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:paper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:map" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:compass" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:clock" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 20 + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:goblet", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:rope", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:soap", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 15 + }, + + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:writable_book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:crafting_blueprint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "alexsmobs:frontier_cap", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_axe", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_hoe", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:iron_shovel", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:carrot_on_a_stick", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 10 + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 25 + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_iron", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_gold", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_copper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:raw_zinc", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 7, + "name": "minecraft:experience_bottle" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:leather", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:arrow", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:gold_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/tinkers_workshop/tinkers_workshop_tools.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/tinkers_workshop/tinkers_workshop_tools.json new file mode 100644 index 0000000..184bae5 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/tinkers_workshop/tinkers_workshop_tools.json @@ -0,0 +1,337 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:splash_potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_poison" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:long_strength" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:splash_potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_harming" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:long_invisibility" + } + ] + } + ] + }, + { + "rolls": 2, + "entries": [ + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:flint_and_steel" + }, + { + "type": "item", + "name": "minecraft:iron_leggings", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_boots", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_helmet", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:chainmail_chestplate", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:crossbow", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_axe", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "supplementaries:slingshot", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "create:goggles", + "functions": [ + { + "function": "minecraft:set_name", + "name": "Tinker's Goggles", + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "create:wrench", + "functions": [ + { + "function": "minecraft:set_name", + "name": "Tinker's Wrench", + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "supplementaries:wrench", + "functions": [ + { + "function": "minecraft:set_name", + "name": "Tinker's Wrench", + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "quark:abacus", + "functions": [ + { + "function": "minecraft:set_name", + "name": "Tinker's Abacus", + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "create:brown_toolbox", + "functions": [ + { + "function": "minecraft:set_name", + "name": "Tinker's Toolbox", + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "quark:trowel", + "functions": [ + { + "function": "minecraft:set_name", + "name": "Tinker's Trowel", + "add": false + } + ] + } + ] + }, + { + "rolls": 3, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:arrow", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:spectral_arrow", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "supplementaries:rope_arrow" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "supplementaries:bomb" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:tripwire_hook", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:chain", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:andesite_ladder", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "create:copper_ladder", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/tinkers_workshop/tinkers_workshop_vault.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/tinkers_workshop/tinkers_workshop_vault.json new file mode 100644 index 0000000..513e585 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/tinkers_workshop/tinkers_workshop_vault.json @@ -0,0 +1,264 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 3, + "max": 4 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 10, + "max": 30 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:brass_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:redstone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 9 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:lapis_lazuli", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 4, + "max": 9 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 7, + "name": "minecraft:diamond", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:brass_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 7, + "max": 15 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:zinc_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:rose_quartz", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 3, + "max": 7 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "name": "create:sturdy_sheet" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:linked_controller" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:cogwheel", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:large_cogwheel", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:shaft", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:brass_hand", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:gearbox", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "create:brass_ladder", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "quark:music_disc_clock" + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/treetop_tavern/treetop_tavern.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/treetop_tavern/treetop_tavern.json new file mode 100644 index 0000000..bbf2764 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/treetop_tavern/treetop_tavern.json @@ -0,0 +1,246 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 30 + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "quark:seed_pouch" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:golden_apple" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "idas:music_disc_calidum" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:golden_carrot" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:lead" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:name_tag" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + } + ] + }, + { + "rolls": 3, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:gunpowder", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:melon_seeds", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:apple", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:rope", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "supplementaries:bamboo_spikes", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:cocoa_beans", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:melon_slice", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:clay_ball", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/treetop_tavern/treetop_tavern_bedroom.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/treetop_tavern/treetop_tavern_bedroom.json new file mode 100644 index 0000000..ce8a269 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/treetop_tavern/treetop_tavern_bedroom.json @@ -0,0 +1,321 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:paper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:map" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:compass" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:clock" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 20 + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:goblet", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:rope", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:soap", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 15 + }, + + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:writable_book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:crafting_blueprint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 15 + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 5 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 7, + "name": "minecraft:experience_bottle" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:leather", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:melon_slice", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 6 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:arrow", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:iron_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:gold_ingot", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/treetop_tavern/treetop_tavern_food.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/treetop_tavern/treetop_tavern_food.json new file mode 100644 index 0000000..6c33564 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/treetop_tavern/treetop_tavern_food.json @@ -0,0 +1,238 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 5, + "entries": [ + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:glass_bottle", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:water" + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "quark:dirty_shard", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:melon_slice", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "quark:moss_paste", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:flower_pot", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 4 + } + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:pumpkin_pie" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:cake" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:milk_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:glistering_melon_slice" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:builders_tea" + } + ] + }, + { + "rolls": 4, + "entries": [ + { + "type": "minecraft:item", + "weight": 3, + "name": "create:wheat_flour", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:dough", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:egg", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 7 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:sugar", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:carrot", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:potato", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:melon_slice", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 7 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:baked_potato", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/treetop_tavern/treetop_tavern_tools.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/treetop_tavern/treetop_tavern_tools.json new file mode 100644 index 0000000..b203e3c --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/treetop_tavern/treetop_tavern_tools.json @@ -0,0 +1,231 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 2, + "entries": [ + { + "type": "minecraft:item", + "weight": 3, + "name": "alexsmobs:vine_lasso" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "supplementaries:flute" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:shears" + }, + { + "type": "item", + "name": "minecraft:iron_leggings", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_boots", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_helmet", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_chestplate", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:crossbow", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_axe", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:fishing_rod", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + }, + { + "type": "item", + "name": "supplementaries:slingshot", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.3, + "max": 0.7 + } + } + ] + } + ] + }, + { + "rolls": 3, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:arrow", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:spectral_arrow", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:tripwire_hook", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:chain", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "supplementaries:bamboo_spikes", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 7 + } + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/winter_wagon/winter_wagon.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/winter_wagon/winter_wagon.json new file mode 100644 index 0000000..44288a0 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/winter_wagon/winter_wagon.json @@ -0,0 +1,425 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 20 + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "quark:seed_pouch" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "supplementaries:sack" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "quark:music_disc_fire" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:golden_carrot" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:lead" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:name_tag" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_iron", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_gold", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_copper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:raw_zinc", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:empty", + "weight": 50 + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:lapis_lazuli", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:powder_snow_bucket" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:redstone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:coal", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:rose_quartz", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": 3, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:gunpowder", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "minecraft:snowball", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:honeyed_apple", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bread", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:leather", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:pumpkin_pie", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:clay_ball", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 5, + "max": 15 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:ash", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "supplementaries:rope", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/winter_wagon/winter_wagon_tools.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/winter_wagon/winter_wagon_tools.json new file mode 100644 index 0000000..9bb40ab --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/winter_wagon/winter_wagon_tools.json @@ -0,0 +1,275 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:long_strength" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:long_invisibility" + } + ] + } + ] + }, + { + "rolls": 2, + "entries": [ + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:flint_and_steel" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:shears" + }, + { + "type": "item", + "name": "minecraft:iron_leggings", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.4, + "max": 0.8 + } + }, + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 10, + "max": 20 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_boots", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.4, + "max": 0.8 + } + }, + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 10, + "max": 20 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_helmet", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.4, + "max": 0.8 + } + }, + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 10, + "max": 20 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_chestplate", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.4, + "max": 0.8 + } + }, + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 10, + "max": 20 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:crossbow", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.4, + "max": 0.8 + } + }, + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 10, + "max": 20 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:iron_axe", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.4, + "max": 0.8 + } + }, + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 10, + "max": 20 + } + } + ] + }, + { + "type": "item", + "name": "minecraft:fishing_rod", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.4, + "max": 0.8 + } + }, + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 10, + "max": 20 + } + } + ] + }, + { + "type": "item", + "name": "supplementaries:slingshot", + "weight": 1, + "functions": [ + { + "function": "set_damage", + "damage": { + "min": 0.4, + "max": 0.8 + } + }, + { + "function": "minecraft:enchant_with_levels", + "levels": { + "type": "minecraft:uniform", + "min": 10, + "max": 20 + } + } + ] + } + ] + }, + { + "rolls": 2, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:arrow", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 5, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:spectral_arrow", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 7 + } + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/witches_treestump/witches_treestump.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/witches_treestump/witches_treestump.json new file mode 100644 index 0000000..c0a5c39 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/witches_treestump/witches_treestump.json @@ -0,0 +1,468 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:splash_potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_poison" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:long_strength" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_regeneration" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:splash_potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_harming" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:long_leaping" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:slow_falling" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_healing" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:long_invisibility" + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:empty", + "weight": 10 + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "quark:slime_in_a_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "quark:bottled_cloud" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:name_tag" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:diamond", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 4 + } + } + ] + } + ] + }, + { + "rolls": 2, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "quark:gravisand", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:amethyst_shard", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:golden_apple", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:glistering_melon_slice", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:golden_carrot", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 3 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "create:rose_quartz", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "create:powdered_obsidian", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 3 + } + } + ] + } + ] + }, + { + "rolls": 4, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:rotten_flesh", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:gunpowder", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:apple", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 4 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:glowstone_dust", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:redstone", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:brown_mushroom", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:red_mushroom", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:warped_fungus", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:crimson_fungus", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 6 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:nether_wart", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "quark:dirty_shard", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "create:raw_zinc", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/wizardtower/wizardtower_basic.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/wizardtower/wizardtower_basic.json new file mode 100644 index 0000000..cd2e936 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/wizardtower/wizardtower_basic.json @@ -0,0 +1,462 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 20 + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:saddle" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "quark:seed_pouch" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:golden_apple" + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:music_disc_otherside" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:golden_carrot" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:lead" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:name_tag" + }, + { + "type": "minecraft:item", + "weight": 3, + "name": "create:builders_tea" + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_randomly" + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_iron", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_gold", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:raw_copper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:raw_zinc", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:empty", + "weight": 50 + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:lapis_lazuli", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bucket" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:redstone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:coal", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "create:rose_quartz", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 4 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:pumpkin_pie", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + } + ] + }, + { + "rolls": 3, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:gunpowder", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:rotten_flesh", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:apple", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:wheat", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:bread", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:leather", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:brick", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:flint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:wheat_seeds", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:clay_ball", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 20, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 8 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/wizardtower/wizardtower_library.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/wizardtower/wizardtower_library.json new file mode 100644 index 0000000..9d3f332 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/wizardtower/wizardtower_library.json @@ -0,0 +1,157 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 2, + "max": 10 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 3 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 25, + "name": "minecraft:paper", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 2, + "max": 7 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "name": "minecraft:map" + }, + { + "type": "minecraft:item", + "name": "minecraft:compass" + }, + { + "type": "minecraft:item", + "weight": 15, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 20 + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:book", + "functions": [ + { + "function": "minecraft:enchant_with_levels", + "levels": 30, + "treasure": true + } + ] + } + ] + }, + { + "rolls": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:empty", + "weight": 20 + }, + + { + "type": "minecraft:item", + "weight": 10, + "name": "minecraft:writable_book", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "create:crafting_blueprint", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 2 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:painting", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "quark:abacus", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1, + "max": 1 + }, + "add": false + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/wizardtower/wizardtower_top.json b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/wizardtower/wizardtower_top.json new file mode 100644 index 0000000..e6d1592 --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/loot_tables/chests/wizardtower/wizardtower_top.json @@ -0,0 +1,266 @@ +{ + "type": "minecraft:chest", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_poison" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:long_strength" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:strong_regeneration" + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:potion", + "functions": [ + { + "function": "minecraft:set_potion", + "id": "minecraft:slow_falling" + } + ] + } + ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "weight": 5, + "name": "quark:slime_in_a_bucket" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "quark:abacus" + }, + { + "type": "minecraft:item", + "weight": 5, + "name": "minecraft:name_tag" + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:diamond", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 2 + } + } + ] + } + ] + }, + { + "rolls": 2, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "quark:gravisand", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:emerald", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "minecraft:amethyst_shard", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:golden_apple", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 1, + "max": 2 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 2, + "name": "create:rose_quartz", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 5 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "create:powdered_obsidian", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 2, + "max": 3 + } + } + ] + } + ] + }, + { + "rolls": 4, + "entries": [ + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:bone", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:rotten_flesh", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 10 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:string", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "minecraft:nether_wart", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "create:experience_nugget", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + }, + { + "type": "minecraft:item", + "weight": 1, + "name": "create:raw_zinc", + "functions": [ + { + "function": "minecraft:limit_count", + "limit": { + "min": 3, + "max": 8 + } + } + ] + } + ] + } + ] +} diff --git a/datapacks/idasalexsmobs-1.20/data/idas/structures/labyrinth/bopfloor2.nbt b/datapacks/idasalexsmobs-1.20/data/idas/structures/labyrinth/bopfloor2.nbt new file mode 100644 index 0000000000000000000000000000000000000000..b35cecbf2b823e260bf6f3d0106deb04be67ccdc GIT binary patch literal 118191 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

!bP(Qy+@l_x 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 Jmo3+R^Z&a&%xC}r literal 0 HcmV?d00001 diff --git a/datapacks/idasalexsmobs-1.20/data/idas/worldgen/template_pool/animal_den/forest_den.json b/datapacks/idasalexsmobs-1.20/data/idas/worldgen/template_pool/animal_den/forest_den.json new file mode 100644 index 0000000..685e32f --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/data/idas/worldgen/template_pool/animal_den/forest_den.json @@ -0,0 +1,24 @@ +{ + "name": "idas:animal_den/forest_den", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "idas:animal_den/bear_den", + "processors": "idas:waterlogging_fix_processor", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + }, + { + "weight": 1, + "element": { + "location": "idas:animal_den/wolf_den", + "processors": "idas:waterlogging_fix_processor", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + } + ] +} \ No newline at end of file diff --git a/datapacks/idasalexsmobs-1.20/pack.mcmeta b/datapacks/idasalexsmobs-1.20/pack.mcmeta new file mode 100644 index 0000000..4b05b5f --- /dev/null +++ b/datapacks/idasalexsmobs-1.20/pack.mcmeta @@ -0,0 +1,7 @@ +{ + "pack": { + "description": "IDAS Alex's Mobs compat", + "pack_format": 15, + "_comment": "Config the Integrated Dungeons and Structures Mod!" + } +} diff --git a/mods/bedrock-camera-command-1.0.0.jar b/mods/bedrock-camera-command-1.0.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..837cd948bc0e29f859a9132bb218416a5e452217 GIT binary patch literal 83898 zcmbTdV|Z;_)-9Z5$Igyz+qP}nw!LH9wr$(qv7PL2$L5!Fs_ItNx!+s2o;T04eq^mV z+HAe8HAZi9^giSyzX2lwfP;er007{Bz5e+J0RRCYEv&>(EiNNMtE>b90QhDP3-Ap< zP7>^oivfWCeyQC5L6EUgQv2t4005+~fBp}GG{20vh_Ip(jkJhyEIph*9emIu$y>-p za50keaj_Jv)c1#CtY3+i;+lxQ-Ddt_#$As$-JUhfu%e-5=lDW*GPe?={@SLsZ28RQ zZAsY05KJw>cxY!~k(ds$a5h)`w~A7HXw5emy0uVKi14jRk)7 zqU3PA`vU-|e9d9Mmo}&p#T7i~PBQf9CcjlaiTtb3|Prlbr+TrLu&D4Yu zWkNvR54Q}&J5E_UzEsLa(X?ElQdzvr&5nR^O}wbe4kS#AgB*jRNYR5Z^O{zY(9!3v zzkvQuK~P{Xr-+)l9w})dmT3ydqHMCN73;C4x_XyyTJ+&30KTf&QIYiT#98_G`*Y=?Y% zPzrBYJdc_c{s-xkT(oKMw?HWnRJ9XMe8?k^GS$WkCdS1;+08@++c#Z$0BTCx zWW>BZnN*yv*7l^9ij=F|T;dwqOe{_dAbb zaj&FM!D4-Pl33P>E!L|MP5(>vT^RMUn>^ZWI=BhWpoN-I&KO2Hq{V3eW7}Qxbg#GF z?PXO#T#ujla!Gmqo^=)#=?;Bzs}ZC{%?+E9#;b5!lM-roN-jazAL5o{26!Ve6s9Q9ThKGBL zTCOH0+)(+09Ej1a^AJV7$Z^k zh=4vo+$lJ-z5K44&~R?=LkQUbb-n`?kooiwgv!otK><=HdJ4i+dI)H&O)ErtQ-!k7I#+KU|I_;ASLNf6l=j5e zpRbWMG88^;!>{Hyh=);QJlh_)Ha(|;y3M?rHW(_4OHUFk#8g$d-*8m(ccuJKy!2 zTTe}h;P@dHtRo-UIhgiPALW>&EtvQ;&Zf%HMRm2%qPAga4ZH1K(y0*UkNESz8Z@n- z@c^{E0A4>q2KZPBvx!j`u;RH0nKa#}(Y55a*H&S7#x)nW*fj5!uE=0pk|Fb5~S;zk5Vx49yZW0GSV}< zo?5sv(RbP>iOweGV6MKL2fanV07P_(?626YBTr`$A)#ZK!&J9C>i!M3y;=RR>6 ze87EnM)VPZWbO~6M9Z2N^Hfpf;2pJ3g!Ai5w5J|45J7}DoLA`Ed1t!g$y&*8rn&Nc zh!g%~eb`#DS@lDD{{A)^J(@gR?>F^o)7dGZhU~tm-FslNovDV`F4CAUB5QPM$PdhO znu}=Icy8{mPjn%mtEbN3H~TSEsQ8*})q$Tk}^GCY!X1Df&>`gs-FE6xu(g zKkSDx0M?Qks#AFyx4GG6&1Ks%6U`kKru3o{9(Ya!kXYBQKp+_*K+w-$3fQb2fegt$ zS>jjpox&#|*N|L5rR`kYYS3T~icwKf^>f47q4IY_g9*ZI@! zt?G?~><|;~^K-EECaez2X|l9J0nim!+`4>?&VjO9&}YSNu`FoxH)Ehkmrh< zJ_JK4v>JOYp12wHk#;-CgSVT!?8vve_}@S&Kf<$7%*)<-%AvRPo%^us^6ky2F#Czi zz*3%#oeyd$*&(Km!_i|lk9NMg;Eb|qyp}6HIngW#GfSs-$LAg?A3CX!|C(s0X=9C* z1AeamTF?bX9J>q(8bG1k&tuqPBZoX2e}m{=z-+sQ{QBg50R3^g+;`Al+vVz&rfErqI6{4zMr7q3`Hu?Bw|0*^R%BNBHM> zYjYc8LkE2mr~e%i%KsmdmA;MXe+TzhZ-DpZ4gMb3KZ*SbXKbVE>_}tbXlvs=(+Am4 z2mNEWLl(g!ndir{-;QErt1)paNx|<#{O*qCtbBqkiBGShHXDFR_)w0!WZ)RWdlN8| z&sKj>ZV=#TJP$w9&F+Nkecsz~kds6;;tCon+GCu;;Q9r zstI&ank%^&ImUxG5D3Bu%XxP{azbVu_VRS3 zcDpe7EV0ezUH!bQ4h9rR&T&JP!Jqp%?r7viwhZ}}`vf;8=?ay!NyC&|_JbLdpkPW` z6z6hz!c$O663v|F&uKYwuAbiZutO}kG}!LC^T5qOe1&gM-1 zs^2X?d%Fzk52oX2WhMuMQVGs3r7e7GH9~3ZcbJ8qG6^8oO#t!<1 zw$|4AHbyko=5FRTfBPY5$Ms1J@WBUPx`)R$0C$D8%mv_4OF*@SjfaFwp zj6Fp6au8Oukk@B3%}>&1f%-ZVlo?i3--Z^DO<2yT1k18}Z@c zF`l3e){f5!^@(`E$J4hBG)U_9o4Cq(dKU$Z)unwx*WhjVsi+m{&xIki=l1F3OO5h> z(~ICQ-unO6%fZ;hTHo%^-_)YAwCx%neAkgG-om#e0_xOD2MbAli!h9&@NcM%l_f?I zU6xhLL`>tpmzCDNUTk{H5(!YF50e?JwkD6qz9EUUZo%brS{iv#C{ADc`4nckWfwH+w7QK zusgwo6X|(eRBoE7H;liEvj=*%cV|uquH%j5Hk}wvBK;7X+w_$E6kE3jTLWKhIPGpsYz4EZnnSc-}Vv{eZO|v|kQ9yLLG;N<-pAVR~k& z9Zl_RptWfBhqe?bMi)PM@{9JMPtu zube$TfKx3!(XMoWlNpNH%t}jLN78Uv-YOB$gj`LW%V8>#SzZ-$XLoA$c2lg&U0d*V zOqHnd*tgzrG;1epTAJWXs5dMd<~a9TYBuZ{T|JN6KaV?V2HhLR?Z&;KZns-@d)0|K zU3OEhcTrvTD(eeduYIrg39#GjWPK#7v7Q~yr&VQr|6Cv8T#n*=zMh63VEOrP#0EZDNiAbDu6q$o=;}uY14@sSd#f zG*FOaTv%A-gQdAnE8~c$;9~n%+gYG0RLhw&&Y0S-my!^m%o-#voOUAEvmT2TF9A+l z!1MgaVK={r)jA3K(t=fY>VRi|;zIUbqVwqfu{euvuVZi=r<wE5Wu3$X6$MQgtr#`M^o-&hAi2!AEaZd~H5dgYIfe9L zImn;8Jry>n7W`j#7Wg;e{>qK`|HaM0*!aKWL@6Py{KZ8=oLXFJT1*;nJOwGK*ng)`cFm^%;u@QU-y&zkBt6bYB`yiI~e_|TGHd3kU!|)L3+0o0~ZKTRCM~MSxQ%9 zspFH5!gJkRd4pD99g&9BrsI0sTLHwInOW?MAq0P_5Ds*t)rvJACb-5eRC%-%m+M{^ z4j_$f7pk2!$q#3nzbYE=T{Z1>{z;ucmdRi5i?-K)q|Wg5>7Uc;fB2&RmAbBhzM3@{=ZvH{cm_oQh@9VaH|B=`q8<&3)v$HX+a`$9YvRrwbR5OoKWGu*3Si+Dj zBQqs5pejj&jn`HXm=&=WcET%(>kCyYPS8H+jIiP`7iDKcDj={ZAsoh+kSR+P>^41r z_qn|Pxb9kZ^}al6SDR_ber4YX*}m+?r5qbt6_=M0j20pwcVK_0Ci+tcZ--Jt-1U?^;7cq^iMvWzn1^25@qdSXXyWueF6P+mL?rv^G9`1xCvRNEO z^A{a&Of7Y>2YdTxnveTMZZ)!@;i}FD6?RD$8sHLp*d?=KT*i<=NRbWVM5bsYiwa{# z-=T!X3J>9hPWNub3MW5h%)T{raM_E*Q!e4YJLj-z@i2^95B4>cgy$_g9%O3XMsvDe z!ixCRW3??KmK}ZicAb9mlf9fjy_c?!wlw4gcn1Y>lyK9?fJ9@n-H`l}S5w(t{V53s zi*pCHz4-Q7I_`_Wq0N9#NaKMJw?&EdDc@c?+4_<9;!D`I{VT6?E2_M_^ddEN_Vw1+ zwE&u}*8TL-A8tk?{~!xq=neXVfe}h^)hZ=iYwU+HMch6Z|GEHD7RS2$Ib@bq2TaTi zF1it2_N_a+!?JJ{A{CEOI9@wvL_klaX4G2vOj=snW<~X;rBms^(|ujXs|~KxB#ssB ze0ml~hee0HIc?;YsZOWcYz6*tFCbJ^M^aK!*NESga|Vz)hA+0)h}f5_QozF|$){{b z^-7)QyCX|9g?M{2@^1_gnK(8stR5!cmLKFB$ySC??D+21Ydai#rrzc_Sm~1>? z72kq(K4vTH zz8R@2T-;mlcw<_m#bZIw=rZ`%tCPt5EV0dEnTU zbKY6d;gJ~FT^ZHE<+9E@#6raq7G;gv!lqPyATb7c9$nL=2AR6NbteH(<=t#eiNVoR zZhcy`rQI>o*Y-GaN;iY(2{SCoOHCP;9@Qdc@+PpEGvM_eJOL)>jPV9x`pecv)NmEV z6zoliLf(zi1oAt*TSbBRxKNy01)XfwTP#(-(z?T*d;DCabRgyRI9WS;YBZVvg@&WF z^?#`@>LM*R;h>-Sz?UA{#gcR?5=`iJ>h$Aca9oua6g;=KIeYjpkURB}yzfSrN1S=B zO>}DdWT#-3MjXx0`C7@o|1Pq%|6X!pF{C{v0|$3_XYTte0q2(AzLINzF0JKWZ=e0Q zgU==P*WAQJEXW((#;>VH;U!ftX)Y^xJ?@v_m>u+8_52Ne-PI0wbbf%!CI|vOPylm? z(O<$pH7zs zgT?*xX$=Hhv1Uwf<+!v2DZ4>c+X(I@8WJ zJxTqRk*CFH7nJKFD$hxI^c%v>suJGMg#{!#0+z2WNS3`8Lit$8JGU(68IRKh`dX={ z)@{@IYCG@_^{UH*bUAnv}6Rbl}r5m!3QBt)V z?J8h08FsrL6(3ycMiepzrEnFe!`h5zYtxygRHaG(~g=3IdOf^jVKm*_D}jpKVS-# z?u9dud}Knk`ASI1?+(VDvD(n3NmZqu2o@M;tXL0g2;G+l>wbSoH}|k0Vq+Q7!F^KE z!O^Ar&Q!EpG`Vq9)gGoCCdqomDtP`eC#8VOAqKhzE#;M{08P47r5>_6WJLiW$w(62 zSS~>hD9rOlLyLB|7Q7~&21m7qW(kfFbbYUD`ineSe!eD&IH2-64N}Q=b#xdm5Som! zJ^=1galSUWOtbprxj*{)dVvQ|yv97{6GjLvx?$aCmSE%Zp-`bM$}zsXK03EfFk7>J z)kt@RgkK_%RCl_JJ0KT9H+#ascl#qXk}0Ka#~|S)oJ`J+BPZ6<%zP(3wx=%uanC#j$_et>i^#jE*z{)OV_fLxxtYz*WQ@z1 zsM0T?PR#kS>HVo=LmO?gmnTaL44So0}WiUn&SWo(Tk`yjnJCX+L8Tuscn) zG~Nkyd)@g{2k)5XgK8{-eLSD_HMLK5S?B9VD1p++tHV5dK%{x(5WPD? z9zX`z+fr4{5-$Ae11!Uhyp9E}m;*W(q{tu$N2>LT6!hlvi>@Lz%=CXxk0Hc2xQf zlFoSVF4Wifvh3z_g*Rg@gOkR&;?w#1bWSuiBg1yFJ$#w>Hg3!ocFlVJ*jjhw#Y^N zQ{kp91X$WUOVtqhM8)a2Z$G`n^*QMz^brtACT>mCH7PNP+atEpqhbEgP*i!aVs83} zR7R?#e!KH2P$!9j-A>ocxl~k&`wpsn$>_kIfpWhC!-H@py)@`A9dDTp2&>t-VJ}OX z3P8UCrv7z`n+a(@ym^Q5qxV(XwUwM|wgOETxNuk5D9WGcH}SQzH0%0Vlx&{VR4hBF zcivmdz9YLYps+lgFuB7ogF;JFFsTnJ;KyY}Wa&(d)qQ%Q4`y-Hzw%BY2CE*=lvDx0 ztNOwXDo6SfNi>_O5G$Z!5oKj?Y$ZEfoy?4cDx_W=>QB>)i;M4RLDdH?FKBXjeLs#+ zark>Y7G|Hi(~$^4%eyCY_E|s8PHiWCXBBXIhjcaR_|Cz-6*1EL#uToL5Q*>9_11$x z?r}Mwgub38Gag3|5bkUG<$JG<65B}#auV_u^2=n>*N?{(e9!3_hhcNTp5#X{n>u!O znRejJ4}sjad8)N0B~@T~f*ftp_`Fh}xd^aeIBTMZ+&>%?f)0o_ND&3>SWw!K?)C8H zZAe2TxA;A;R~cVBfEVe9$vusCN+{|QP^jX)<%S--)RdmC=YJZ*9a-He5pgud108zW4FJ+1Ft8Y7PQeGt9})mq2_z-BKSDpJh0>4vxu?=|n{-E$kAJ+^mrEa$7O;F#Ns3VuJDbaHJf zsJWHT$-Wx7=3*w55txOP5_TyQQVs3|5?K5^Cf-==e|q+i^8@s?4TeWu93Q#It6xXK>Q`9+@r@zYFVmIp;-7cyV~yd*Oc7Ud|HL; zX4yLj?-GT_ns=GBlSyEEfKXm9Go$w9kY?QKvNKhWH}kgU!Obz$sBn6z@T{2VCnR4C zfskXQ3}Wvbkin}VUo&X!yau?&hn6t-O-3fi4~^j4!|>ZaO5qd9u}4>AlBEm_4~=gf zmw81Z{k7u~-c+c)X6U(uAoA@f&pbd1+vRP6gxXkIX1>(-T-}qNCQL?8%e1UYfttkM zP?5^Mx0X~yfVmN8(;m4$PKe++(gu1c62du%=N&Sw!=zoXo$p* zLIHDJET26CEkK=YSX*C@nt-g|e?8fE(!fT$YPwyWZ`yyQ#&=7SA|+$W^K0-@@Tx?N z(2G@NO13pS@m|iRZca-(J-^lHAyIFS#_5qM)GuAY>9E7AGI`j$TM?QpC{J|j(w4#3 z%`to5lp|duTA<9sH5#k5Q!Qq7O!s=k!?{?SXA+1efwot*RB*?q`@w$x;Rq|K`q61V z^6WIQ6X^rt4VP7Fy|kRpF6|{sUs9x^&pr#<<8J9(AjZMAD+NHZXh z>$Z=P6S9jHS55vS6f&z6i~{-Q%zlaZtP~1CDJ7w^OYbfnR1j$*7a^vv6!R(uDj?pp zX3`CaRNen^S$PIMN=bBE;P!2!yNl<;JNNT9A%?dJmDSBeIDNJQNswS0?6ue6Ak~j*$NDym z?BJ=hXypJ9O{J^YJQl;udOBf97zF>t;LVInNVwUP6K?;}8hdQSkO$Ecet6AXl-N zd2P&LG_XmU^=eVdKW!5CEc}kBW3N#7;SrBg@zR&SyJ^GIbRyxNUsP`vM;Q?z-hX&H z`Ni-Qgm(Pc`COkBS$G4_ftI-s%C9LEZC@O+j0HD$>>1eLhQ8y` zIS0QI71RLXNpWRPjk;0eN+w5K_{a@W9kq!EkixWr>6*}EMi?c1#!ghhgyV@L<8D4O z9Va-J13!2ez$8Xp&c$Yg5j3|9eZ%_YKOL$K= z6%|$EgiUQThZUmxxtgc%#r85>3ARVKzQtn;cGl(gC%w<+z(7IUZeea=qmy;S!N6|J zyeoqtYIjeoyLo&rLhIWYw@B68&umjtcPQEKg%fM(vvi_BilS8jzM|)=OEADGOnj;f zBRfJ{OThlXKn|4fSk8JiPJ6KzbO;#OCFjlgnR3BpomyxMjGd#PYdp7Y5R(4|5q6NR^S zP37#CeVjo6!yxR{uO1Fcu(Av1$utu`i6-v0G>p1-T&#e2v9PeayR1c!DnS{iDiDgyuW{6lP-B7 zyc3L0{QbsJrDAS9{tJyNF_NQhO)gNv)XQ8u-Q(dr|LWv2B-nSc!4#0FY#xoo!;4c= z{spLBjZX~wEq^VYW}G;oz$kAF~+)ZA`73WY(Y);I{S-gDaQ74`W%Yrl{I?~f;o^U0BbdX*60Wl|C89l zcQ;5+=i1zK^HSa@^QO z!w9a`lB;;!Pn?ja?6n&@P3*D?SqpfPYQa-JnurP5)r{Xr-KV7^v!B;=?6-_}!D;E} zVvCHQUx&r0YbsMuKGe%}L2E4Bv!Jrhw;fh`*c~Ha=*E8epXia}G*UHWHq5;s@ezy8 z0tM_*e9$@(W6Xjp;!c+t0y(C7k-5`^T?Wz#z74`6%Uh1AsiFd%3(7Y6vrjyMfX#$C zED}eJ&5fTH%wP?OXAj>vS+h&~d_L?I5i2YDAc=9V(v>b_6=LDBA!}7gY{g69k>snP zs_`8OF80E$jS9N96+R}fK#hP?ve_dl)lkOhz;&Olp7lZk2RH?Ha95nH^;d5*En5V^ z2h4W>`Cll?Nnx;aaH+Y}xEf@8*G$cx@6(q|a`vBs_NXdXVbX)N#D%6R zHuhCFmGMqaPE{yy>h^qCT{jDW+6nm669Q0K%_KYS9K;g0M-;L5s)Xg#03*{q{e;x8 zAdWI~NI`UUQ%pd)zRk)5Qbq2hzBv##==Hmwm6rh5CiP$S(n+DftuG+wHX*1~GkBa+ zm;$8)hb&?QW+LVmC1*w=m$Wd4M-oM>E+Q{lsfUq4`QD*UP)`BOes=A--94^*UPp5y z)uS+1Aeyozm(rlFZQrTk&V-eS|1x{HTqD^%t?81Up{QmFTz_$4ipz@5UyreocO*1E?%)gpT>pxg&dEMV1e(zKGT=uoN9_xZ>9<=4bBAe4Q z4m3Pk;K<0x1W%uG*7nzbRG&Sjs9evpa!n!TTb9Caqv$Pvd?6TctzymJ~4BKxMacp)ygZ&=z; z@-$MseNHTc9mbWZ!8chpae*$Yw_0!e_^4_m-x}X_%Fk!g7Uj5&9?8ZI)XOz|Ui)}t zFUHk?9`bs>BwjDQEQ+?cC_JuI+|ODz&=?J;D9fV6oZVBr!F8{S1r0VZq@Ps&(B9jp zCb}AMwri#xa?N@Avv`^RoKRbi1^}Re`JalH-@b~D4$l9(;xN?T#_Bsd8C#n>{O>T( z{~hCRwaLFXx%_vCf9?HX{HoY|Mf49=|BfhNY~)~TXesz-FOA^edua@7|#5fj-YHy>ry?azYz3-6$;P!NZz&7h`61mhH zwKkc;=a{8R)R@jQw+^T_sMR4fs_%u{38m+6sGs6=h`7 ze27yzv=B_Ot1E+Qs-Z>1%9sCdlF&;XD%nPQnXbCv8i0d-geShT9= z(*GzStrzq@;qh}bLAD%pr1qp(4I}|!b9!_8tOd$_^C*kuWhgMsEF(Xei=pN&nL`YC zFW46xAO&e3@bZo7C;T8~wq9wbB2p#5vs_t7_Bc%|$6@lGIVo!bFZ_um#KUc z9?VIp?LA5}Sz--D$^y7CLd=h;nCA4kQ_4pKZ`eCZZ*aL)=mn{PPR5;zBmHPJXZmVx zWS?vlquzYTO(d6dj21!Q7Y&Z_ll+P=X;9v0x8?ZY&d=%>!bPee`pD?4DEY|4fw0Kc zW+5vvw_nJ2>_rAU#K3rYC;pfnJXm^A@mToxqcUaNwn3opGMW@W#vI043_Z{@3orWg zg-=6!r@|(il89F6Q3m8S$jG1x=M;CJ>`DU??|4wV^bU*IZ5d)q1uT%~kJ6Puy|FK1 za$(^bZTK02UqK$M#6lwFGbhodAPH?#v-hVhb9ptwE5Lw!wJ7bQA|-7mGb}<2ZXIui zX}%>l*>kdN6-Nr_58e=IUwhmMUD0`HV#XOjV-%Agp-~5fo$g|(9Hg`*a#!RYO*EgV zSDrv;E2POC%*Xh#y-wNtMN5l@2QyXK9yp+rWH%}!w=&8n#N6D98);mD*HbktGBO;q zPpsp(h95VVoC{YA0<{zd*RN*xb%$l|?w2%7K7`FOmb{1p!v+QAQI?S9S&qeTk>1WZ z8{4e#-YENi3(l~I6uM~V(Sj)fN#7WcKF(v8Bc4bkAHE(2AGQlVqz1NcyQay3EmefE z{cd)Ft4Q&fT|5a^P1&&R?>ObgNP=`(Fb;G6_R6BF&YUWLK9p^8(Cgu$m~Uuk9;z>a zr*SpkxS5Q))^Sqq{A0j)orMI7qLF&CG%&}wAJriB*%#zq%-tp$Wb8y-A>ZT>c0hl-w)$FRcN@1!Py}Xvf z#S+R>sEKHTOf6=d>_Oj`@%M8ynav1IlSfJKN9+r>&MdB}b6oRDsSdmR0K(!(-GK*Z z6(1~}yBg?`=Mnd+=Jac_8(elMUif2uWfyHQDX*y$HotNI(wt$_z0wg=!qCz< zfu3o1sR2~9_KBoY27k!TRIwU*iE_O}i9G)H;c@1}H`>-b!C`0FoyK9sCk0^L!IT2G zj`aG|E9JGh8grnLj}-O*IKpX>vik%}*ZklCLDOZji{31Xf$k}Gw;(+_Qy1&>bY63j z+2{_Wvdf{Lb=@vF;d^a-@0SfiA3p-}HBGord-^Ect)Jf!XolE(d34Xb(Tlr+hro5@ z&$kIdG0#=hTWz`&)E z`9$UjT`}l{?Wt@OpFc5T)S0P01fmy;Ao}o6IJ;t7^w(IFwPTe8^tBKS+K#R`7443V zyA$sMR|-u5)}M}<#2dY9QigBuJ|euK)G(|m)w>7(jsm&7V&Pb52zQvIPbx?>%MpCWvY7M~Rl2eJp3}ND zerfYz`Q4LELr94xP`60gb>AK_=ILhdGN;Wm6YKPed(IsMEcvH5`lAV~lg<#t4l(qS zK41YD&Hg#i*4p!Tl0}}G^%g+M)~in1ZQZ91sPxZuzA+85br*&$;p*41M>^ln@pVlg zp4L!zA5F5p0ya@{4yB-SF~+@lzz6D`x{_K;z{~O&(VD%1US%&>=(*7}%BMGDFXK*q zgcy*w&*5#4(9Lc<`|ZFirai!LyV&Mq0`P5NWY7^Wq+ERnT}@=(y&UI+Np4Fa>(bD2 z72Oe5u{`wc!4|g?vd!Tx-X!~vvjYl`k>63GzTM}pthQ?BNP-?+LNKPH}PQm#UTJ?i$T>w?c+#ybLF zJFCUl_js^w#lSsP#Ox(JCH8or@D4V7{@I?F_(Q?$j}vRyU&qn@=e94r|KwZ@t;~&W z{>xtSzZw|2|72kP4*WL*Bcg9)O!KFENm5o<#8O83NLNo!W6}@PkEhH1{yi_@C)EI* zn2JcSRDXOBJR+)@35MD6NnbXOur8IiSd#Ix)sT|cEN-qci2~2lw>RPs;GF#Ju1)ms zl=Nzf-ZO2FnV!?G&78hm&%a#(j;`W>HY+eqrdlYPO%o@>57UY)iVWI~3l3J2&oJHH z)#xUYA%*$Zi=XSv*@`=Cs48tVh;@a9_|LMJa^>XgHk!N&3_4WC7?-^YF4m*va|^r{ z%RIbOY$m0mqDw<5#XeK=!%aZ0`84?*q8=hH^0n)b$b>`1vcSasC^b$ zu>na}M7b&|@tQBxlPmDrPZ!+L9;sTa+?kwHG8&pKUysVxcxwxH={OQX35xPyG=QYp z%JaB)+L@eywOFN}F1qpm-I7jD zuyuhIbXFdImuo7{R^-lCgW%lyT{K!&a}a<*Useb6WU~F(XDiD+3gY{fjZ=DTnoc=^ zI3U<|Z4A=&{*5+xtChZtf252E)Q+Q*J$~x?m-rTuU4gUTlnsU&S{!-#RrcGK<#0G9nrR+M>2PDHA94UkUl$&1FF~*I|$?>UYQP%H4ZAk2~BOue4 z>aC7}GB%x>S=mA%*dZfa%p>x=2ntF@-V^-=o4Sv3kT-PaDSkFf&$N6iVWuaXbFU;K zc`@f%T`9MnU-6I*#hSPaNFYP{bND^=SU&50r40o%;&!SNV2ehzYX`&I{9 z1ng$sIa(^E~cCgY{DA?#_5y)@Ib!+ZmejDkA)}Z7A0xh(XO8--hNHYQudK+MlA#0G>o5V&v6jMV6Z*2Bs#J zHJc^CYIr$-?hp`Z|CIJUhDD+ih;gt1k;R0f)FNby_^mi-`NH@0JduYJojo>hhJI~o z?vibWq!5?8c5zf#f~A3geRf(p9ubDRzIKi8I@Z%(@zUdm37|d$HClh_F$#2Eafq|Ljk|S0Ms!( zwBb@@B?M06LstPOq$cKbLe1bEONU&yclU_ME_YaX-nvnV-)_Fcef_h85dbf9OAQ17 z02K0H)4^X?ZI=If)s{4N7cjRm`s4V$#75eauLnO@3=0`?>s2!V)P~v9VirX-{yE-TuK6+F1cFN4unvjPXL!;09SjdIt5{Kw|(A=JHu^B9?%#IE9 zq*U8{k@`CZRy@##spRCl8PQ7pb6(5a&d$=Q9nsdoa@7pWn-(UAvAvLfE!aw2k`v)S zZ=tcHHItNss~xlG2PynU=v)ix(LLl(R$hKF0Ae|C!b7jB6g~MdRm|ODS3d@^q?|~E zWev@(jSs^P+)4k0abk?rNi)w)!S`m*(tjwK_-UajN2TykIeySr2ZQ@Bl1t8+?ePE;>G`^8nbbhgu2Q>*qb zjo`~*M>|TnZYLpik9e%hBnR&cN!2(81xpDC?Z&nv2oI8$O+HNnp(PLFa% zh+wZb_dmΝ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≠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�bGKMA%fV}b?`^Jv86w6&&;=}hUg)DJV%`j-*0 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 L4=RV*L7)ByPL_= 11300 +block.10005=grass short_grass fern oak_sapling spruce_sapling birch_sapling jungle_sapling acacia_sapling dark_oak_sapling bamboo_sapling cherry_sapling pale_oak_sapling dead_bush dandelion poppy blue_orchid allium azure_bluet red_tulip orange_tulip white_tulip pink_tulip oxeye_daisy cornflower lily_of_the_valley wither_rose sweet_berry_bush wheat carrots potatoes beetroots pumpkin_stem melon_stem nether_sprouts warped_roots crimson_roots sunflower:half=lower lilac:half=lower rose_bush:half=lower peony:half=lower tall_grass:half=lower large_fern:half=lower torchflower_crop +#else +block.10005=tallgrass sapling deadbush yellow_flower red_flower wheat carrots potatoes beetroots pumpkin_stem melon_stem double_plant:half=lower +#endif +block.10009=leaves leaves2 oak_leaves spruce_leaves birch_leaves jungle_leaves acacia_leaves dark_oak_leaves azalea_leaves flowering_azalea_leaves mangrove_leaves cherry_leaves pale_oak_leaves +block.10013=vine pale_hanging_moss +block.10017=reeds attached_pumpkin_stem attached_melon_stem mangrove_propagule seagrass tall_seagrass kelp_plant kelp hanging_roots sugar_cane spore_blossom pink_petals pitcher_plant cobweb +block.10021=double_plant:half=upper sunflower:half=upper lilac:half=upper rose_bush:half=upper peony:half=upper tall_grass:half=upper large_fern:half=upper +block.10024= +block.10028= +block.10032=stonebrick monster_egg:variant=stone_brick monster_egg:variant=mossy_brick monster_egg:variant=cracked_brick monster_egg:variant=chiseled_brick stone_bricks mossy_stone_bricks cracked_stone_bricks chiseled_stone_bricks infested_chiseled_stone_bricks infested_cracked_stone_bricks infested_mossy_stone_bricks infested_stone_bricks +#if MC_VERSION >= 11300 +block.10033=mossy_stone_brick_wall stone_brick_wall mossy_stone_brick_slab stone_brick_slab stone_brick_stairs mossy_stone_brick_stairs +#else +block.10033=stone_slab:variant=stone_brick double_stone_slab:variant=stone_brick stone_brick_stairs +#endif +block.10037=anvil chipped_anvil damaged_anvil +block.10041=golden_rail powered_rail detector_rail rail activator_rail +#if MC_VERSION >= 11300 +block.10045=cauldron hopper +block.10049=water_cauldron +#else +block.10045=cauldron:level=0 hopper +block.10049=cauldron:level=1 cauldron:level=2 cauldron:level=3 +#endif +block.10053=powder_snow_cauldron +block.10056=lava_cauldron +block.10061=lever +block.10065=lectern +block.10068=lava flowing_lava +block.10072=fire +block.10076=soul_fire +#if MC_VERSION >= 11300 +block.10080=stone infested_stone coal_ore smooth_stone +block.10081=stone_pressure_plate stone_button grindstone stonecutter stone_slab smooth_stone_slab stone_stairs +block.10084=granite +block.10085=granite_wall granite_slab granite_stairs +block.10088=diorite +block.10089=diorite_wall diorite_slab diorite_stairs +block.10092=andesite +block.10093=andesite_wall andesite_slab andesite_stairs +block.10096=polished_granite +block.10097=polished_granite_stairs polished_granite_slab +block.10100=polished_diorite +block.10101=polished_diorite_stairs polished_diorite_slab +block.10104=polished_andesite packed_mud mud_bricks bricks brick_block stone_slab:variant=brick double_stone_slab:variant=brick +block.10105=mud_brick_wall brick_wall polished_andesite_stairs polished_andesite_slab mud_brick_stairs mud_brick_slab brick_slab brick_stairs +#else +block.10080=stone:variant=stone monster_egg:variant=stone +block.10081=stone_pressure_plate stone_slab:variant=stone double_stone_slab:variant=stone +block.10084=stone:variant=granite +block.10088=stone:variant=diorite +block.10092=stone:variant=andesite +block.10096=stone:variant=smooth_granite +block.10100=stone:variant=smooth_diorite +block.10104=stone:variant=smooth_andesite bricks +block.10105=brick_wall brick_slab brick_stairs +#endif +block.10108=deepslate cobbled_deepslate infested_deepslate deepslate_coal_ore +block.10109=cobbled_deepslate_wall cobbled_deepslate_stairs cobbled_deepslate_slab heavy_core +block.10112=polished_deepslate deepslate_bricks cracked_deepslate_bricks deepslate_tiles cracked_deepslate_tiles chiseled_deepslate mud muddy_mangrove_roots +block.10113=polished_deepslate_wall deepslate_brick_wall deepslate_tile_wall polished_deepslate_stairs deepslate_brick_stairs deepslate_tile_stairs polished_deepslate_slab deepslate_brick_slab deepslate_tile_slab mangrove_roots +block.10116=calcite +block.10120=dripstone_block +block.10121=pointed_dripstone daylight_detector +#if MC_VERSION >= 11300 +block.10124=grass_block:snowy=true podzol:snowy=true mycelium:snowy=true +block.10128=dirt coarse_dirt rooted_dirt podzol:snowy=false mycelium:snowy=false +block.10129=farmland:moisture=0 farmland:moisture=1 farmland:moisture=2 farmland:moisture=3 farmland:moisture=4 farmland:moisture=5 farmland:moisture=6 +block.10132=grass_block:snowy=false +#else +block.10124=grass:snowy=true dirt:snowy=true mycelium:snowy=true +block.10128=dirt:snowy=false mycelium:snowy=false +block.10129=farmland:moisture=0 farmland:moisture=1 farmland:moisture=2 farmland:moisture=3 farmland:moisture=4 farmland:moisture=5 farmland:moisture=6 +block.10132=grass:snowy=false +#endif +block.10137=farmland:moisture=7 +block.10140=netherrack +block.10144=warped_nylium warped_wart_block +block.10148=crimson_nylium nether_wart_block +#if MC_VERSION >= 11300 +block.10152=cobblestone mossy_cobblestone infested_cobblestone moss_block pale_moss_block furnace:lit=false smoker:lit=false blast_furnace:lit=false lodestone piston:extended=false sticky_piston:extended=false dispenser dropper +block.10153=cobblestone_wall mossy_cobblestone_wall piston:extended=true sticky_piston:extended=true piston_head moss_carpet pale_moss_carpet stone_stairs cobblestone_slab cobblestone_stairs mossy_cobblestone_stairs mossy_cobblestone_slab +#else +block.10152=cobblestone monster_egg:variant=cobblestone mossy_cobblestone furnace:lit=false piston sticky_piston dispenser dropper +block.10153=cobblestone_wall mossy_cobblestone_wall piston_head stone_slab:variant=cobblestone double_stone_slab:variant=cobblestone cobblestone_stairs +#endif +block.10156=planks:variant=oak oak_planks stripped_oak_log stripped_oak_wood bookshelf crafting_table +block.10157=tripwire_hook wooden_slab:variant=oak double_wooden_slab:variant=oak oak_slab petrified_oak_slab oak_stairs fence fence_gate oak_fence oak_fence_gate oak_button oak_pressure_plate trapdoor oak_trapdoor +block.10160=log:variant=oak oak_log oak_wood +block.10164=planks:variant=spruce spruce_planks stripped_spruce_log stripped_spruce_wood +block.10165=spruce_fence spruce_fence_gate spruce_button spruce_pressure_plate wooden_slab:variant=spruce double_wooden_slab:variant=spruce spruce_slab spruce_stairs spruce_trapdoor +block.10168=log:variant=spruce spruce_log spruce_wood +block.10172=planks:variant=birch birch_planks stripped_birch_log stripped_birch_wood loom chiseled_bookshelf +block.10173=birch_fence birch_fence_gate birch_button birch_pressure_plate wooden_slab:variant=birch double_wooden_slab:variant=birch birch_slab birch_stairs birch_trapdoor +block.10176=log:variant=birch birch_log birch_wood +block.10180=planks:variant=jungle jungle_planks stripped_jungle_log stripped_jungle_wood +block.10181=jungle_fence jungle_fence_gate jungle_button jungle_pressure_plate composter wooden_slab:variant=jungle double_wooden_slab:variant=jungle jungle_slab jungle_stairs jungle_trapdoor +block.10184=log:variant=jungle jungle_log jungle_wood +block.10188=planks:variant=acacia acacia_planks stripped_acacia_log stripped_acacia_wood +block.10189=acacia_fence acacia_fence_gate acacia_button acacia_pressure_plate wooden_slab:variant=acacia double_wooden_slab:variant=acacia acacia_slab acacia_stairs acacia_trapdoor +block.10192=log2:variant=acacia acacia_log acacia_wood +block.10196=planks:variant=dark_oak dark_oak_planks stripped_dark_oak_log stripped_dark_oak_wood +block.10197=dark_oak_fence dark_oak_fence_gate dark_oak_button dark_oak_pressure_plate wooden_slab:variant=dark_oak double_wooden_slab:variant=dark_oak dark_oak_slab dark_oak_stairs dark_oak_trapdoor +block.10200=log2:variant=dark_oak dark_oak_log dark_oak_wood +block.10204=mangrove_planks stripped_mangrove_log stripped_mangrove_wood +block.10205=mangrove_fence mangrove_fence_gate mangrove_button mangrove_pressure_plate mangrove_slab mangrove_stairs mangrove_trapdoor +block.10208=mangrove_log mangrove_wood +block.10212=crimson_planks stripped_crimson_stem stripped_crimson_hyphae +block.10213=crimson_fence crimson_fence_gate crimson_button crimson_pressure_plate crimson_slab crimson_stairs crimson_trapdoor +block.10216=crimson_stem crimson_hyphae +block.10220=warped_planks stripped_warped_stem stripped_warped_hyphae +block.10221=warped_fence warped_fence_gate warped_button warped_pressure_plate warped_slab warped_stairs warped_trapdoor +block.10224=warped_stem warped_hyphae +block.10228=bedrock +#if MC_VERSION >= 11300 +block.10232=sand suspicious_sand +block.10236=red_sand +block.10240=sandstone chiseled_sandstone cut_sandstone smooth_sandstone +block.10241=sandstone_wall sandstone_slab cut_sandstone_slab sandstone_stairs smooth_sandstone_stairs smooth_sandstone_slab +#else +block.10232=sand:variant=sand +block.10236=sand:variant=red_sand +block.10240=sandstone chiseled_sandstone cut_sandstone smooth_sandstone +block.10241=stone_slab:variant=sandstone double_stone_slab:variant=sandstone sandstone_stairs +#endif +block.10244=red_sandstone smooth_red_sandstone chiseled_red_sandstone cut_red_sandstone +block.10245=red_sandstone_wall stone_slab2 double_stone_slab2 red_sandstone_slab cut_red_sandstone_slab red_sandstone_stairs smooth_red_sandstone_stairs smooth_red_sandstone_slab +block.10248=netherite_block +block.10252=ancient_debris +block.10257=iron_bars +block.10260= +block.10264=iron_block +block.10265=heavy_weighted_pressure_plate +block.10268=raw_iron_block +block.10272=iron_ore +block.10276=deepslate_iron_ore +block.10280=raw_copper_block +block.10284=copper_ore +block.10288=deepslate_copper_ore +block.10292=copper_block exposed_copper weathered_copper oxidized_copper cut_copper exposed_cut_copper weathered_cut_copper oxidized_cut_copper waxed_copper_block waxed_exposed_copper waxed_weathered_copper waxed_oxidized_copper waxed_cut_copper waxed_exposed_cut_copper waxed_weathered_cut_copper waxed_oxidized_cut_copper chiseled_copper exposed_chiseled_copper weathered_chiseled_copper oxidized_chiseled_copper waxed_chiseled_copper waxed_exposed_chiseled_copper waxed_weathered_chiseled_copper waxed_oxidized_chiseled_copper +block.10293=lightning_rod cut_copper_stairs exposed_cut_copper_stairs weathered_cut_copper_stairs oxidized_cut_copper_stairs cut_copper_slab exposed_cut_copper_slab weathered_cut_copper_slab oxidized_cut_copper_slab waxed_cut_copper_stairs waxed_exposed_cut_copper_stairs waxed_weathered_cut_copper_stairs waxed_oxidized_cut_copper_stairs waxed_cut_copper_slab waxed_exposed_cut_copper_slab waxed_weathered_cut_copper_slab waxed_oxidized_cut_copper_slab copper_grate exposed_copper_grate weathered_copper_grate oxidized_copper_grate waxed_copper_grate waxed_exposed_copper_grate waxed_weathered_copper_grate waxed_oxidized_copper_grate +block.10296=raw_gold_block +block.10300=gold_ore +block.10304=deepslate_gold_ore +block.10308=nether_gold_ore +block.10312=gold_block +block.10313=light_weighted_pressure_plate +block.10316=diamond_block +block.10320=diamond_ore +block.10324=deepslate_diamond_ore +block.10328=amethyst_block budding_amethyst +block.10332=small_amethyst_bud medium_amethyst_bud large_amethyst_bud amethyst_cluster +block.10336=emerald_block +block.10340=emerald_ore +block.10344=deepslate_emerald_ore +block.10349=azalea flowering_azalea +block.10352=lapis_block +block.10356=lapis_ore +block.10360=deepslate_lapis_ore +block.10364=quartz_block chiseled_quartz_block smooth_quartz quartz_bricks quartz_pillar +#if MC_VERSION >= 11300 +block.10365=quartz_slab quartz_stairs smooth_quartz_stairs smooth_quartz_slab +#else +block.10365=stone_slab:variant=quartz double_stone_slab:variant=quartz quartz_stairs +#endif +block.10368=quartz_ore nether_quartz_ore +block.10372=obsidian +block.10376=purpur_block purpur_pillar +block.10377=purpur_stairs purpur_slab purpur_double_slab +block.10380=snow_block +block.10381=snow_layer snow:layers=8 powder_snow +block.10384=packed_ice +block.10388=blue_ice +block.10392=pumpkin carved_pumpkin +block.10396=lit_pumpkin jack_o_lantern +block.10401=sea_pickle:waterlogged=false +block.10404=sea_pickle:waterlogged=true +block.10408=basalt polished_basalt smooth_basalt +block.10412=glowstone light +block.10416=nether_brick nether_bricks cracked_nether_bricks chiseled_nether_bricks +#if MC_VERSION >= 11300 +block.10417=nether_brick_wall nether_brick_fence nether_brick_slab nether_brick_stairs +#else +block.10417=nether_brick_fence stone_slab:variant=nether_brick double_stone_slab:variant=nether_brick nether_brick_stairs +#endif +block.10420=red_nether_bricks +block.10421=red_nether_brick_wall red_nether_brick_slab red_nether_brick_stairs +block.10424=melon_block melon +block.10428=end_stone end_bricks end_stone_bricks +block.10429=end_stone_brick_wall end_stone_brick_stairs end_stone_brick_slab +block.10432=hardened_clay stained_hardened_clay terracotta white_terracotta orange_terracotta magenta_terracotta light_blue_terracotta yellow_terracotta lime_terracotta pink_terracotta gray_terracotta light_gray_terracotta cyan_terracotta purple_terracotta blue_terracotta brown_terracotta green_terracotta red_terracotta black_terracotta +block.10436=white_glazed_terracotta orange_glazed_terracotta magenta_glazed_terracotta light_blue_glazed_terracotta yellow_glazed_terracotta lime_glazed_terracotta pink_glazed_terracotta gray_glazed_terracotta light_gray_glazed_terracotta cyan_glazed_terracotta purple_glazed_terracotta blue_glazed_terracotta brown_glazed_terracotta green_glazed_terracotta red_glazed_terracotta black_glazed_terracotta +block.10440=prismarine prismarine_bricks +block.10441=prismarine_wall prismarine_slab prismarine_stairs prismarine_brick_slab prismarine_brick_stairs +block.10444=dark_prismarine +block.10445=dark_prismarine_stairs dark_prismarine_slab +block.10448=sea_lantern +block.10452=magma magma_block +block.10456=command_block chain_command_block repeating_command_block +block.10460=concrete white_concrete orange_concrete magenta_concrete light_blue_concrete yellow_concrete pink_concrete gray_concrete light_gray_concrete cyan_concrete purple_concrete blue_concrete brown_concrete green_concrete red_concrete black_concrete +block.10464=concrete_powder white_concrete_powder orange_concrete_powder magenta_concrete_powder light_blue_concrete_powder yellow_concrete_powder lime_concrete_powder pink_concrete_powder gray_concrete_powder light_gray_concrete_powder cyan_concrete_powder purple_concrete_powder blue_concrete_powder brown_concrete_powder green_concrete_powder red_concrete_powder black_concrete_powder +block.10468=tube_coral_block brain_coral_block bubble_coral_block fire_coral_block horn_coral_block dead_tube_coral_block dead_brain_coral_block dead_bubble_coral_block dead_fire_coral_block dead_horn_coral_block +block.10473=tube_coral brain_coral bubble_coral fire_coral horn_coral tube_coral_fan brain_coral_fan bubble_coral_fan fire_coral_fan horn_coral_fan dead_tube_coral dead_brain_coral dead_bubble_coral dead_fire_coral dead_horn_coral dead_tube_coral_fan dead_brain_coral_fan dead_bubble_coral_fan dead_fire_coral_fan dead_horn_coral_fan tube_coral_wall_fan brain_coral_wall_fan bubble_coral_wall_fan fire_coral_wall_fan horn_coral_wall_fan dead_tube_coral_wall_fan dead_brain_coral_wall_fan dead_bubble_coral_wall_fan dead_fire_coral_wall_fan dead_horn_coral_wall_fan +block.10476=crying_obsidian +block.10480=blackstone polished_blackstone chiseled_polished_blackstone polished_blackstone_bricks cracked_polished_blackstone_bricks +block.10481=polished_blackstone_brick_wall polished_blackstone_wall blackstone_wall polished_blackstone_button polished_blackstone_pressure_plate blackstone_slab blackstone_stairs polished_blackstone_slab polished_blackstone_stairs polished_blackstone_brick_slab polished_blackstone_brick_stairs +block.10484=gilded_blackstone +block.10489=waterlily lily_pad frogspawn +block.10493=dirt_path grass_path +block.10496=torch wall_torch +block.10500=end_rod +block.10505=chorus_plant +block.10508=chorus_flower:age=0 chorus_flower:age=1 chorus_flower:age=2 chorus_flower:age=3 chorus_flower:age=4 +block.10512=chorus_flower:age=5 +block.10516=lit_furnace furnace:lit=true +block.10521=cactus +block.10524=noteblock note_block jukebox +block.10528=soul_torch soul_wall_torch +#if MC_VERSION >= 11300 +block.10532=brown_mushroom_block +block.10536=red_mushroom_block +block.10540=mushroom_stem +#else +block.10532= +block.10536= +block.10540= +#endif +block.10544=glow_lichen +block.10548=enchanting_table +block.10553=end_portal_frame:eye=false +block.10556=end_portal_frame:eye=true +block.10560=lantern +block.10564=soul_lantern +block.10569=turtle_egg sniffer_egg +block.10572=dragon_egg +block.10576=smoker:lit=true +block.10580=blast_furnace:lit=true +block.10584= +block.10588=respawn_anchor:charges=0 +block.10592=respawn_anchor:charges=1 respawn_anchor:charges=2 respawn_anchor:charges=3 respawn_anchor:charges=4 +block.10596=redstone_wire:power=1 redstone_wire:power=2 redstone_wire:power=3 redstone_wire:power=4 redstone_wire:power=5 redstone_wire:power=6 redstone_wire:power=7 redstone_wire:power=8 redstone_wire:power=9 redstone_wire:power=10 redstone_wire:power=11 redstone_wire:power=12 redstone_wire:power=13 redstone_wire:power=14 redstone_wire:power=15 +block.10601=redstone_wire:power=0 +block.10604=redstone_torch:lit=true redstone_wall_torch:lit=true +block.10605=redstone_torch:lit=false redstone_wall_torch:lit=false +block.10608=redstone_block +#if MC_VERSION >= 11300 +block.10612=redstone_ore:lit=false +block.10616=redstone_ore:lit=true +#else +block.10612=redstone_ore +block.10616=lit_redstone_ore +#endif +block.10620=deepslate_redstone_ore:lit=false +block.10624=deepslate_redstone_ore:lit=true +block.10629=cave_vines_plant:berries=false cave_vines:berries=false +block.10632=cave_vines_plant:berries=true cave_vines:berries=true +#if MC_VERSION >= 11300 +block.10636=redstone_lamp:lit=false +block.10640=redstone_lamp:lit=true +#else +block.10636=redstone_lamp +block.10640=lit_redstone_lamp +#endif +block.10644=powered_repeater powered_comparator repeater:powered=true comparator:mode=compare:powered=true comparator:mode=subtract:powered=true +block.10645=unpowered_repeater unpowered_comparator repeater:powered=false comparator:mode=compare:powered=false +block.10646=comparator:mode=subtract:powered=false +block.10648=shroomlight +block.10652=campfire:lit=true +block.10656=soul_campfire:lit=true +block.10661=campfire:lit=false soul_campfire:lit=false +block.10664=observer +block.10668=wool white_wool orange_wool magenta_wool light_blue_wool yellow_wool pink_wool gray_wool light_gray_wool cyan_wool purple_wool blue_wool brown_wool green_wool red_wool black_wool +block.10669=carpet white_carpet orange_carpet magenta_carpet light_blue_carpet yellow_carpet pink_carpet gray_carpet light_gray_carpet cyan_carpet purple_carpet blue_carpet brown_carpet green_carpet red_carpet black_carpet tripwire +block.10672=bone_block +block.10676=barrel beehive bee_nest honeycomb_block +block.10680=ochre_froglight +block.10684=verdant_froglight +block.10688=pearlescent_froglight +block.10692=reinforced_deepslate +block.10696=sculk sculk_vein sculk_sensor:sculk_sensor_phase=inactive sculk_sensor:sculk_sensor_phase=cooldown sculk_catalyst +block.10700=sculk_shrieker +block.10704=sculk_sensor:sculk_sensor_phase=active +block.10708=mob_spawner spawner +block.10712=tuff chiseled_tuff polished_tuff tuff_bricks chiseled_tuff_bricks +block.10713=tuff_stairs tuff_slab tuff_wall polished_tuff_stairs polished_tuff_slab polished_tuff_wall tuff_brick_stairs tuff_brick_slab tuff_brick_wall +block.10716=clay +block.10721=ladder +block.10724=gravel suspicious_gravel +block.10729=flower_pot potted_red_mushroom potted_brown_mushroom potted_cactus potted_bamboo potted_flowering_azalea_bush potted_azalea_bush +block.10733=potted_dandelion potted_poppy potted_blue_orchid potted_allium potted_azure_bluet potted_red_tulip potted_orange_tulip potted_white_tulip potted_pink_tulip potted_oxeye_daisy potted_cornflower potted_lily_of_the_valley potted_wither_rose potted_oak_sapling potted_spruce_sapling potted_birch_sapling potted_jungle_sapling potted_acacia_sapling potted_dark_oak_sapling potted_mangrove_propagule potted_fern potted_dead_bush potted_crimson_roots potted_warped_roots pitcher_crop potted_cherry_sapling potted_pale_oak_sapling closed_eyeblossom +block.10736=structure_block jigsaw +block.10741=chain +block.10744=soul_sand soul_soil +block.10748=dried_kelp_block +block.10753=bamboo +block.10756=bamboo_block stripped_bamboo_block bamboo_planks bamboo_mosaic +block.10757=bamboo_fence bamboo_fence_gate bamboo_pressure_plate bamboo_button scaffolding bamboo_slab bamboo_mosaic_slab bamboo_stairs bamboo_mosaic_stairs bamboo_trapdoor +block.10760=cherry_planks stripped_cherry_log stripped_cherry_wood +block.10761=cherry_fence cherry_fence_gate cherry_pressure_plate cherry_button cherry_stairs cherry_slab cherry_trapdoor +block.10764=cherry_log cherry_wood +block.10769=torchflower +block.10773=potted_torchflower +block.10776=warped_fungus crimson_fungus +block.10780=potted_crimson_fungus potted_warped_fungus +block.10784=calibrated_sculk_sensor:sculk_sensor_phase=inactive calibrated_sculk_sensor:sculk_sensor_phase=cooldown +block.10788=calibrated_sculk_sensor:sculk_sensor_phase=active +block.10793=wooden_door oak_door +block.10797=spruce_door +block.10801=birch_door +block.10805=jungle_door +block.10809=acacia_door +block.10813=dark_oak_door +block.10817=mangrove_door +block.10821=crimson_door +block.10825=warped_door +block.10829=bamboo_door +block.10833=cherry_door +block.10836=brewing_stand +block.10840=lime_concrete +block.10844=lime_wool +block.10845=lime_carpet +block.10848=crafter +block.10852=copper_bulb:lit=true waxed_copper_bulb:lit=true exposed_copper_bulb:lit=true waxed_exposed_copper_bulb:lit=true +block.10854=copper_bulb:lit=false waxed_copper_bulb:lit=false exposed_copper_bulb:lit=false waxed_exposed_copper_bulb:lit=false +block.10856=weathered_copper_bulb:lit=true waxed_weathered_copper_bulb:lit=true oxidized_copper_bulb:lit=true waxed_oxidized_copper_bulb:lit=true +block.10858=weathered_copper_bulb:lit=false waxed_weathered_copper_bulb:lit=false oxidized_copper_bulb:lit=false waxed_oxidized_copper_bulb:lit=false +block.10861=copper_door exposed_copper_door weathered_copper_door oxidized_copper_door waxed_copper_door waxed_exposed_copper_door waxed_weathered_copper_door waxed_oxidized_copper_door +block.10865=copper_trapdoor exposed_copper_trapdoor weathered_copper_trapdoor oxidized_copper_trapdoor waxed_copper_trapdoor waxed_exposed_copper_trapdoor waxed_weathered_copper_trapdoor waxed_oxidized_copper_trapdoor +block.10868=trial_spawner:ominous=false:trial_spawner_state=active trial_spawner:ominous=false:trial_spawner_state=ejecting_reward trial_spawner:ominous=false:trial_spawner_state=waiting_for_players trial_spawner:ominous=false:trial_spawner_state=waiting_for_reward_ejection vault:ominous=false:vault_state=active vault:ominous=false:vault_state=ejecting vault:ominous=false:vault_state=unlocking +block.10872=vault:ominous=false:vault_state=inactive vault:ominous=true:vault_state=inactive +block.10873=trial_spawner:ominous=false:trial_spawner_state=cooldown trial_spawner:ominous=false:trial_spawner_state=inactive trial_spawner:ominous=true:trial_spawner_state=cooldown trial_spawner:ominous=true:trial_spawner_state=inactive +block.10876=trial_spawner:ominous=true:trial_spawner_state=active trial_spawner:ominous=true:trial_spawner_state=ejecting_reward trial_spawner:ominous=true:trial_spawner_state=waiting_for_players trial_spawner:ominous=true:trial_spawner_state=waiting_for_reward_ejection vault:ominous=true:vault_state=active vault:ominous=true:vault_state=ejecting vault:ominous=true:vault_state=unlocking +block.10881=nether_wart red_mushroom brown_mushroom cocoa candle:lit=false white_candle:lit=false orange_candle:lit=false magenta_candle:lit=false light_blue_candle:lit=false yellow_candle:lit=false lime_candle:lit=false pink_candle:lit=false gray_candle:lit=false light_gray_candle:lit=false cyan_candle:lit=false purple_candle:lit=false blue_candle:lit=false brown_candle:lit=false green_candle:lit=false red_candle:lit=false black_candle:lit=false cake candle_cake:lit=false white_candle_cake:lit=false orange_candle_cake:lit=false magenta_candle_cake:lit=false light_blue_candle_cake:lit=false yellow_candle_cake:lit=false lime_candle_cake:lit=false pink_candle_cake:lit=false gray_candle_cake:lit=false light_gray_candle_cake:lit=false cyan_candle_cake:lit=false purple_candle_cake:lit=false blue_candle_cake:lit=false brown_candle_cake:lit=false green_candle_cake:lit=false red_candle_cake:lit=false black_candle_cake:lit=false +block.10884=weeping_vines_plant +block.10885=weeping_vines twisting_vines_plant twisting_vines +block.10888=hay_block +block.10893=iron_door +block.10897=iron_trapdoor +block.10900=candle:lit=true candle_cake:lit=true light_gray_candle:lit=true light_gray_candle_cake:lit=true gray_candle:lit=true gray_candle_cake:lit=true black_candle:lit=true black_candle_cake:lit=true white_candle:lit=true white_candle_cake:lit=true brown_candle:lit=true brown_candle_cake:lit=true +block.10902=red_candle:lit=true red_candle_cake:lit=true +block.10904=orange_candle:lit=true orange_candle_cake:lit=true +block.10906=yellow_candle:lit=true yellow_candle_cake:lit=true +block.10908=lime_candle:lit=true lime_candle_cake:lit=true +block.10910=green_candle:lit=true green_candle_cake:lit=true +block.10912=cyan_candle:lit=true cyan_candle_cake:lit=true +block.10914=light_blue_candle:lit=true light_blue_candle_cake:lit=true +block.10916=blue_candle:lit=true blue_candle_cake:lit=true +block.10918=purple_candle:lit=true purple_candle_cake:lit=true +block.10920=magenta_candle:lit=true magenta_candle_cake:lit=true +block.10922=pink_candle:lit=true pink_candle_cake:lit=true +block.10924=open_eyeblossom +block.10928=pale_oak_planks stripped_pale_oak_log stripped_pale_oak_wood +block.10929=pale_oak_fence pale_oak_fence_gate pale_oak_pressure_plate pale_oak_button pale_oak_stairs pale_oak_slab pale_oak_trapdoor +block.10932=pale_oak_log pale_oak_wood +block.10937=pale_oak_door +block.10940=resin_bricks chiseled_resin_bricks resin_block +block.10941=resin_clump resin_brick_stairs resin_brick_slab resin_brick_wall +block.10944=creaking_heart:active=false +block.10948=creaking_heart:active=true +block.10953=snow:layers=1 snow:layers=2 snow:layers=3 snow:layers=4 snow:layers=5 snow:layers=6 snow:layers=7 +block.10956=target:power=0 +block.10960=target:power=1 target:power=2 target:power=3 target:power=4 target:power=5 target:power=6 target:power=7 target:power=8 target:power=9 target:power=10 target:power=11 target:power=12 target:power=13 target:power=14 target:power=15 +block.10964=sponge +block.10968=wet_sponge + + +block.20000= + +block.30000= +block.30004= +block.30008=tinted_glass +block.30012=slime slime_block +block.30016=honey_block +block.30020=portal nether_portal + +block.31000=stained_glass white_stained_glass +block.31001=stained_glass_pane white_stained_glass_pane +block.31002=orange_stained_glass +block.31003=orange_stained_glass_pane +block.31004=magenta_stained_glass +block.31005=magenta_stained_glass_pane +block.31006=light_blue_stained_glass +block.31007=light_blue_stained_glass_pane works +block.31008=yellow_stained_glass +block.31009=yellow_stained_glass_pane +block.31010=lime_stained_glass +block.31011=lime_stained_glass_pane +block.31012=pink_stained_glass +block.31013=pink_stained_glass_pane +block.31014=gray_stained_glass +block.31015=gray_stained_glass_pane +block.31016=light_gray_stained_glass +block.31017=light_gray_stained_glass_pane +block.31018=cyan_stained_glass +block.31019=cyan_stained_glass_pane +block.31020=purple_stained_glass +block.31021=purple_stained_glass_pane +block.31022=blue_stained_glass +block.31023=blue_stained_glass_pane +block.31024=brown_stained_glass +block.31025=brown_stained_glass_pane +block.31026=green_stained_glass +block.31027=green_stained_glass_pane +block.31028=red_stained_glass +block.31029=red_stained_glass_pane +block.31030=black_stained_glass +block.31031=black_stained_glass_pane + +block.32000=water flowing_water +block.32004=ice frosted_ice +block.32008=glass +block.32012=glass_pane +block.32016=beacon + +block.60000= +block.60004=oak_sign spruce_sign birch_sign jungle_sign acacia_sign dark_oak_sign oak_wall_sign spruce_wall_sign birch_wall_sign jungle_wall_sign acacia_wall_sign dark_oak_wall_sign crimson_sign crimson_wall_sign warped_sign warped_wall_sign mangrove_sign mangrove_wall_sign bamboo_sign bamboo_wall_sign oak_hanging_sign spruce_hanging_sign birch_hanging_sign jungle_hanging_sign acacia_hanging_sign dark_oak_hanging_sign oak_wall_hanging_sign spruce_wall_hanging_sign birch_wall_hanging_sign jungle_wall_hanging_sign acacia_wall_hanging_sign dark_oak_wall_hanging_sign crimson_hanging_sign crimson_wall_hanging_sign warped_hanging_sign warped_wall_hanging_sign mangrove_hanging_sign mangrove_wall_hanging_sign bamboo_hanging_sign bamboo_wall_hanging_sign cherry_sign cherry_wall_sign cherry_hanging_sign cherry_wall_hanging_sign pale_oak_sign pale_oak_hanging_sign +block.60008=chest trapped_chest +block.60012=ender_chest +block.60016=shulker_box white_shulker_box orange_shulker_box magenta_shulker_box light_blue_shulker_box yellow_shulker_box lime_shulker_box pink_shulker_box gray_shulker_box light_gray_shulker_box cyan_shulker_box purple_shulker_box blue_shulker_box brown_shulker_box green_shulker_box red_shulker_box black_shulker_box skeleton_skull wither_skeleton_skull player_head zombie_head creeper_head dragon_head white_banner orange_banner magenta_banner light_blue_banner yellow_banner lime_banner pink_banner gray_banner light_gray_banner cyan_banner purple_banner blue_banner brown_banner green_banner red_banner black_banner white_wall_banner orange_wall_banner magenta_wall_banner light_blue_wall_banner yellow_wall_banner lime_wall_banner pink_wall_banner gray_wall_banner light_gray_wall_banner cyan_wall_banner purple_wall_banner blue_wall_banner brown_wall_banner green_wall_banner red_wall_banner black_wall_banner white_bed orange_bed magenta_bed light_blue_bed yellow_bed lime_bed pink_bed gray_bed light_gray_bed cyan_bed purple_bed blue_bed brown_bed green_bed red_bed black_bed +block.60020=conduit +block.60025=end_portal end_gateway +block.60028=bell +block.60032= +block.60036= + +layer.translucent=glass glass_pane beacon \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/dimension.properties b/shaderpacks/ComplementaryUnbound_r5.4/shaders/dimension.properties new file mode 100644 index 0000000..1a1e125 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/dimension.properties @@ -0,0 +1,8 @@ +#--------------------------------------------------------------------------------------------------------------------- +#--------------------------------------------------------------------------------------------------------------------- + +dimension.world0=* + +dimension.world-1=minecraft:the_nether minecraft:nether + +dimension.world1=minecraft:the_end minecraft:end \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/entity.properties b/shaderpacks/ComplementaryUnbound_r5.4/shaders/entity.properties new file mode 100644 index 0000000..fc1ff9f --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/entity.properties @@ -0,0 +1,39 @@ +#--------------------------------------------------------------------------------------------------------------------- +#--------------------------------------------------------------------------------------------------------------------- + +#if MC_VERSION >= 11300 +#1.13 And Above Mapping: + +entity.50000=end_crystal +entity.50004=lightning_bolt +entity.50008=item_frame glow_item_frame +entity.50012=iron_golem +entity.50016=player +entity.50020=blaze +entity.50024=creeper +entity.50028=drowned +entity.50032=guardian +entity.50036=elder_guardian +entity.50040=endermite +entity.50044=ghast +entity.50048=glow_squid +entity.50052=magma_cube +entity.50056=stray +entity.50060=vex +entity.50064=witch +entity.50068=wither wither_skull +entity.50072=experience_orb +entity.50076=boat oak_boat spruce_boat birch_boat jungle_boat acacia_boat dark_oak_boat mangrove_boat cherry_boat pale_oak_boat chest_boat oak_chest_boat spruce_chest_boat birch_chest_boat jungle_chest_boat acacia_chest_boat dark_oak_chest_boat mangrove_chest_boat cherry_chest_boat pale_oak_chest_boat +entity.50080=allay +entity.50084=slime chicken +entity.50088=entity_flame +entity.50092=trident +entity.50096=minecart chest_minecart command_block_minecart furnace_minecart hopper_minecart spawner_minecart tnt_minecart +entity.50100=bogged +entity.50104=piglin piglin_brute zombified_piglin hoglin zoglin +entity.50108=creaking + +#else +#1.12 And Below Mapping: + +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/item.properties b/shaderpacks/ComplementaryUnbound_r5.4/shaders/item.properties new file mode 100644 index 0000000..6f62e93 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/item.properties @@ -0,0 +1,65 @@ +#--------------------------------------------------------------------------------------------------------------------- +# 40XXX - Items +# 44XXX - Items for colored handheld lighting +# 45XXX - Items for other Iris exclusive features +#--------------------------------------------------------------------------------------------------------------------- + +item.40000=spider_eye fermented_spider_eye +item.40004=filled_map +item.40008=air + +item.44002=torch +item.44003=end_rod +item.44004=beacon +item.44007=ochre_froglight +item.44008=verdant_froglight +item.44009=pearlescent_froglight +item.44010=glowstone +item.44011=jack_o_lantern +item.44012=lantern +item.44015=campfire +item.44018=sea_lantern +item.44019=shroomlight +item.44026=crying_obsidian +item.44028=soul_torch +item.44029=soul_lantern +item.44030=soul_campfire +item.44033=enchanting_table +item.44034=glow_lichen +item.44035=redstone_torch +item.44036=small_amethyst_bud medium_amethyst_bud large_amethyst_bud amethyst_cluster +item.44037=magma_block +item.44038=dragon_egg +item.44039=chorus_flower +item.44040=brewing_stand +item.44041=redstone_block + +item.45000=trim_emerald trim_redstone trim_lapis trim_amethyst trim_quartz trim_diamond trim_gold trim_iron trim_copper +item.45004=wooden_shovel wooden_pickaxe wooden_axe wooden_hoe wooden_sword bow fishing_rod +item.45008=stone_shovel stone_pickaxe stone_axe stone_hoe stone_sword +item.45012=iron_shovel iron_pickaxe iron_axe iron_hoe iron_sword iron_helmet iron_chestplate iron_leggings iron_boots iron_ingot iron_nugget iron_horse_armor flint_and_steel flint spyglass shears chainmail_helmet chainmail_chestplate chainmail_leggings chainmail_boots +item.45016=golden_shovel golden_pickaxe golden_axe golden_hoe golden_sword golden_helmet golden_chestplate golden_leggings golden_boots gold_ingot gold_nugget golden_apple enchanted_golden_apple golden_carrot golden_horse_armor copper_ingot +item.45020=diamond_shovel diamond_pickaxe diamond_axe diamond_hoe diamond_sword diamond_helmet diamond_chestplate diamond_leggings diamond_boots diamond diamond_horse_armor emerald +item.45024=netherite_shovel netherite_pickaxe netherite_axe netherite_hoe netherite_sword netherite_helmet netherite_chestplate netherite_leggings netherite_boots netherite_ingot mace breeze_rod +item.45028=trident +item.45032=lava_bucket +item.45036=bucket water_bucket cod_bucket salmon_bucket tropical_fish_bucket pufferfish_bucket axolotl_bucket tadpole_bucket milk_bucket powder_snow_bucket +item.45040=blaze_rod blaze_powder +item.45044=experience_bottle glow_ink_sac +item.45048=fire_charge +item.45052=chorus_fruit +item.45056=amethyst_shard +item.45060=shield +item.45064=turtle_helmet +item.45068=ender_pearl +item.45072=ender_eye +item.45076=clock +item.45080=compass +item.45084=echo_shard recovery_compass music_disc_5 +item.45088=nether_star +item.45092=end_crystal +item.45096=glow_berries +item.45100=glowstone_dust +item.45104=prismarine_crystals +item.45108=totem_of_undying +item.45112=trial_key \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lang/en_US.lang b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lang/en_US.lang new file mode 100644 index 0000000..a6d1b0f --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lang/en_US.lang @@ -0,0 +1,1051 @@ +#shaders/lang/en_us.lang + +#Profiles +profile.POTATO=§aPotato +profile.VERYLOW=§aVery Low +profile.LOW=§aLow +profile.MEDIUM=§aMedium +profile.HIGH=§eHigh (Default) +profile.VERYHIGH=§cVery High +profile.ULTRA=§4§lUltra +profile.COMPLEMENTARY=§4§l§n§oComplementary +profile.comment=Shader profiles change performance settings with the most optimised visual fidelity to performance ratio. §e[*]§r It's recommended to use one of these profiles for your settings unless you know what you are doing. §e[*]§r All affected settings can all be found in the "Performance Settings" menu. + +#Information +screen.INFORMATION=Information +screen.INFORMATION.comment=This section contains buttons that only exist to provide information. + +option.info0=§bHover your mouse on a button +value.info0.0= +option.info0.comment=This section contains buttons that only exist to provide information. + +option.info1=How to get more performance +value.info1.0= +option.info1.comment=Performance is a complex topic in Minecraft because it gets affected by so many things, but you can try these:. Reduce your render distance, ideally it should be between 6 and 16 for almost every device. Reduce the "Profile" shader setting, these have been carefully tested for the best visual/performance ratio. More information will be added later. + +option.info2=What are the best settings +value.info2.0= +option.info2.comment=Best settings are subjective, but using the default settings will be the near-best for most people. The default settings have been shaped by years of community evaluations and feedback, while paying a lot of attention to the visual/performance ratio. But you should still feel free to tweak around and have fun doing so! + +option.info3=What is Profile or Visual Style +value.info3.0= +option.info3.comment="Profile" setting changes the settings found in the "Performance Settings" menu, while not affecting any preference-based settings. "Visual Style" changes the "Default Style" values that exist on many preference-based settings, but it does not impact performance by an important amount. + +option.info4=What is RP Support +value.info4.0= +option.info4.comment=RP Support option determines how the shader pack treats the different blocks of Minecraft. For example, §bIntegratedPBR+§r treats gold blocks as reflective things, while §elabPBR§r or §eseuspbr§r require you to install a resource pack to tell that to the shader. Setting RP Support to §aBasic§r will make it so that no block is "special" other than a couple exceptions like water. + +option.info5=How to fix mod issues +value.info5.0= +option.info5.comment=Mod incompatibilities are inevitable with shader packs because of the way they work, but you can check out this information page about mod issues with Complementary to view a bunch of known fixes. www.complementary.dev/mod-issues + +option.info6= +value.info6.0= +option.info6.comment= + +option.info7= +value.info7.0= +option.info7.comment= + +option.info8=How to join the community +value.info8.0= +option.info8.comment=You can join the Complementary Discord server to join our friendly community, and be able to contact developers or experienced community members. www.complementary.dev/discord + +option.info9=How to support Complementary +value.info9.0= +option.info9.comment=Best way to support the development of Complementary is to share it with your friends or social media, but you can also directly support the developer on Patreon. www.patreon.com/emingt + +option.info10=Credits +value.info10.0= +option.info10.comment=EminGT: The main developer of Complementary. Capt Tatsu: Developer of BSL Shaders, his generosity is what made Complementary possible in the first place. Special Thanks: IMS212, sp614x, Chocapic13, Robobo1221, SixthSurge, null511, fayer3, catlikecoding, Builderb0y, Jessie, SpacEagle17, isuewo, flytrap + +#Style +option.SHADER_STYLE=Visual Style +option.SHADER_STYLE.comment=Determines the default visual style of the shader pack. §bReimagined§r: Complementing Minecraft while preserving its unique visual elements. §dUnbound§r: Reworking the visuals of Minecraft with a semi-realistic fantasy style. §e[*]§r Affected settings: Water Style, Cloud Style, Sun/Moon Style, Sun/Moon Angle, Aurora Style, Glowing Ores. +value.SHADER_STYLE.1=§bReimagined +value.SHADER_STYLE.4=§dUnbound + +#Screens +screen.PERFORMANCE_SETTINGS=§ePerformance Settings§r +screen.PERFORMANCE_SETTINGS.comment=Settings that directly relate to the performance, and get changed by the different shader profiles. + +screen.ATMOSPHERE_SETTINGS=Atmosphere +screen.ATMOSPHERE_SETTINGS.comment=Settings that relate to the atmosphere. + +screen.ATM_COLOR_SETTINGS=Atmosphere Color Multipliers +screen.ATM_COLOR_SETTINGS.comment=Enables customization of atmosphere colors that are mostly seen in the sky and fog. + +screen.MORNING_ATM_MULTS=Sunrise/Sunset Time +screen.NOON_ATM_MULTS=Noon Time +screen.NIGHT_ATM_MULTS=Night Time +screen.RAIN_ATM_MULTS=Rainy Weather +screen.NETHER_ATM_MULTS=The Nether Dimension +screen.END_ATM_MULTS=The End Dimension + +screen.CLOUD_SETTINGS=Clouds +screen.CLOUD_SETTINGS.comment=Settings that relate to the clouds. + +screen.CLOUD_COLOR_SETTINGS=Cloud Color +screen.CLOUD_COLOR_SETTINGS.comment=Settings to change the color of the clouds. + +screen.CLOUD_UNBOUND_SETTINGS=Unbound Cloud Settings +screen.CLOUD_REIMAGINED_SETTINGS=Reimagined Cloud Settings + +screen.FOG_SETTINGS=Fog +screen.FOG_SETTINGS.comment=Settings that relate to the various types of fog. + +screen.SUN_MOON_SETTINGS=Sun / Moon +screen.SUN_MOON_SETTINGS.comment=Settings that relate to the sun and moon. + +screen.NETHER_SETTINGS=The Nether Dimension +screen.NETHER_SETTINGS.comment=Settings that relate to the Nether dimension. + +screen.WEATHER_SETTINGS=Rain / Weather +screen.WEATHER_SETTINGS.comment=Settings that relate to weather conditions + +screen.CAMERA_SETTINGS=Camera +screen.CAMERA_SETTINGS.comment=Settings that relate to the view/camera. + +screen.TONEMAP_SETTINGS=Color Balance +screen.TONEMAP_SETTINGS.comment=Settings that determine the color balance of the visuals. + +screen.COLORGRADING_SETTINGS=Color Grading +screen.COLORGRADING_SETTINGS.comment=Settings to mix up the final color channels. + +screen.WORLD_BLUR_SETTINGS=World Blur +screen.WORLD_BLUR_SETTINGS.comment=Settings that relate to fancy world blurring effects. + +screen.MATERIAL_SETTINGS=Materials +screen.MATERIAL_SETTINGS.comment=Settings that are related to the materials of Minecraft. + +screen.IPBR_SETTINGS=IntegratedPBR+ Materials +screen.IPBR_SETTINGS.comment=Settings that are related to the features of IntegratedPBR+. + +screen.GLOWING_ORE_SETTINGS=Glowing Ores +screen.GLOWING_ORE_SETTINGS.comment=Settings to adjust emission of ore blocks. + +screen.GLOWING_STUFF_SETTINGS=Glowing Stuff +screen.GLOWING_STUFF_SETTINGS.comment=Settings to adjust emission of miscellaneous blocks. + +screen.OTHER_IPBR_SETTINGS=Other IPBR+ Features +screen.OTHER_IPBR_SETTINGS.comment=Miscellaneous IntegratedPBR+ settings. + +screen.CUSTOM_PBR_SETTINGS=labPBR/seuspbr Materials +screen.CUSTOM_PBR_SETTINGS.comment=Settings that are related to the features of labPBR/seuspbr. + +screen.LIGHTING_SETTINGS=Lighting +screen.LIGHTING_SETTINGS.comment=Settings that are related to lighting. + +screen.LIGHT_COLOR_SETTINGS=Lighting Color Multipliers +screen.LIGHT_COLOR_SETTINGS.comment=Enables customization of lighting colors that are seen on all surfaces. + +screen.MORNING_LIGHT_MULTS=Sunrise/Sunset Time +screen.NOON_LIGHT_MULTS=Noon Time +screen.NIGHT_LIGHT_MULTS=Night Time +screen.RAIN_LIGHT_MULTS=Rainy Weather +screen.NETHER_LIGHT_MULTS=The Nether Dimension +screen.END_LIGHT_MULTS=The End Dimension + +screen.BLOCKLIGHT_COLOR_SETTINGS=Blocklight Color §e[*]§r +screen.BLOCKLIGHT_COLOR_SETTINGS.comment=Settings to adjust the color emitted from light source blocks. §e[*]§r These color settings won't affect most lights if the Advanced Colored Lighting setting is enabled, except for the Blocklight Intensity slider. + +screen.MOON_PHASE_INF_SETTINGS=Moon Phase Influence +screen.MOON_PHASE_INF_SETTINGS.comment=Settings to determine how different moon phases affect the night lighting. + +screen.ACL_FEATURES_SETTINGS=ACL Exclusive Features §e[*]§r +screen.ACL_FEATURES_SETTINGS.comment=Settings that are about features exclusive to Advanced Colored Lighting. §e[*]§r These features only work if Advanced Colored Lighting is enabled in Performance Settings and your system supports it. + +screen.PIXELATED_LIGHTING_SETTINGS=Pixelated Lighting +screen.PIXELATED_LIGHTING_SETTINGS.comment=Settings to make certain lighting effects pixelated. + +screen.WATER_SETTINGS=Water +screen.WATER_SETTINGS.comment=Settings that are about water. + +screen.WATER_COLOR_SETTINGS=Water Surface Color + +screen.UNDERWATER_COLOR_SETTINGS=Underwater Color + +screen.WATER_WAVE_SETTINGS=Waving Water Normals §e[*]§r +screen.WATER_WAVE_SETTINGS.comment=Settings to customise the surface-direction waves (normals) seen on water. §e[*]§r These settings only work when the Water Style is set to "Reimagined + Waves" or "Unbound". + +screen.WAVING_SETTINGS=Waving Textures +screen.WAVING_SETTINGS.comment=Settings that are about waving textures. + +screen.OTHER_SETTINGS=Other +screen.OTHER_SETTINGS.comment=Settings that don't fit into any other category. + +screen.SELECT_OUTLINE_SETTINGS=Selection Outline +screen.SELECT_OUTLINE_SETTINGS.comment=Settings that change the block selection outline. + +screen.WORLD_OUTLINE_SETTINGS=World Outline +screen.WORLD_OUTLINE_SETTINGS.comment=Settings that are about optional outline effects. + +#Settings +option.RP_MODE=RP Support +option.RP_MODE.comment=Changes many internal calculations to determine how different blocks and materials will be rendered. §bIntegrated PBR+§r: Calculated PBR and extra effects, highly recommended for most use cases. §aBasic§r: No PBR or extra effects. §elabPBR/seuspbr§r: Materials using the required PBR resource packs. +value.RP_MODE.0=§aBasic +value.RP_MODE.1=§bIntegrated PBR+ +value.RP_MODE.2=§eseuspbr (RP Required) +value.RP_MODE.3=§elabPBR (RP Required) + +option.WATER_REFLECT_QUALITY=Water Reflection Quality +option.WATER_REFLECT_QUALITY.comment=Adjusts the visual quality of reflections that appear on translucents. §cMedium§r: Screenspace ray-traced reflections on water and translucents. §ePotato§r: Replaces water and translucent reflections with a faster method, may look incorrect in some situations. §aOFF§r: No reflections. +value.WATER_REFLECT_QUALITY.-1=§aOFF +value.WATER_REFLECT_QUALITY.0=§aSky only +value.WATER_REFLECT_QUALITY.1=§ePotato +value.WATER_REFLECT_QUALITY.2=§cMedium + +option.BLOCK_REFLECT_QUALITY=Block Reflection Quality §e[*]§r +option.BLOCK_REFLECT_QUALITY.comment=Adjusts the visual quality of reflections that appear on solid materials. §cHigh§r: Sun/moon highlights + smoother specular reflections using a temporal filter. §eMedium§r: Sun/moon highlights + specular reflections. §aLow§r: Sun/moon highlights only. §e[*]§r RP Support option must be set to anything but Basic for any specular reflections to appear. +value.BLOCK_REFLECT_QUALITY.0=§aOFF +value.BLOCK_REFLECT_QUALITY.1=§eLow +value.BLOCK_REFLECT_QUALITY.2=§cMedium +value.BLOCK_REFLECT_QUALITY.3=§cHigh + +option.SHADOW_QUALITY=Real-Time Shadows +option.SHADOW_QUALITY.comment=Adjusts the quality of shadows. Every tier further reduces the shadow noise artifacts, options lower than §eHigh§r enable optimised shadows on leaves, §eVery Low§r significantly downgrades shadows in multiple ways, §aOFF§r completely disables shadows and light shafts. +value.SHADOW_QUALITY.-1=§aOFF +value.SHADOW_QUALITY.0=§eVery Low +value.SHADOW_QUALITY.1=§eLow +value.SHADOW_QUALITY.2=§eMedium +value.SHADOW_QUALITY.3=§eHigh +value.SHADOW_QUALITY.4=§cVery High +value.SHADOW_QUALITY.5=§4§lUltra + +option.LIGHTSHAFT_QUALI_DEFINE=Light Shaft Quality §e[*]§r +option.LIGHTSHAFT_QUALI_DEFINE.comment=Adjusts the quality of light shafts. Every tier further reduces the light shaft noise artifacts. §e[*]§r "Real-Time Shadows" setting must be set to anything but OFF for light shafts to work. +value.LIGHTSHAFT_QUALI_DEFINE.0=§aOFF +value.LIGHTSHAFT_QUALI_DEFINE.1=§eLow +value.LIGHTSHAFT_QUALI_DEFINE.2=§eMedium +value.LIGHTSHAFT_QUALI_DEFINE.3=§cHigh +value.LIGHTSHAFT_QUALI_DEFINE.4=§4§lVery High + +option.shadowDistance=Shadow Distance +option.shadowDistance.comment=Adjusts the distance from the player which real-time shadows are rendered. §e[*]§r The value is internally capped at Render Distance. §e[*]§r It's recommended to set this value to about 80% of your render distance for best performance and coverage. §c[-]§r Lower values may cause excessive Light Shaft leaking. +value.shadowDistance.64.0=§a4 Chunks §c[-] +value.shadowDistance.80.0=§a5 Chunks §c[-] +value.shadowDistance.96.0=§a6 Chunks §c[-] +value.shadowDistance.112.0=§a7 Chunks §c[-] +value.shadowDistance.128.0=§a8 Chunks +value.shadowDistance.160.0=§e10 Chunks +value.shadowDistance.192.0=§e12 Chunks +value.shadowDistance.224.0=§e14 Chunks +value.shadowDistance.256.0=§c16 Chunks +value.shadowDistance.320.0=§c20 Chunks +value.shadowDistance.384.0=§4§l24 Chunks +value.shadowDistance.512.0=§4§l32 Chunks +value.shadowDistance.768.0=§4§l§n§o48 Chunks +value.shadowDistance.1024.0=§4§k-§r§4§l§n§o64 Chunks§r§4§k- + +option.ENTITY_SHADOWS_DEFINE=Entity Shadows +option.ENTITY_SHADOWS_DEFINE.comment=Enables the ability for entities and block entities to cast shadows. §c[-]§r Entity Shadows impact performance way more than expected, costing more than 50% of your fps in some cases. +value.ENTITY_SHADOWS_DEFINE.-1=§aOFF +value.ENTITY_SHADOWS_DEFINE.1=§4§k-§r§4§l§n§oON§r§4§k- §r§c[-] + +option.DETAIL_QUALITY=Detail Quality +option.DETAIL_QUALITY.comment=Adjusts several small things that affect performance. Adjust the quality of: Water material, TAA, lighting tweaks, Night Nebula, Nether Storm, Ender Beams, sky effect reflections, rain puddle accuracy +value.DETAIL_QUALITY.0=§aPotato +value.DETAIL_QUALITY.2=§eMedium +value.DETAIL_QUALITY.3=§cHigh + +option.CLOUD_QUALITY=Cloud Quality +option.CLOUD_QUALITY.comment=Adjusts the lighting, detail, and sample quality of Reimagined/Unbound cloud styles. §e[*]§r This setting only works with the "Reimagined" or "Unbound" Cloud Styles. +value.CLOUD_QUALITY.0=§aOFF +value.CLOUD_QUALITY.1=§aLow +value.CLOUD_QUALITY.2=§eMedium +value.CLOUD_QUALITY.3=§cHigh + +option.FXAA_DEFINE=Anti-Aliasing (FXAA) +option.FXAA_DEFINE.comment=Enables Fast Approximate Anti-Aliasing (FXAA), which is basically an effect that produces smoother image. +value.FXAA_DEFINE.-1=§aOFF +value.FXAA_DEFINE.1=§eON + +option.SSAO_QUALI_DEFINE=Edge Shadow (SSAO) Quality +option.SSAO_QUALI_DEFINE.comment=Adjusts the quality of Screen-Space Ambient Occlusion (SSAO) which adds extra ambient shadowing to the edges of the scene. Every tier further reduces the ssao noise artifacts. +value.SSAO_QUALI_DEFINE.0=§aOFF +value.SSAO_QUALI_DEFINE.2=§eMedium +value.SSAO_QUALI_DEFINE.3=§cHigh + +option.ANISOTROPIC_FILTER=Texture Filtering +option.ANISOTROPIC_FILTER.comment=Improves the quality of mipmapped textures using Anisotropic Filtering. §e[*]§r Make sure your "Mipmap Levels" video setting is set to Maximum (4) or you won't get good results. +value.ANISOTROPIC_FILTER.0=§aOFF +value.ANISOTROPIC_FILTER.4=§e4x +value.ANISOTROPIC_FILTER.8=§e8x +value.ANISOTROPIC_FILTER.16=§4§l16x + +option.COLORED_LIGHTING=Advanced Colored Lighting §e[*]§r +option.COLORED_LIGHTING.comment=Uses voxelization and floodfill lighting to add color to blocklight, alongside introducing some new lights. §e[*]§r This feature only works on Iris and supported platforms. §e[*]§r This setting will be disabled if "Real-Time Shadows" is OFF. §a[+]§r This system also enables some other features which you can individually enable/disable in the "Other" -> "ACL Features" menu. §c[-]§r High chunk values for this effect impact performance way more than expected, each increment can cost more than twice the performance of the previous tier. +value.COLORED_LIGHTING.0=§aOFF +value.COLORED_LIGHTING.128=§c4 Chunks +value.COLORED_LIGHTING.192=§c6 Chunks +value.COLORED_LIGHTING.256=§4§l8 Chunks +value.COLORED_LIGHTING.384=§4§l12 Chunks +value.COLORED_LIGHTING.512=§4§l§n§o16 Chunks +value.COLORED_LIGHTING.768=§4§l§n§o24 Chunks §r§c[-] +value.COLORED_LIGHTING.1024=§4§k-§r§4§l§n§o32 Chunks§r§4§k- §r§c[-] + +option.SSAO_I=Edge Shadow Intensity (SSAO) +option.SSAO_I.comment=Determines the strength of Screen-Space Ambient Occlusion (SSAO) which adds extra ambient shadowing to the edges of the scene. §e[*]§r This setting won't work if SSAO is disabled in "Performance Settings". +value.SSAO_I.0=§cOFF + +option.VANILLAAO_I=Edge Shadow Intensity (Vanilla) +option.VANILLAAO_I.comment=Determines the strength of Minecraft's ambient occlusion which adds extra ambient shadowing to the edges of the scene. +value.VANILLAAO_I.0=§cOFF + +option.BORDER_FOG=Border Fog +option.BORDER_FOG.comment=Intense fog on the edges of the loaded world to hide chunk borders. §e[*]§r It's recommended to disable Border Fog when playing with less than 8 chunks of render distance. + +option.ATM_FOG_MULT=Atmospheric Fog +option.ATM_FOG_MULT.comment=Adjusts the intensity of altitude-based fog. +value.ATM_FOG_MULT.0.50=Very Subtle +value.ATM_FOG_MULT.0.65=Subtle +value.ATM_FOG_MULT.0.80=Normal +value.ATM_FOG_MULT.0.95=Intense + +option.ATM_FOG_DISTANCE=Atmospheric Fog Distance +option.ATM_FOG_DISTANCE.comment=Adjusts the distance from the camera that the atmospheric fog starts to appear. §e[*]§r Note that the fog distance also gets automatically adjusted by the Render Distance setting in Video Settings. + +option.ATM_FOG_ALTITUDE=Atmospheric Fog Altitude +option.ATM_FOG_ALTITUDE.comment=Determines the altitude that the atmospheric fog appears the most prominently. + +option.CAVE_FOG=Cave Fog +option.CAVE_FOG.comment=Enables extra fog in deep underground areas. + +option.LIGHTSHAFT_BEHAVIOUR=Light Shaft Mode +option.LIGHTSHAFT_BEHAVIOUR.comment=Determines the behaviour of light shafts. §a[+]§r Scene Aware Light Shafts automatically transition between regular and extreme modes to provide the best results. §c[-]§r Extreme mode is not recommended for general gameplay, and it can severely impact performance. +value.LIGHTSHAFT_BEHAVIOUR.0=§cOFF +value.LIGHTSHAFT_BEHAVIOUR.1=Scene Aware §a[+] +value.LIGHTSHAFT_BEHAVIOUR.2=Regular +value.LIGHTSHAFT_BEHAVIOUR.3=Extreme §c[-] + +option.LIGHTSHAFT_SMOKE=Light Shaft Smoke +option.LIGHTSHAFT_SMOKE.comment=Adds volumetric smoke to the light shafts. §c[-]§r This effect can impact performance. + +option.SPECIAL_PALE_GARDEN_LIGHTSHAFTS=Special Pale Garden Shafts +option.SPECIAL_PALE_GARDEN_LIGHTSHAFTS.comment=Makes light shafts look extra spicy in the "Pale Garden" biome. + +option.LIGHTSHAFT_DAY_I=Light Shaft Day Multiplier +option.LIGHTSHAFT_NIGHT_I=Light Shaft Night Multiplier +option.LIGHTSHAFT_RAIN_I=Light Shaft Rain Multiplier + +option.CLOUD_STYLE_DEFINE=Cloud Style +option.CLOUD_STYLE_DEFINE.comment=Determines the style of clouds. §e[*]§r "Default Style" means that the setting will be automatically determined by the "Visual Style" setting in the main menu of Shader Options. §e[*]§r The "Vanilla" style requires clouds to be enabled in Video Settings. +value.CLOUD_STYLE_DEFINE.-1=Default Style +value.CLOUD_STYLE_DEFINE.0=§cOFF +value.CLOUD_STYLE_DEFINE.1=Reimagined +value.CLOUD_STYLE_DEFINE.3=Unbound +value.CLOUD_STYLE_DEFINE.50=Vanilla §e[*] + +option.CLOUD_SHADOWS=Cloud Shadows +option.CLOUD_SHADOWS.comment=Enables shadows that are cast from the clouds. §e[*]§r This setting only works with the "Reimagined" or "Unbound" Cloud Styles. §e[*]§r Cloud shadows will be randomly generated if Cloud Style is set to "Unbound", because of the extra complexity of Unbound clouds. + +option.CLOUD_CLOSED_AREA_CHECK=Prevent Clouds in Interiors +option.CLOUD_CLOSED_AREA_CHECK.comment=Does additional checks to remove clouds in closed areas. §e[*]§r This setting only works with the "Reimagined" or "Unbound" Cloud Styles. §e[*]§r This setting will be disabled if "Real-Time Shadows" is OFF. + +option.CLOUD_ALT1=Cloud Altitude +option.CLOUD_ALT1.comment=Determines the world height which the clouds will appear at. §e[*]§r This setting only works with the "Reimagined" or "Unbound" Cloud Styles. + +option.CLOUD_SPEED_MULT=Cloud Speed +option.CLOUD_SPEED_MULT.comment=Determines how fast the clouds are going to move. "Synced to World Time" setting uses Minecraft world time to advance the cloud positions; this allows for clouds to appear the same between players in the same server. §e[*]§r This setting only works with the "Reimagined" or "Unbound" Cloud Styles. +value.CLOUD_SPEED_MULT.100=Synced to World Time + +option.CLOUD_R=Cloud Red Multiplier +option.CLOUD_G=Cloud Green Multiplier +option.CLOUD_B=Cloud Blue Multiplier + +option.CLOUD_UNBOUND_AMOUNT=Cloud Amount +option.CLOUD_UNBOUND_AMOUNT.comment=Adjusts the amount of Unbound clouds. + +option.CLOUD_UNBOUND_SIZE_MULT=Cloud Smallness +option.CLOUD_UNBOUND_SIZE_MULT.comment=Adjusts the size of Unbound clouds. Higher values produce smaller clouds. + +option.CLOUD_UNBOUND_RAIN_ADD=Rain Cloud Addition +option.CLOUD_UNBOUND_RAIN_ADD.comment=Adjusts the cloud amount increase that gets applied during rain/snow. +prefix.CLOUD_UNBOUND_RAIN_ADD=+ + +option.DOUBLE_REIM_CLOUDS=Double Reimagined Clouds +option.DOUBLE_REIM_CLOUDS.comment=Enables a secondary Reimagined cloud layer. §e[*]§r This setting only works with the "Reimagined" Cloud Style. + +option.CLOUD_ALT2=Cloud Layer 2 Altitude +option.CLOUD_ALT2.comment=Determines the world height which the second layer clouds will appear at. §e[*]§r This setting only works when the "Double Reimagined Clouds" option is enabled with the "Reimagined" Cloud Style. + +option.NETHER_STORM=Nether Storm +option.NETHER_STORM.comment=Adds a smoke-like volumetric effect to the Nether dimension. §c[-]§r This effect can impact performance. + +option.NETHER_STORM_I=Nether Storm Opacity +option.NETHER_STORM_I.comment=Adjusts the opacity of the Nether Storm. + +option.NETHER_STORM_LOWER_ALT=Nether Storm Lower Altitude +option.NETHER_STORM_LOWER_ALT.comment=Determines the lower starting point of the Nether Storm. The Nether Storm won't appear below this altitude, and it will look the most bright right above this altitude. + +option.NETHER_STORM_HEIGHT=Nether Storm Height +option.NETHER_STORM_HEIGHT.comment=Determines how tall the Nether Storm will form. Decrasing this value will result in the Nether Storm gathering near the "Nether Storm Lower Altitude". + +option.NETHER_VIEW_LIMIT=Nether View Limit +option.NETHER_VIEW_LIMIT.comment=Determines the maximum distance that the fog allows to be visible in the Nether. §c[-]§r Increasing this setting can impact performance when "Nether Storm" is enabled. +value.NETHER_VIEW_LIMIT.96.0=6 Chunks +value.NETHER_VIEW_LIMIT.112.0=7 Chunks +value.NETHER_VIEW_LIMIT.128.0=8 Chunks +value.NETHER_VIEW_LIMIT.160.0=10 Chunks +value.NETHER_VIEW_LIMIT.192.0=12 Chunks +value.NETHER_VIEW_LIMIT.224.0=14 Chunks +value.NETHER_VIEW_LIMIT.256.0=16 Chunks +value.NETHER_VIEW_LIMIT.320.0=20 Chunks +value.NETHER_VIEW_LIMIT.384.0=24 Chunks +value.NETHER_VIEW_LIMIT.512.0=32 Chunks §c[-] +value.NETHER_VIEW_LIMIT.768.0=48 Chunks §c[-] +value.NETHER_VIEW_LIMIT.1024.0=64 Chunks §c[-] +value.NETHER_VIEW_LIMIT.99999.0=Limitless §c[-] + +option.NETHER_COLOR_MODE=Color Mode +option.NETHER_COLOR_MODE.comment=Determines how the ambience colors will be handled in the Nether. Constant: Colors won't change between biomes. Biome Based: Colors will change depending on the biome. Biome Based (Modified): Biome based, but the colors have been rebalanced to better suit the default visual direction of Complementary. +value.NETHER_COLOR_MODE.3=Biome Based (Modified) +value.NETHER_COLOR_MODE.2=Biome Based +value.NETHER_COLOR_MODE.0=Constant + +option.T_EXPOSURE=General Brightness +option.T_EXPOSURE.comment=Also known as "Tonemap Exposure". Adjusts the overall brightness of the whole image. + +option.TM_WHITE_CURVE=White Brightness +option.TM_WHITE_CURVE.comment=Also known as "Tonemap White Curve". Adjusts how easily the colors reach to full white. + +option.T_UPPER_CURVE=Contrast of Brighter Colors +option.T_UPPER_CURVE.comment=Also known as "Tonemap Upper Curve". Adjusts contrast of brighter colors. + +option.T_LOWER_CURVE=Contrast of Darker Colors +option.T_LOWER_CURVE.comment=Also known as "Tonemap Lower Curve". Adjusts contrast of darker colors. + +option.T_SATURATION=Saturation +option.T_SATURATION.comment=Adjusts overall colorfulness of the image. + +option.T_VIBRANCE=Saturation of Paler Colors +option.T_VIBRANCE.comment=Also known as "Vibrance". Adjusts the colorfulness of the image, but already colorful pixels are less affected. + +option.COLORGRADING=§eColor Grading +option.COLORGRADING.comment=Enables settings to freely mix up the final color channels. +option.GR_RR=Red to Red +option.GR_RG=Red to Green +option.GR_RB=Red to Blue +option.GR_RC=Red Curve +option.GR_GR=Green to Red +option.GR_GG=Green to Green +option.GR_GB=Green to Blue +option.GR_GC=Green Curve +option.GR_BR=Blue to Red +option.GR_BG=Blue to Green +option.GR_BB=Blue to Blue +option.GR_BC=Blue Curve + +option.WATER_STYLE_DEFINE=Water Style +option.WATER_STYLE_DEFINE.comment=Determines the style of water. §e[*]§r "Default Style" means that the setting will be automatically determined by the "Visual Style" setting in the main menu of Shader Options. +value.WATER_STYLE_DEFINE.-1=Default Style +value.WATER_STYLE_DEFINE.1=Reimagined +value.WATER_STYLE_DEFINE.2=Reimagined + Waves +value.WATER_STYLE_DEFINE.3=Unbound + +option.WATER_CAUSTIC_STYLE_DEFINE=Water Caustic Style +option.WATER_CAUSTIC_STYLE_DEFINE.comment=Determines the style of water shadows, also known as water caustics. +value.WATER_CAUSTIC_STYLE_DEFINE.-1=Same as Water +value.WATER_CAUSTIC_STYLE_DEFINE.1=Reimagined +value.WATER_CAUSTIC_STYLE_DEFINE.3=Unbound + +option.WATER_REFRACTION_INTENSITY=Water Refraction Intensity §e[*]§r +option.WATER_REFRACTION_INTENSITY.comment=Adjusts the intensity of water refraction and underwater distortion. §e[*]§r This setting only fully works when Detail Quality is set to "High", or else it will only affect the subtle underwater distortion. + +option.WATER_FOAM_I=Water Foam Intensity +option.WATER_FOAM_I.comment=Determines the opacity of foam seen on water edges. §e[*]§r This setting only works when Detail Quality is set to Medium or higher. + +option.WATER_ALPHA_MULT=Water Opacity Factor +option.WATER_ALPHA_MULT.comment=Adjusts how opaque the water looks. §c[-]§r Extreme values will break the balance of water lighting. §e[*]§r This setting only works when Detail Quality is set to Medium or higher. + +option.WATER_FOG_MULT=Water Fog Factor +option.WATER_FOG_MULT.comment=Adjusts how close the water fog looks. Higher values provide closer fog. §c[-]§r Extreme values will break the balance of water lighting. + +option.WATERCOLOR_R=Water Surface Red Multiplier +option.WATERCOLOR_G=Water Surface Green Multiplier +option.WATERCOLOR_B=Water Surface Blue Multiplier + +option.WATERCOLOR_MODE=Color Mode +option.WATERCOLOR_MODE.comment=Determines how the water color will be handled. Constant: Water colors won't change between biomes. Biome Based: Color will change depending on the biome. Biome Based (Clamped): Biome based, but prevents the surface color from getting weird in certain biomes. §e[*]§r This setting won't work correctly on Minecraft versions below 1.13. +value.WATERCOLOR_MODE.3=Biome Based (Clamped) +value.WATERCOLOR_MODE.2=Biome Based +value.WATERCOLOR_MODE.0=Constant + +option.BRIGHT_CAVE_WATER=Brighter Shallow/Cave Water +option.BRIGHT_CAVE_WATER.comment=Makes shallow water or water in closed areas brighter to improve visibility in caves, and add some color detail to the shallow parts of oceans. §e[*]§r This effect won't work if Water Opacity Factor is set higher than 199 for technical reasons. + +option.UNDERWATERCOLOR_R=Underwater Red Multiplier +option.UNDERWATERCOLOR_G=Underwater Green Multiplier +option.UNDERWATERCOLOR_B=Underwater Blue Multiplier + +option.WATER_BUMPINESS=Wave Strength +option.WATER_BUMPINESS.comment=Adjusts the intensity of surface-direction waves (normals) seen on water. + +option.WATER_BUMP_SMALL=Wave Strength - Small Waves +option.WATER_BUMP_SMALL.comment=Adjusts the intensity of waves that are smaller than others. + +option.WATER_BUMP_MED=Wave Strength - Medium Waves +option.WATER_BUMP_MED.comment=Adjusts the intensity of waves that are average-sized compared to others. + +option.WATER_BUMP_BIG=Wave Strength - Large Waves +option.WATER_BUMP_BIG.comment=Adjusts the intensity of waves that are larger than others. + +option.WATER_SPEED_MULT=Wave Speed +option.WATER_SPEED_MULT.comment=Adjusts the movement speed of surface-direction waves (normals) seen on water. + +option.WATER_SIZE_MULT=Wave Size +option.WATER_SIZE_MULT.comment=Adjusts how big the surface-direction waves (normals) look on water. + +option.SUN_ANGLE=Sun/Moon Angle +option.SUN_ANGLE.comment=Adjusts the angle of sun/moon relative to the world during noon. §a[+]§r Reimagined's lighting model is specially designed to make the "0" sun angle work just as well as others. +value.SUN_ANGLE.-1=Default Style +value.SUN_ANGLE.0=0 §r(§bReimagined§r) +value.SUN_ANGLE.-40=-40 §r(§dUnbound§r) + +option.SUN_MOON_STYLE_DEFINE=Sun/Moon Style +option.SUN_MOON_STYLE_DEFINE.comment=Determines the style of sun/moon. §e[*]§r This setting might interact incorrectly with some resource packs due to the limitations of sun/moon/skybox differentiation. +value.SUN_MOON_STYLE_DEFINE.-1=Default Style +value.SUN_MOON_STYLE_DEFINE.1=Reimagined +value.SUN_MOON_STYLE_DEFINE.2=Unbound +value.SUN_MOON_STYLE_DEFINE.3=Unbound - Smaller + +option.SUN_MOON_HORIZON=Sun/Moon Horizon +option.SUN_MOON_HORIZON.comment=Prevents the sun/moon from appearing below the horizon line. + +option.SUN_MOON_DURING_RAIN=Sun/Moon During Rain +option.SUN_MOON_DURING_RAIN.comment=Determines if the sun and moon will be visible during rain or not. + +option.NIGHT_STAR_AMOUNT=Night Star Amount +option.NIGHT_STAR_AMOUNT.comment=Determines the amount of stars in the night sky. +value.NIGHT_STAR_AMOUNT.2=Medium +value.NIGHT_STAR_AMOUNT.3=High + +option.RAINBOWS=Rainbows +option.RAINBOWS.comment=Enables rainbows that appear at the opposite side of the sun during the morning/evening. +value.RAINBOWS.0=OFF +value.RAINBOWS.1=After Rain +value.RAINBOWS.3=Always + +option.AURORA_STYLE_DEFINE=Aurora Borealis Style +option.AURORA_STYLE_DEFINE.comment=Determines the style of northern lights that appear in the night sky. +value.AURORA_STYLE_DEFINE.-1=Default Style +value.AURORA_STYLE_DEFINE.0=§cOFF +value.AURORA_STYLE_DEFINE.1=Reimagined +value.AURORA_STYLE_DEFINE.2=Unbound + +option.AURORA_CONDITION=Aurora +option.AURORA_CONDITION.comment=Determines the condition(s) for the Aurora Borealis to appear. §e[*]§r Aurora Borealis will only appear during night regardless of this setting +value.AURORA_CONDITION.0=Every Night +value.AURORA_CONDITION.1=Full Moon +value.AURORA_CONDITION.2=Snowy Biome +value.AURORA_CONDITION.3=Full Moon in Snowy Biome +value.AURORA_CONDITION.4=Full Moon or Snowy Biome + +option.NIGHT_NEBULA=Night Nebulae +option.NIGHT_NEBULA.comment=Adds galaxy-style nebulae to the night sky. The nebulae are procedurally generated, and they will look different every night. §c[-]§r This effect can impact performance. §e[*]§r "Nebulae" isn't a typo, it's the plural of Nebula =D + +option.NIGHT_NEBULA_I=Night Nebula Brightness +option.NIGHT_NEBULA_I.comment=Adjusts the brightness of Night Nebulae. + +option.RAIN_STYLE=Rainy Weather Style +option.RAIN_STYLE.comment=Determines the style of rainy weather. +value.RAIN_STYLE.1=Light & Warmer +value.RAIN_STYLE.2=Heavy & Colder + +option.SPECIAL_BIOME_WEATHER=Special Cold/Dry Weather +option.SPECIAL_BIOME_WEATHER.comment=Changes the atmosphere balance in cold and dry biomes to make things feel like a snowstorm or sandstorm. + +option.WEATHER_TEX_OPACITY=Weather Texture Opacity +option.WEATHER_TEX_OPACITY.comment=Adjusts the opacity of the rainfall/snowfall weather textures. + +option.SHADOW_SMOOTHING=Shadow Smoothing +option.SHADOW_SMOOTHING.comment=Determines the sharpness of shadows. §c[-]§r Lowering this setting will increase shadow flickering and impact performance. §e[*]§r This setting only works if "Real-Time Shadows" is set to Low or higher. +value.SHADOW_SMOOTHING.4=Very Smooth +value.SHADOW_SMOOTHING.3=Smooth +value.SHADOW_SMOOTHING.2=Sharp §c[-] +value.SHADOW_SMOOTHING.1=Very Sharp §c[-] + +option.PIXELATED_SHADOWS=Pixelated Shadows +option.PIXELATED_SHADOWS.comment=Makes shadows cast from the sun and moon look pixelated. + +option.PIXELATED_BLOCKLIGHT=Pixelated Blocklight +option.PIXELATED_BLOCKLIGHT.comment=Makes the lighting cast by light source blocks look pixelated. + +option.PIXELATED_AO=Pixelated Edge Shadows +option.PIXELATED_AO.comment=Makes Minecraft's vanilla ambient occlusion look pixelated. + +option.PIXEL_SCALE=Pixelation Scale +option.PIXEL_SCALE.comment=Scaling done on the textures resolution. +value.PIXEL_SCALE.-2=0.25x +value.PIXEL_SCALE.-1=0.5x +value.PIXEL_SCALE.1=1x +value.PIXEL_SCALE.2=2x +value.PIXEL_SCALE.3=4x +value.PIXEL_SCALE.4=8x +value.PIXEL_SCALE.5=16x + +option.BLOOM=Bloom +option.BLOOM.comment=Enables blurry glow from bright objects and humidity. + +option.BLOOM_STRENGTH=Bloom Strength +option.BLOOM_STRENGTH.comment=Determines the intensity of glow on bright things, and the bloom from rain/cave humidity. §c[-]§r Too much bloom will cause the image to get blurrier and brighter than intended, especially in humid conditions. +value.BLOOM_STRENGTH.0.027=15% +value.BLOOM_STRENGTH.0.036=20% +value.BLOOM_STRENGTH.0.045=25% +value.BLOOM_STRENGTH.0.054=30% +value.BLOOM_STRENGTH.0.063=35% +value.BLOOM_STRENGTH.0.072=40% +value.BLOOM_STRENGTH.0.081=45% +value.BLOOM_STRENGTH.0.09=50% +value.BLOOM_STRENGTH.0.10=55% +value.BLOOM_STRENGTH.0.11=60% +value.BLOOM_STRENGTH.0.12=65% +value.BLOOM_STRENGTH.0.13=70% +value.BLOOM_STRENGTH.0.14=75% +value.BLOOM_STRENGTH.0.15=80% §c[-] +value.BLOOM_STRENGTH.0.16=85% §c[-] +value.BLOOM_STRENGTH.0.17=90% §c[-] +value.BLOOM_STRENGTH.0.18=95% §c[-] +value.BLOOM_STRENGTH.0.19=100% §c[-] +value.BLOOM_STRENGTH.0.21=110% §c[-] +value.BLOOM_STRENGTH.0.23=120% §c[-] +value.BLOOM_STRENGTH.0.25=130% §c[-] +value.BLOOM_STRENGTH.0.28=150% §c[-] +value.BLOOM_STRENGTH.0.32=180% §c[-] +value.BLOOM_STRENGTH.10.00=§cInsane + +option.IMAGE_SHARPENING=Image Sharpening +option.IMAGE_SHARPENING.comment=Makes the image sharper using a filter. §c[-]§r Too much sharpening might cause visual artifacts like aliasing, flickering, noise, and subtle brightness changes. +value.IMAGE_SHARPENING.0=OFF +value.IMAGE_SHARPENING.1=1x +value.IMAGE_SHARPENING.2=2x +value.IMAGE_SHARPENING.3=3x +value.IMAGE_SHARPENING.4=4x +value.IMAGE_SHARPENING.5=5x +value.IMAGE_SHARPENING.6=6x §c[-] +value.IMAGE_SHARPENING.7=7x §c[-] +value.IMAGE_SHARPENING.8=8x §c[-] +value.IMAGE_SHARPENING.9=9x §c[-] +value.IMAGE_SHARPENING.10=10x §c[-] + +option.LENSFLARE_MODE=Lens Flare +option.LENSFLARE_MODE.comment=Adds camera lens reflection effect when towards the sun or moon. §c[-]§r This effect can severely impact performance. +value.LENSFLARE_MODE.0=OFF +value.LENSFLARE_MODE.1=Sun Only +value.LENSFLARE_MODE.2=Sun & Moon + +option.LENSFLARE_I=Lens Flare Intensity +option.LENSFLARE_I.comment=Adjusts the strength of the Lens Flare effect. + +option.TAA_MODE=Temporal Filter +option.TAA_MODE.comment=Determines the behaviour of temporal anti aliasing. Smart & Subtle §a[+]§r: Temporal filter is applied in small amounts to the image in a way that won't cause artifacts. Intense §e[*]§r: Provides better anti-aliasing, but it will cause extra smudging and flickering; it might be the better choice at a higher frame rate and resolution. OFF §c[-]§r: Turning this off will cause worse performance and worse effect quality. +value.TAA_MODE.1=Smart & Subtle §a[+] +value.TAA_MODE.2=Intense §e[*] +value.TAA_MODE.0=OFF §c[-] + +option.DISTANT_LIGHT_BOKEH=Distant Light Bokeh +option.DISTANT_LIGHT_BOKEH.comment=Makes distant light sources look scattered by applying a single pixel blur in the distance. §a[+]§r This effect benefits from IntegratedPBR+ (optional) by adjusting distant light sources for better looks. + +option.MOTION_BLURRING=Motion Blur +option.MOTION_BLURRING.comment=Applies blur to the image when moving the camera. + +option.MOTION_BLURRING_STRENGTH=Motion Blur Strength +option.MOTION_BLURRING_STRENGTH.comment=Adjusts the intensity of motion blur. + +option.WORLD_BLUR=§eWorld Blur +option.WORLD_BLUR.comment=Enables world blurring. Distance Blur: Blur gets applied like fog, depending on the distance from the camera. Depth of Field: Blurring happens depending on the focus point of the camera. §c[-]§r This effect can severely impact performance. +value.WORLD_BLUR.0=OFF +value.WORLD_BLUR.1=Distance Blur +value.WORLD_BLUR.2=Depth of Field + +option.WB_FOV_SCALED=FOV Scaled Blur +option.WB_FOV_SCALED.comment=Scales World Blur to the camera Field of View. World Blur will get more intense if you zoom in with this enabled. + +option.WB_CHROMATIC=Chromatic Blur +option.WB_CHROMATIC.comment=Applies chromatic aberration to the blurry areas, separating different colors in blurred areas. + +option.WB_ANAMORPHIC=Anamorphic Blur +option.WB_ANAMORPHIC.comment=Stretches the blur in one direction. §c[-]§r This option can reduce the quality of the World Blur + +option.WB_DOF_I=Depth of Field Strength +option.WB_DOF_FOCUS=Depth of Field Focus +option.WB_DOF_FOCUS.comment=Determines the focus distance of the camera. Automatic: The focus point will be adjusted according to the center point of the screen. Brightness: The focus point will be determined by the "Brightness" slider in Video Settings. +value.WB_DOF_FOCUS.-1=Brightness §e[*] +value.WB_DOF_FOCUS.0=Automatic + +option.WB_DB_DAY_I=Dis. Blur - Day +option.WB_DB_NIGHT_I=Dis. Blur - Night & Interiors +option.WB_DB_RAIN_I=Dis. Blur - Rain & Snow +option.WB_DB_WATER_I=Dis. Blur - Underwater +option.WB_DB_NETHER_I=Dis. Blur - The Nether +option.WB_DB_END_I=Dis. Blur - The End + +option.VIGNETTE_R=Vignette +option.VIGNETTE_R.comment=Applies darkening around the edges of the screen. + +option.CHROMA_ABERRATION=Chromatic Aberration +option.CHROMA_ABERRATION.comment=Separates different colors towards the edges of the screen. §c[-]§r Chromatic Aberration can cause the image to feel blurry; high values aren't recommended for gameplay. +value.CHROMA_ABERRATION.4=4 §c[-] +value.CHROMA_ABERRATION.5=5 §c[-] +value.CHROMA_ABERRATION.6=6 §c[-] +value.CHROMA_ABERRATION.7=7 §c[-] +value.CHROMA_ABERRATION.8=8 §c[-] + +option.IPBR_EMISSIVE_MODE=IPBR+ Emissive Mode +option.IPBR_EMISSIVE_MODE.comment=Determines the handling of emissives within IntegratedPBR+. Choosing the labPBR or seuspbr options allow compatible resource packs to completely override IPBR+ emissives on blocks that have specular textures attached to them. §c[-]§r It's not recommended to change this setting unless you know what you are doing. +value.IPBR_EMISSIVE_MODE.1=IPBR+ Only +value.IPBR_EMISSIVE_MODE.3=labPBR > IPBR+ +value.IPBR_EMISSIVE_MODE.2=seuspbr > IPBR+ + +option.IPBR_PARTICLE_FEATURES=IPBR+ Particle Features +option.IPBR_PARTICLE_FEATURES.comment=Enables several features for particles, including things like glowing lava particles and better-colored water particles. + +option.FANCY_GLASS=Improved Glass +option.FANCY_GLASS.comment=Improves the regular glass by adding a translucent layer to it. §c[-]§r Does not work on older Iris versions. §e[*]§r RP Support option must be set to Integrated PBR+. + +option.GREEN_SCREEN_LIME=Green Screen Lime Blocks +option.GREEN_SCREEN_LIME.comment=Turns "Lime Concrete", "Lime Wool", and "Lime Carpet" into green screens for video editing. Tip 1: Turn off "Bloom" option to improve separation. Tip 2: Put lights under lime carpets for lighting. Tip 3: You can turn off Anti-Aliasing (FXAA) and set Detail Quality to Potato in Performance Settings to disable all filtering and get pixel-perfect separation. + +option.HAND_SWAYING=Hand Sway +option.HAND_SWAYING.comment=Adds slow movement to the player hand to simulate a breathing animation. +value.HAND_SWAYING.0=OFF +value.HAND_SWAYING.1=Subtle +value.HAND_SWAYING.2=Normal +value.HAND_SWAYING.3=Intense + +option.LESS_LAVA_FOG=Less Fog Inside Lava or Snow +option.LESS_LAVA_FOG.comment=Reduces the lava fog and powder snow fog to improve visibility inside them. + +option.REDUCE_CLOSE_PARTICLES=Reduce Close-up Particles +option.REDUCE_CLOSE_PARTICLES.comment=Reduces the opacity of particles that are close to the camera to improve visibility. + +option.SNOWY_WORLD=Snowy World +option.SNOWY_WORLD.comment=Makes the entire world covered with snow. + +option.SHOW_LIGHT_LEVEL=Show Light Levels +option.SHOW_LIGHT_LEVEL.comment=In Overworld: Yellow means mobs can spawn during night time, red means mobs can spawn anytime. In Nether or End: Yellow means some mobs can spawn, red means all mobs can spawn. §e[*]§r Disable Smooth Lighting for precise results. +value.SHOW_LIGHT_LEVEL.0=OFF +value.SHOW_LIGHT_LEVEL.1=Hold Spider Eye +value.SHOW_LIGHT_LEVEL.2=Hold Light Source +value.SHOW_LIGHT_LEVEL.3=Always ON + +option.COLOR_CODED_PROGRAMS=Color Coded Programs §c[-]§r +option.COLOR_CODED_PROGRAMS.comment=Shows which shader programs are being used to render geometry. §c[-]§r This option is only for development purposes and shouldn't be used for gameplay. §e[*]§r Color values can be found in the shader pack files: shaders/lib/misc/colorCodedPrograms.glsl + +option.GLOWING_COLORED_PARTICLES=Force Glowing Particles §c[-]§r +option.GLOWING_COLORED_PARTICLES.comment=Makes all particles that are technically "colored" turn emissive. §c[-]§r This option isn't recommended for general gameplay as it makes a lot of particles glow when they are made of materials that shouldn't glow at all. + +option.MINIMUM_LIGHT_MODE=Cave Lighting +option.MINIMUM_LIGHT_MODE.comment=Adds extra lighting to areas that don't have skylight. §a[+]§r "Default" option determines the lighting according to the "Brightness" slider in Video Settings. §c[-]§r Drastically changing this setting can break the lighting balance. +value.MINIMUM_LIGHT_MODE.0=Very Dark +value.MINIMUM_LIGHT_MODE.1=Dark +value.MINIMUM_LIGHT_MODE.2=Default §a[+] +value.MINIMUM_LIGHT_MODE.3=Bright +value.MINIMUM_LIGHT_MODE.4=Very Bright +value.MINIMUM_LIGHT_MODE.5=Ultra Bright §c[-] +value.MINIMUM_LIGHT_MODE.6=Extreme Bright §c[-] + +option.AMBIENT_MULT=Shadow Light Multiplier +option.AMBIENT_MULT.comment=Determines the amount of ambient lighting seen in shadows. §c[-]§r Drastically changing this setting can break the lighting balance. + +option.PLAYER_SHADOW=Player Shadow §e[*]§r +option.PLAYER_SHADOW.comment=Determines if the player will cast a shadow or not. §e[*]§r This setting only works on Iris. §e[*]§r This setting will be disabled if "Real-Time Shadows" is OFF. +value.PLAYER_SHADOW.-1=OFF +value.PLAYER_SHADOW.1=ON + +option.GENERATED_NORMALS=Generated Normals +option.GENERATED_NORMALS.comment=Adds auto-generated bumpy details to surfaces. §e[*]§r RP Support option must be set to Integrated PBR+. + +option.COATED_TEXTURES=Coated Textures +option.COATED_TEXTURES.comment=Adds auto-generated dusty details to textures. §e[*]§r RP Support option must be set to Integrated PBR+. + +option.ENTITY_GN_AND_CT=Allow GN and CT on Entities +option.ENTITY_GN_AND_CT.comment=Decides if Generated Normals and Coated Textures can appear on entities. §e[*]§r This won't enable GN or CT on entities if the main GN or CT options are disabled. + +option.GENERATED_NORMAL_MULT=Generated Normal Strength +option.GENERATED_NORMAL_MULT.comment=Adjusts the strength of auto-generated bumpy details on surfaces. + +option.COATED_TEXTURE_MULT=Coated Texture Strength +option.COATED_TEXTURE_MULT.comment=Adjusts the strength of auto-generated dusty details on textures. + +option.GLOWING_ORE_MASTER=§eEnable Glowing Ores +option.GLOWING_ORE_MASTER.comment=Enables the functionality of glowing ores. §e[*]§r Choosing "Default" will only enable glowing ores if the "Visual Style" is set to "Unbound". §e[*]§r The settings below won't work if this option isn't enabled. +value.GLOWING_ORE_MASTER.0=§cOFF +value.GLOWING_ORE_MASTER.1=Default [*] +value.GLOWING_ORE_MASTER.2=§aON + +option.GLOWING_ORE_MULT=Ore Glow Strength +option.GLOWING_ORE_MULT.comment=Determines the emission strength of glowing ores. + +option.GLOWING_ORE_IRON=Glowing Iron Ore +option.GLOWING_ORE_GOLD=Glowing Gold Ore +option.GLOWING_ORE_COPPER=Glowing Copper Ore +option.GLOWING_ORE_REDSTONE=Glowing Redstone Ore §e[*]§r +option.GLOWING_ORE_REDSTONE.comment=§e[*]§r All redstone ores will still glow if they are "activated" regardless of this setting. +option.GLOWING_ORE_LAPIS=Glowing Lapis Lazuli Ore +option.GLOWING_ORE_EMERALD=Glowing Emerald Ore +option.GLOWING_ORE_DIAMOND=Glowing Diamond Ore +option.GLOWING_ORE_NETHERQUARTZ=Glowing Nether Quartz Ore +option.GLOWING_ORE_NETHERGOLD=Glowing Nether Gold Ore +option.GLOWING_ORE_GILDEDBLACKSTONE=Glowing Gilded Blackstone +option.GLOWING_ORE_ANCIENTDEBRIS=Glowing Ancient Debris +option.GLOWING_ORE_MODDED=Glowing Modded Ores §e[*]§r +option.GLOWING_ORE_MODDED.comment=§e[*]§r You can add modded ore IDs to "Complementary-->shaders-->block.properties" file in order to make them glow. You can open block.properties using any text editor like notepad, and then add modded ore block IDs next to "block.10024=". + +option.GLOWING_AMETHYST=Glowing Amethyst +value.GLOWING_AMETHYST.0=§cOFF +value.GLOWING_AMETHYST.1=Crystal +value.GLOWING_AMETHYST.2=Crystal & Block + +option.GLOWING_LICHEN=Glowing Glow Lichen +value.GLOWING_LICHEN.0=§cOFF +value.GLOWING_LICHEN.1=In Closed Areas +value.GLOWING_LICHEN.2=Always + +option.EMISSIVE_REDSTONE_BLOCK=Glowing Redstone Block + +option.EMISSIVE_LAPIS_BLOCK=Glowing Lapis Lazuli Block + +option.GLOWING_ARMOR_TRIM=Glowing Armor Trim §e[*]§r +option.GLOWING_ARMOR_TRIM.comment=Makes armor trims emissive. §e[*]§r This feature only works on Iris, as Optifine doesn't support armor trim detection. + +option.NORMAL_MAP_STRENGTH=Normal Map Strength +option.NORMAL_MAP_STRENGTH.comment=Adjusts the strength of bumpy details on surfaces. §e[*]§r RP Support option must be set to labPBR/seuspbr, and a compatible resource pack must be used. + +option.CUSTOM_EMISSION_INTENSITY=Custom Emission Intensity +option.CUSTOM_EMISSION_INTENSITY.comment=Adjusts the intensity of glowing surfaces. §e[*]§r RP Support option must be set to labPBR/seuspbr, and a compatible resource pack must be used. + +option.POM=Parallax Occlusion Mapping +option.POM.comment=Enables 3D effect on surfaces. §c[-]§r This effect can severely impact performance. §e[*]§r RP Support option must be set to labPBR/seuspbr, and a compatible resource pack must be used. +value.POM.false=OFF +value.POM.true=ON §c[-] + +option.POM_DEPTH=POM Depth +option.POM_DEPTH.comment=Adjusts the depth of parallax occlusion mapping. §e[*]§r RP Support option must be set to labPBR/seuspbr, and a compatible resource pack must be used. + +option.POM_QUALITY=POM Quality +option.POM_QUALITY.comment=Adjusts the sharpness/accuracy of parallax occlusion mapping. §c[-]§r Values higher than 200 can severely impact performance. §e[*]§r Values lower than 100 will force "POM Lighting Mode" to "Smooth". §e[*]§r RP Support option must be set to labPBR/seuspbr, and a compatible resource pack must be used. +value.POM_QUALITY.16=16 §e[*] +value.POM_QUALITY.32=32 §e[*] +value.POM_QUALITY.64=64 §e[*] +value.POM_QUALITY.256=256 §c[-] +value.POM_QUALITY.512=512 §c[-] + +option.POM_DISTANCE=POM Distance +option.POM_DISTANCE.comment=Adjusts how far parallax occlusion mapping is calculated. §e[*]§r It's recommended to keep this value below 50 to get a small performance gain. §e[*]§r RP Support option must be set to labPBR/seuspbr, and a compatible resource pack must be used. +value.POM_DISTANCE.64=64 §e[*] +value.POM_DISTANCE.128=128 §e[*] +value.POM_DISTANCE.256=256 §e[*] +value.POM_DISTANCE.512=512 §e[*] +value.POM_DISTANCE.1024=1024 §e[*] + +option.POM_LIGHTING_MODE=POM Lighting Mode +option.POM_LIGHTING_MODE.comment=Adjusts the lighting style for POM-affected surfaces. Sharp: POM walls won't get light if they aren't facing towards the light. Smooth: POM walls will still get light as if they are not walls. §e[*]§r This option will be forced to "Smooth" if POM Quality is set lower than 100. +value.POM_LIGHTING_MODE.1=Smooth +value.POM_LIGHTING_MODE.2=Sharp + +option.POM_ALLOW_CUTOUT=POM on Cutout Surfaces §c[-]§r +option.POM_ALLOW_CUTOUT.comment=Makes POM be able to work on cutout block sections (like gaps of leaves). §c[-]§r This effect can severely impact performance. + +option.DIRECTIONAL_BLOCKLIGHT=Directional Blocklight +option.DIRECTIONAL_BLOCKLIGHT.comment=Adds depth to blocklight depending on the surface normal. §c[-]§r May cause visual artifacts in some situations. §c[-]§r This effect can impact performance. §e[*]§r RP Support option must be set to labPBR/seuspbr, and a compatible resource pack must be used. +value.DIRECTIONAL_BLOCKLIGHT.0=OFF +value.DIRECTIONAL_BLOCKLIGHT.3=Subtle §c[-] +value.DIRECTIONAL_BLOCKLIGHT.7=Normal §c[-] +value.DIRECTIONAL_BLOCKLIGHT.11=Intense §c[-] + +option.HELD_LIGHTING_MODE=Dynamic Handheld Lighting +option.HELD_LIGHTING_MODE.comment=Allows handheld light sources to cast light onto the scene. +value.HELD_LIGHTING_MODE.0=§cOFF +value.HELD_LIGHTING_MODE.1=Subtle +value.HELD_LIGHTING_MODE.2=Normal + +option.BLOCKLIGHT_FLICKERING=Blocklight Flickering +option.BLOCKLIGHT_FLICKERING.comment=Adds a flickering effect to the light cast from blocks. +value.BLOCKLIGHT_FLICKERING.0=OFF + +option.WAVING_SPEED=Waving Speed +option.WAVING_SPEED.comment=Adjusts how quickly the waving effects happen. + +option.WAVING_I=Waving Intensity +option.WAVING_I.comment=Adjusts how much the blocks move when waving. §c[-]§r Too much waving intensity can cause waving blocks to clip in and out of other blocks. +value.WAVING_I.1.25=1.25 §c[-] +value.WAVING_I.1.50=1.50 §c[-] +value.WAVING_I.1.75=1.75 §c[-] +value.WAVING_I.2.00=2.00 §c[-] +value.WAVING_I.50.0=§cInsane + +option.NO_WAVING_INDOORS=No Waving in Closed Areas +option.NO_WAVING_INDOORS.comment=Prevents blocks from waving in closed areas using skylight. §c[-]§r This setting being enabled can cause problems with some resource packs or mods. + +option.WAVING_I_RAIN_MULT=Waving Rain Multiplier +option.WAVING_I_RAIN_MULT.comment=Multiplies the speed and intensity of waving during rain. §c[-]§r Too much waving intensity can cause waving blocks to clip in and out of other blocks. §c[-]§r This setting can impact performance when increased above 100. +value.WAVING_I.125=125 §c[-] +value.WAVING_I.150=150 §c[-] +value.WAVING_I.175=175 §c[-] +value.WAVING_I.200=200 §c[-] + +option.WAVING_FOLIAGE=Waving Grass +option.WAVING_FOLIAGE.comment=Adds movement to grass and other similar foliage to simulate wind. + +option.WAVING_LEAVES=Waving Leaves +option.WAVING_LEAVES.comment=Adds movement to leaves to simulate wind. + +option.WAVING_LAVA=Waving Lava Texture +option.WAVING_LAVA.comment=Adds constant movement to lava. §e[*]§r Lava waving in particular is not affected by the "No Waving in Closed Areas" setting. + +option.WAVING_LILY_PAD=Waving Lily Pad +option.WAVING_LILY_PAD.comment=Adds movement to lily pads and frogspawn to simulate impact from water waves. + +option.WAVING_WATER_VERTEX=Waving Water Texture +option.WAVING_WATER_VERTEX.comment=Adds movement to water position to simulate wind. §e[*]§r This option is not related to the "Water Wave Strength" setting. + +option.WAVING_RAIN=Waving Rain/Snow Texture +option.WAVING_RAIN.comment=Adds movement to falling rain and snow textures to make it look more dynamic. + +option.SPECIAL_PORTAL_EFFECTS=Special Portal Effects +option.SPECIAL_PORTAL_EFFECTS.comment=Adds special animations and emission to Nether Portals, End Portals, and End Gateways. + +option.WORLD_OUTLINE=World Outline +option.WORLD_OUTLINE.comment=Adds bright outlines around blocks. §c[-]§r This effect can impact performance. + +option.WORLD_OUTLINE_THICKNESS=World Outline Thickness +option.WORLD_OUTLINE_THICKNESS.comment=Determines the thickness of the World Outline effect. §c[-]§r Increasing this setting can impact performance. + +option.WORLD_OUTLINE_I=World Outline Brightness +option.WORLD_OUTLINE_I.comment=Determines how intense the World Outline effect will be. + +option.WORLD_OUTLINE_ON_ENTITIES=World Outline on Entities +option.WORLD_OUTLINE_ON_ENTITIES.comment=Determines if the World Outline effect will apply to entities or not. §c[-]§r This setting may not work perfectly with some custom PBR resource packs. + +option.DARK_OUTLINE=Dark Outline +option.DARK_OUTLINE.comment=Adds dark outlines around blocks. §c[-]§r This effect can impact performance. + +option.DARK_OUTLINE_THICKNESS=Dark Outline Thickness +option.DARK_OUTLINE_THICKNESS.comment=Determines the thickness of the Dark Outline effect. §c[-]§r Increasing this setting can impact performance. + +option.RAIN_PUDDLES=Rain Puddles +option.RAIN_PUDDLES.comment=Adds water puddles to the terrain during rain. §c[-]§r Rain puddles can severely impact performance. +value.RAIN_PUDDLES.0=OFF +value.RAIN_PUDDLES.1=§aON - Puddles +value.RAIN_PUDDLES.2=§aON - Full Coverage +value.RAIN_PUDDLES.3=§aON - §cAlways§a Puddles +value.RAIN_PUDDLES.4=§aON - §cAlways§a Full + +option.UNDERWATER_DISTORTION=Underwater Distortion +option.UNDERWATER_DISTORTION.comment=Adds subtle refraction to the screen when the camera is inside water. + +option.SELECT_OUTLINE=Selection Outline +option.SELECT_OUTLINE.comment=Determines the color of the block selection outline. +value.SELECT_OUTLINE.0=§cOFF +value.SELECT_OUTLINE.1=Default +value.SELECT_OUTLINE.2=Rainbow +value.SELECT_OUTLINE.3=Select Color +value.SELECT_OUTLINE.4=Versatile + +option.SELECT_OUTLINE_AUTO_HIDE=Auto Hide Selection Outline +option.SELECT_OUTLINE_AUTO_HIDE.comment=Hides the block selection outline if the player isn't holding anything in any of their hands, or only holding a light source in the off-hand. + +option.SELECT_OUTLINE_I=SO Brightness +option.SELECT_OUTLINE_R=SO Red +option.SELECT_OUTLINE_G=SO Green +option.SELECT_OUTLINE_B=SO Blue + +option.MOON_PHASE_INF_LIGHT=Moon Phased Night Lighting +option.MOON_PHASE_INF_LIGHT.comment=Enables different moon phases to change the night lighting brightness. + +option.MOON_PHASE_INF_ATMOSPHERE=Moon Phased Night Atmosphere +option.MOON_PHASE_INF_ATMOSPHERE.comment=Enabled different moon phases to change the night atmosphere brightness. + +option.MOON_PHASE_INF_REFLECTION=Moon Phased Moon Reflection +option.MOON_PHASE_INF_REFLECTION.comment=Enables different moon phases to change the brightness of moon reflections. + +option.MOON_PHASE_FULL=Full Moon Intensity +option.MOON_PHASE_FULL.comment=Adjusts the moon phase influence during the Full Moon phase (brightest phase). + +option.MOON_PHASE_PARTIAL=Partial Moon Intensity +option.MOON_PHASE_PARTIAL.comment=Adjusts the moon phase influence during all moon phases between Full Moon and Dark Moon. This is the phase you will see the most in Minecraft. + +option.MOON_PHASE_DARK=Dark Moon Intensity +option.MOON_PHASE_DARK.comment=Adjusts the moon phase influence during New Moon (darkest phase). + +option.CONNECTED_GLASS_EFFECT=Connected Glass +option.CONNECTED_GLASS_EFFECT.comment=Makes all types of glass connect to each other. §e[*]§r This feature only works if Advanced Colored Lighting is enabled in Performance Settings and your system supports it. §e[*]§r This feature will be automatically disable itself if the "Continuity" mod is installed. + +option.PORTAL_EDGE_EFFECT=Glowing Portal Edges +option.PORTAL_EDGE_EFFECT.comment=Adds an emissive border effect to end and nether portals. §e[*]§r This feature only works if Advanced Colored Lighting is enabled in Performance Settings and your system supports it. + +option.PUDDLE_VOXELIZATION=Fix Puddles Under Glass +option.PUDDLE_VOXELIZATION.comment=Prevents rain puddles from forming in closed areas with glass roofs when the Rain Puddles setting is enabled. §e[*]§r This feature only works if Advanced Colored Lighting is enabled in Performance Settings and your system supports it. + +option.COLORED_CANDLE_LIGHT=Colored Candle Lighting +option.COLORED_CANDLE_LIGHT.comment=Makes lights cast by candles to be the same color as their bases. §e[*]§r The desaturated candle color variants will continue to use the usual fire color. + +option.COLORED_LIGHT_SATURATION=Colored Lighting Saturation +option.COLORED_LIGHT_SATURATION.comment=Adjusts how saturated the colors produced from Advanced Colored Lighting will be. §e[*]§r It's not recommended to change this value, as the visuals are designed to look the most balanced with the default saturation. + +option.COLORED_LIGHT_FOG=Colored Light Fog +option.COLORED_LIGHT_FOG.comment=Adds volumetric blocklight fog to the scene, most visible during the night or underground. §e[*]§r This feature only works if Advanced Colored Lighting is enabled in Performance Settings and your system supports it. §c[-]§r This effect can severely impact performance. + +option.COLORED_LIGHT_FOG_I=Light Fog Intensity +option.COLORED_LIGHT_FOG_I.comment=Determines the brightness of the Colored Light Fog. + +option.LIGHT_COLOR_MULTS=§eLighting Color Multipliers +option.LIGHT_COLOR_MULTS.comment=Enables customization of lighting colors that are seen on all surfaces. + +option.ATM_COLOR_MULTS=§eAtmosphere Color Multipliers +option.ATM_COLOR_MULTS.comment=Enables customization of atmosphere colors that are mostly seen in the sky and fog. + +option.LIGHT_MORNING_R=Lighting Red Multiplier +option.LIGHT_MORNING_G=Lighting Green Multiplier +option.LIGHT_MORNING_B=Lighting Blue Multiplier +option.LIGHT_MORNING_I=Lighting Intensity Multiplier +option.ATM_MORNING_R=Atmosphere Red Multiplier +option.ATM_MORNING_G=Atmosphere Green Multiplier +option.ATM_MORNING_B=Atmosphere Blue Multiplier +option.ATM_MORNING_I=Atmosphere Intensity Multiplier +option.LIGHT_NOON_R=Lighting Red Multiplier +option.LIGHT_NOON_G=Lighting Green Multiplier +option.LIGHT_NOON_B=Lighting Blue Multiplier +option.LIGHT_NOON_I=Lighting Intensity Multiplier +option.ATM_NOON_R=Atmosphere Red Multiplier +option.ATM_NOON_G=Atmosphere Green Multiplier +option.ATM_NOON_B=Atmosphere Blue Multiplier +option.ATM_NOON_I=Atmosphere Intensity Multiplier +option.LIGHT_NIGHT_R=Lighting Red Multiplier +option.LIGHT_NIGHT_G=Lighting Green Multiplier +option.LIGHT_NIGHT_B=Lighting Blue Multiplier +option.LIGHT_NIGHT_I=Lighting Intensity Multiplier +option.ATM_NIGHT_R=Atmosphere Red Multiplier +option.ATM_NIGHT_G=Atmosphere Green Multiplier +option.ATM_NIGHT_B=Atmosphere Blue Multiplier +option.ATM_NIGHT_I=Atmosphere Intensity Multiplier +option.LIGHT_RAIN_R=Lighting Red Multiplier +option.LIGHT_RAIN_G=Lighting Green Multiplier +option.LIGHT_RAIN_B=Lighting Blue Multiplier +option.LIGHT_RAIN_I=Lighting Intensity Multiplier +option.ATM_RAIN_R=Atmosphere Red Multiplier +option.ATM_RAIN_G=Atmosphere Green Multiplier +option.ATM_RAIN_B=Atmosphere Blue Multiplier +option.ATM_RAIN_I=Atmosphere Intensity Multiplier +option.LIGHT_NETHER_R=Lighting Red Multiplier +option.LIGHT_NETHER_G=Lighting Green Multiplier +option.LIGHT_NETHER_B=Lighting Blue Multiplier +option.LIGHT_NETHER_I=Lighting Intensity Multiplier +option.ATM_NETHER_R=Atmosphere Red Multiplier +option.ATM_NETHER_G=Atmosphere Green Multiplier +option.ATM_NETHER_B=Atmosphere Blue Multiplier +option.ATM_NETHER_I=Atmosphere Intensity Multiplier +option.LIGHT_END_R=Lighting Red Multiplier +option.LIGHT_END_G=Lighting Green Multiplier +option.LIGHT_END_B=Lighting Blue Multiplier +option.LIGHT_END_I=Lighting Intensity Multiplier +option.ATM_END_R=Atmosphere Red Multiplier +option.ATM_END_G=Atmosphere Green Multiplier +option.ATM_END_B=Atmosphere Blue Multiplier +option.ATM_END_I=Atmosphere Intensity Multiplier + +option.XLIGHT_R=Blocklight Red Multiplier +option.XLIGHT_G=Blocklight Green Multiplier +option.XLIGHT_B=Blocklight Blue Multiplier +option.XLIGHT_I=Blocklight Intensity \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/antialiasing/fxaa.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/antialiasing/fxaa.glsl new file mode 100644 index 0000000..88a5f96 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/antialiasing/fxaa.glsl @@ -0,0 +1,151 @@ +//FXAA 3.11 from http://blog.simonrodriguez.fr/articles/30-07-2016_implementing_fxaa.html +float quality[12] = float[12] (1.0, 1.0, 1.0, 1.0, 1.0, 1.5, 2.0, 2.0, 2.0, 2.0, 4.0, 8.0); + +void FXAA311(inout vec3 color) { + float edgeThresholdMin = 0.03125; + float edgeThresholdMax = 0.0625; + float subpixelQuality = 0.75; + int iterations = 12; + + vec2 view = 1.0 / vec2(viewWidth, viewHeight); + + float lumaCenter = GetLuminance(color); + float lumaDown = GetLuminance(texelFetch(colortex3, texelCoord + ivec2( 0, -1), 0).rgb); + float lumaUp = GetLuminance(texelFetch(colortex3, texelCoord + ivec2( 0, 1), 0).rgb); + float lumaLeft = GetLuminance(texelFetch(colortex3, texelCoord + ivec2(-1, 0), 0).rgb); + float lumaRight = GetLuminance(texelFetch(colortex3, texelCoord + ivec2( 1, 0), 0).rgb); + + float lumaMin = min(lumaCenter, min(min(lumaDown, lumaUp), min(lumaLeft, lumaRight))); + float lumaMax = max(lumaCenter, max(max(lumaDown, lumaUp), max(lumaLeft, lumaRight))); + + float lumaRange = lumaMax - lumaMin; + + if (lumaRange > max(edgeThresholdMin, lumaMax * edgeThresholdMax)) { + float lumaDownLeft = GetLuminance(texelFetch(colortex3, texelCoord + ivec2(-1, -1), 0).rgb); + float lumaUpRight = GetLuminance(texelFetch(colortex3, texelCoord + ivec2( 1, 1), 0).rgb); + float lumaUpLeft = GetLuminance(texelFetch(colortex3, texelCoord + ivec2(-1, 1), 0).rgb); + float lumaDownRight = GetLuminance(texelFetch(colortex3, texelCoord + ivec2( 1, -1), 0).rgb); + + float lumaDownUp = lumaDown + lumaUp; + float lumaLeftRight = lumaLeft + lumaRight; + + float lumaLeftCorners = lumaDownLeft + lumaUpLeft; + float lumaDownCorners = lumaDownLeft + lumaDownRight; + float lumaRightCorners = lumaDownRight + lumaUpRight; + float lumaUpCorners = lumaUpRight + lumaUpLeft; + + float edgeHorizontal = abs(-2.0 * lumaLeft + lumaLeftCorners ) + + abs(-2.0 * lumaCenter + lumaDownUp ) * 2.0 + + abs(-2.0 * lumaRight + lumaRightCorners); + float edgeVertical = abs(-2.0 * lumaUp + lumaUpCorners ) + + abs(-2.0 * lumaCenter + lumaLeftRight ) * 2.0 + + abs(-2.0 * lumaDown + lumaDownCorners ); + + bool isHorizontal = (edgeHorizontal >= edgeVertical); + + float luma1 = isHorizontal ? lumaDown : lumaLeft; + float luma2 = isHorizontal ? lumaUp : lumaRight; + float gradient1 = luma1 - lumaCenter; + float gradient2 = luma2 - lumaCenter; + + bool is1Steepest = abs(gradient1) >= abs(gradient2); + float gradientScaled = 0.25 * max(abs(gradient1), abs(gradient2)); + + float stepLength = isHorizontal ? view.y : view.x; + + float lumaLocalAverage = 0.0; + + if (is1Steepest) { + stepLength = - stepLength; + lumaLocalAverage = 0.5 * (luma1 + lumaCenter); + } else { + lumaLocalAverage = 0.5 * (luma2 + lumaCenter); + } + + vec2 currentUv = texCoord; + if (isHorizontal) { + currentUv.y += stepLength * 0.5; + } else { + currentUv.x += stepLength * 0.5; + } + + vec2 offset = isHorizontal ? vec2(view.x, 0.0) : vec2(0.0, view.y); + + vec2 uv1 = currentUv - offset; + vec2 uv2 = currentUv + offset; + float lumaEnd1 = GetLuminance(texture2D(colortex3, uv1).rgb); + float lumaEnd2 = GetLuminance(texture2D(colortex3, uv2).rgb); + lumaEnd1 -= lumaLocalAverage; + lumaEnd2 -= lumaLocalAverage; + + bool reached1 = abs(lumaEnd1) >= gradientScaled; + bool reached2 = abs(lumaEnd2) >= gradientScaled; + bool reachedBoth = reached1 && reached2; + + if (!reached1) { + uv1 -= offset; + } + if (!reached2) { + uv2 += offset; + } + + if (!reachedBoth) { + for (int i = 2; i < iterations; i++) { + if (!reached1) { + lumaEnd1 = GetLuminance(texture2D(colortex3, uv1).rgb); + lumaEnd1 = lumaEnd1 - lumaLocalAverage; + } + if (!reached2) { + lumaEnd2 = GetLuminance(texture2D(colortex3, uv2).rgb); + lumaEnd2 = lumaEnd2 - lumaLocalAverage; + } + + reached1 = abs(lumaEnd1) >= gradientScaled; + reached2 = abs(lumaEnd2) >= gradientScaled; + reachedBoth = reached1 && reached2; + + if (!reached1) { + uv1 -= offset * quality[i]; + } + if (!reached2) { + uv2 += offset * quality[i]; + } + + if (reachedBoth) break; + } + } + + float distance1 = isHorizontal ? (texCoord.x - uv1.x) : (texCoord.y - uv1.y); + float distance2 = isHorizontal ? (uv2.x - texCoord.x) : (uv2.y - texCoord.y); + + bool isDirection1 = distance1 < distance2; + float distanceFinal = min(distance1, distance2); + + float edgeThickness = (distance1 + distance2); + + float pixelOffset = - distanceFinal / edgeThickness + 0.5; + + bool isLumaCenterSmaller = lumaCenter < lumaLocalAverage; + + bool correctVariation = ((isDirection1 ? lumaEnd1 : lumaEnd2) < 0.0) != isLumaCenterSmaller; + + float finalOffset = correctVariation ? pixelOffset : 0.0; + + float lumaAverage = (1.0 / 12.0) * (2.0 * (lumaDownUp + lumaLeftRight) + lumaLeftCorners + lumaRightCorners); + float subPixelOffset1 = clamp(abs(lumaAverage - lumaCenter) / lumaRange, 0.0, 1.0); + float subPixelOffset2 = (-2.0 * subPixelOffset1 + 3.0) * subPixelOffset1 * subPixelOffset1; + float subPixelOffsetFinal = subPixelOffset2 * subPixelOffset2 * subpixelQuality; + + finalOffset = max(finalOffset, subPixelOffsetFinal); + + // Compute the final UV coordinates. + vec2 finalUv = texCoord; + if (isHorizontal) { + finalUv.y += finalOffset * stepLength; + } else { + finalUv.x += finalOffset * stepLength; + } + + color = texture2D(colortex3, finalUv).rgb; + } +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/antialiasing/jitter.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/antialiasing/jitter.glsl new file mode 100644 index 0000000..f89acf0 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/antialiasing/jitter.glsl @@ -0,0 +1,19 @@ +// Jitter offset from Chocapic13 +vec2 jitterOffsets[8] = vec2[8]( + vec2( 0.125,-0.375), + vec2(-0.125, 0.375), + vec2( 0.625, 0.125), + vec2( 0.375,-0.625), + vec2(-0.625, 0.625), + vec2(-0.875,-0.125), + vec2( 0.375,-0.875), + vec2( 0.875, 0.875) + ); + +vec2 TAAJitter(vec2 coord, float w) { + vec2 offset = jitterOffsets[int(framemod8)] * (w / vec2(viewWidth, viewHeight)); + #if TAA_MODE == 1 && !defined DH_TERRAIN && !defined DH_WATER + offset *= 0.125; + #endif + return coord + offset; +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/antialiasing/taa.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/antialiasing/taa.glsl new file mode 100644 index 0000000..718ab3e --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/antialiasing/taa.glsl @@ -0,0 +1,156 @@ +#if TAA_MODE == 1 + float blendMinimum = 0.3; + float blendVariable = 0.2; + float blendConstant = 0.7; + + float regularEdge = 20.0; + float extraEdgeMult = 3.0; +#elif TAA_MODE == 2 + float blendMinimum = 0.6; + float blendVariable = 0.2; + float blendConstant = 0.7; + + float regularEdge = 5.0; + float extraEdgeMult = 3.0; +#endif + +// Previous frame reprojection from Chocapic13 +vec2 Reprojection(vec4 viewPos1) { + vec4 pos = gbufferModelViewInverse * viewPos1; + vec4 previousPosition = pos + vec4(cameraPosition - previousCameraPosition, 0.0); + previousPosition = gbufferPreviousModelView * previousPosition; + previousPosition = gbufferPreviousProjection * previousPosition; + return previousPosition.xy / previousPosition.w * 0.5 + 0.5; +} + +vec3 RGBToYCoCg(vec3 col) { + return vec3( + col.r * 0.25 + col.g * 0.5 + col.b * 0.25, + col.r * 0.5 - col.b * 0.5, + col.r * -0.25 + col.g * 0.5 + col.b * -0.25 + ); +} + +vec3 YCoCgToRGB(vec3 col) { + float n = col.r - col.b; + return vec3(n + col.g, col.r + col.b, n - col.g); +} + +vec3 ClipAABB(vec3 q, vec3 aabb_min, vec3 aabb_max){ + vec3 p_clip = 0.5 * (aabb_max + aabb_min); + vec3 e_clip = 0.5 * (aabb_max - aabb_min) + 0.00000001; + + vec3 v_clip = q - vec3(p_clip); + vec3 v_unit = v_clip.xyz / e_clip; + vec3 a_unit = abs(v_unit); + float ma_unit = max(a_unit.x, max(a_unit.y, a_unit.z)); + + if (ma_unit > 1.0) + return vec3(p_clip) + v_clip / ma_unit; + else + return q; +} + +ivec2 neighbourhoodOffsets[8] = ivec2[8]( + ivec2( 1, 1), + ivec2( 1,-1), + ivec2(-1, 1), + ivec2(-1,-1), + ivec2( 1, 0), + ivec2( 0, 1), + ivec2(-1, 0), + ivec2( 0,-1) +); + +void NeighbourhoodClamping(vec3 color, inout vec3 tempColor, float z0, float z1, inout float edge) { + vec3 minclr = color; + vec3 maxclr = minclr; + + int cc = 2; + ivec2 texelCoordM1 = clamp(texelCoord, ivec2(cc), ivec2(view) - cc); // Fixes screen edges + for (int i = 0; i < 8; i++) { + ivec2 texelCoordM2 = texelCoordM1 + neighbourhoodOffsets[i]; + + float z0Check = texelFetch(depthtex0, texelCoordM2, 0).r; + float z1Check = texelFetch(depthtex1, texelCoordM2, 0).r; + if (max(abs(GetLinearDepth(z0Check) - GetLinearDepth(z0)), abs(GetLinearDepth(z1Check) - GetLinearDepth(z1))) > 0.09) { + edge = regularEdge; + + if (int(texelFetch(colortex6, texelCoordM2, 0).g * 255.1) == 253) // Reduced Edge TAA + edge *= extraEdgeMult; + } + + vec3 clr = texelFetch(colortex3, texelCoordM2, 0).rgb; + minclr = min(minclr, clr); maxclr = max(maxclr, clr); + } + + tempColor = ClipAABB(tempColor, minclr, maxclr); +} + +void DoTAA(inout vec3 color, inout vec3 temp, float z1) { + int materialMask = int(texelFetch(colortex6, texelCoord, 0).g * 255.1); + + vec4 screenPos1 = vec4(texCoord, z1, 1.0); + vec4 viewPos1 = gbufferProjectionInverse * (screenPos1 * 2.0 - 1.0); + viewPos1 /= viewPos1.w; + + #ifdef ENTITY_TAA_NOISY_CLOUD_FIX + float cloudLinearDepth = texture2D(colortex4, texCoord).r; + float lViewPos1 = length(viewPos1); + + if (pow2(cloudLinearDepth) * renderDistance < min(lViewPos1, renderDistance)) { + // Material in question is obstructed by the cloud volume + materialMask = 0; + } + #endif + + if (materialMask == 254) { // No SSAO, No TAA + #ifndef CUSTOM_PBR + if (z1 <= 0.56) return; // The edge pixel trick doesn't look nice on hand + #endif + int i = 0; + while (i < 4) { + int mms = int(texelFetch(colortex6, texelCoord + neighbourhoodOffsets[i], 0).g * 255.1); + if (mms != materialMask) break; + i++; + } // Checking edge-pixels prevents flickering + if (i == 4) return; + } + + float z0 = texelFetch(depthtex0, texelCoord, 0).r; + + vec2 prvCoord = texCoord; + if (z1 > 0.56) prvCoord = Reprojection(viewPos1); + + vec3 tempColor = texture2D(colortex2, prvCoord).rgb; + if (tempColor == vec3(0.0)) { // Fixes the first frame || Possibly fixes nans spreading around + temp = color; + return; + } + + float edge = 0.0; + NeighbourhoodClamping(color, tempColor, z0, z1, edge); + + if (materialMask == 253) // Reduced Edge TAA + edge *= extraEdgeMult; + + #ifdef DISTANT_HORIZONS + if (z0 == 1.0) { + blendMinimum = 0.75; + blendVariable = 0.05; + blendConstant = 0.9; + edge = 1.0; + } + #endif + + vec2 velocity = (texCoord - prvCoord.xy) * view; + float blendFactor = float(prvCoord.x > 0.0 && prvCoord.x < 1.0 && + prvCoord.y > 0.0 && prvCoord.y < 1.0); + float velocityFactor = dot(velocity, velocity) * 10.0; + blendFactor *= max(exp(-velocityFactor) * blendVariable + blendConstant - length(cameraPosition - previousCameraPosition) * edge, blendMinimum); + + color = mix(color, tempColor, blendFactor); + temp = color; + + //if (edge > 0.05) color.rgb = vec3(1.0, 0.0, 1.0); +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/auroraBorealis.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/auroraBorealis.glsl new file mode 100644 index 0000000..05a075a --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/auroraBorealis.glsl @@ -0,0 +1,72 @@ +vec3 GetAuroraBorealis(vec3 viewPos, float VdotU, float dither) { + float visibility = sqrt1(clamp01(VdotU * 1.5 - 0.225)) - sunVisibility - rainFactor - maxBlindnessDarkness; + visibility *= 1.0 - VdotU * 0.9; + + #if AURORA_CONDITION == 1 || AURORA_CONDITION == 3 + visibility -= moonPhase; + #endif + #if AURORA_CONDITION == 2 || AURORA_CONDITION == 3 + visibility *= inSnowy; + #endif + #if AURORA_CONDITION == 4 + visibility = max(visibility * inSnowy, visibility - moonPhase); + #endif + + if (visibility > 0.0) { + vec3 aurora = vec3(0.0); + + vec3 wpos = mat3(gbufferModelViewInverse) * viewPos; + wpos.xz /= wpos.y; + vec2 cameraPositionM = cameraPosition.xz * 0.0075; + cameraPositionM.x += syncedTime * 0.04; + + #ifdef DEFERRED1 + int sampleCount = 25; + int sampleCountP = sampleCount + 5; + #else + int sampleCount = 10; + int sampleCountP = sampleCount + 10; + #endif + + float ditherM = dither + 5.0; + float auroraAnimate = frameTimeCounter * 0.001; + for (int i = 0; i < sampleCount; i++) { + float current = pow2((i + ditherM) / sampleCountP); + + vec2 planePos = wpos.xz * (0.8 + current) * 11.0 + cameraPositionM; + #if AURORA_STYLE == 1 + planePos = floor(planePos) * 0.0007; + + float noise = texture2D(noisetex, planePos).b; + noise = pow2(pow2(pow2(pow2(1.0 - 2.0 * abs(noise - 0.5))))); + + noise *= pow1_5(texture2D(noisetex, planePos * 100.0 + auroraAnimate).b); + #else + planePos *= 0.0007; + + float noise = texture2D(noisetex, planePos).r; + noise = pow2(pow2(pow2(pow2(1.0 - 2.0 * abs(noise - 0.5))))); + + noise *= texture2D(noisetex, planePos * 3.0 + auroraAnimate).b; + noise *= texture2D(noisetex, planePos * 5.0 - auroraAnimate).b; + #endif + + float currentM = 1.0 - current; + aurora += noise * currentM * mix(vec3(7.0, 2.2, 12.0), vec3(6.0, 16.0, 12.0), pow2(pow2(currentM))); + } + + #if AURORA_STYLE == 1 + aurora *= 1.3; + #else + aurora *= 1.8; + #endif + + #ifdef ATM_COLOR_MULTS + aurora *= sqrtAtmColorMult; // C72380KD - Reduced atmColorMult impact on some things + #endif + + return aurora * visibility / sampleCount; + } + + return vec3(0.0); +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/clouds/cloudCoord.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/clouds/cloudCoord.glsl new file mode 100644 index 0000000..f21ed9a --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/clouds/cloudCoord.glsl @@ -0,0 +1,30 @@ +#ifndef INCLUDE_CLOUD_COORD + #define INCLUDE_CLOUD_COORD + + const float cloudNarrowness = 0.05; + + // Thanks to SixthSurge + vec2 GetRoundedCloudCoord(vec2 pos, float cloudRoundness) { // cloudRoundness is meant to be 0.125 for clouds and 0.35 for cloud shadows + vec2 coord = pos.xy + 0.5; + vec2 signCoord = sign(coord); + coord = abs(coord) + 1.0; + vec2 i, f = modf(coord, i); + f = smoothstep(0.5 - cloudRoundness, 0.5 + cloudRoundness, f); + coord = i + f; + return (coord - 0.5) * signCoord / 256.0; + } + + vec3 ModifyTracePos(vec3 tracePos, int cloudAltitude) { + #if CLOUD_SPEED_MULT == 100 + float wind = syncedTime; + #else + #define CLOUD_SPEED_MULT_M CLOUD_SPEED_MULT * 0.01 + float wind = frameTimeCounter * CLOUD_SPEED_MULT_M; + #endif + tracePos.x += wind; + tracePos.z += cloudAltitude * 64.0; + tracePos.xz *= cloudNarrowness; + return tracePos.xyz; + } + +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/clouds/mainClouds.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/clouds/mainClouds.glsl new file mode 100644 index 0000000..570442f --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/clouds/mainClouds.glsl @@ -0,0 +1,108 @@ +#include "/lib/colors/lightAndAmbientColors.glsl" +#include "/lib/colors/cloudColors.glsl" +#include "/lib/atmospherics/sky.glsl" + +float InterleavedGradientNoiseForClouds() { + float n = 52.9829189 * fract(0.06711056 * gl_FragCoord.x + 0.00583715 * gl_FragCoord.y); + #ifdef TAA + return fract(n + goldenRatio * mod(float(frameCounter), 3600.0)); + #else + return fract(n); + #endif +} + +#if SHADOW_QUALITY > -1 + vec3 GetShadowOnCloudPosition(vec3 tracePos, vec3 cameraPos) { + vec3 wpos = PlayerToShadow(tracePos - cameraPos); + float distb = sqrt(wpos.x * wpos.x + wpos.y * wpos.y); + float distortFactor = 1.0 - shadowMapBias + distb * shadowMapBias; + vec3 shadowPosition = vec3(vec2(wpos.xy / distortFactor), wpos.z * 0.2); + return shadowPosition * 0.5 + 0.5; + } + + bool GetShadowOnCloud(vec3 tracePos, vec3 cameraPos, int cloudAltitude, float lowerPlaneAltitude, float higherPlaneAltitude) { + const float cloudShadowOffset = 0.5; + + vec3 shadowPosition0 = GetShadowOnCloudPosition(tracePos, cameraPos); + if (length(shadowPosition0.xy * 2.0 - 1.0) < 1.0) { + float shadowsample0 = shadow2D(shadowtex0, shadowPosition0).z; + + if (shadowsample0 == 0.0) return true; + } + + return false; + } +#endif + +#ifdef CLOUDS_REIMAGINED + #include "/lib/atmospherics/clouds/reimaginedClouds.glsl" +#endif +#ifdef CLOUDS_UNBOUND + #include "/lib/atmospherics/clouds/unboundClouds.glsl" +#endif + +vec4 GetClouds(inout float cloudLinearDepth, float skyFade, vec3 cameraPos, vec3 playerPos, + float lViewPos, float VdotS, float VdotU, float dither, vec3 auroraBorealis, vec3 nightNebula) { + vec4 clouds = vec4(0.0); + + vec3 nPlayerPos = normalize(playerPos); + float lViewPosM = lViewPos < renderDistance * 1.5 ? lViewPos - 1.0 : 1000000000.0; + float skyMult0 = pow2(skyFade * 3.333333 - 2.333333); + + float thresholdMix = pow2(clamp01(VdotU * 5.0)); + float thresholdF = mix(far, 1000.0, thresholdMix * 0.5 + 0.5); + #ifdef DISTANT_HORIZONS + thresholdF = max(thresholdF, renderDistance); + #endif + + #ifdef CLOUDS_REIMAGINED + cloudAmbientColor *= 1.0 - 0.25 * rainFactor; + #endif + + vec3 cloudColorMult = vec3(1.0); + #if CLOUD_R != 100 || CLOUD_G != 100 || CLOUD_B != 100 + cloudColorMult *= vec3(CLOUD_R, CLOUD_G, CLOUD_B) * 0.01; + #endif + cloudAmbientColor *= cloudColorMult; + cloudLightColor *= cloudColorMult; + + #if !defined DOUBLE_REIM_CLOUDS || defined CLOUDS_UNBOUND + clouds = GetVolumetricClouds(cloudAlt1i, thresholdF, cloudLinearDepth, skyFade, skyMult0, + cameraPos, nPlayerPos, lViewPosM, VdotS, VdotU, dither); + #else + int maxCloudAlt = max(cloudAlt1i, cloudAlt2i); + int minCloudAlt = min(cloudAlt1i, cloudAlt2i); + + if (abs(cameraPos.y - minCloudAlt) < abs(cameraPos.y - maxCloudAlt)) { + clouds = GetVolumetricClouds(minCloudAlt, thresholdF, cloudLinearDepth, skyFade, skyMult0, + cameraPos, nPlayerPos, lViewPosM, VdotS, VdotU, dither); + if (clouds.a == 0.0) { + clouds = GetVolumetricClouds(maxCloudAlt, thresholdF, cloudLinearDepth, skyFade, skyMult0, + cameraPos, nPlayerPos, lViewPosM, VdotS, VdotU, dither); + } + } else { + clouds = GetVolumetricClouds(maxCloudAlt, thresholdF, cloudLinearDepth, skyFade, skyMult0, + cameraPos, nPlayerPos, lViewPosM, VdotS, VdotU, dither); + if (clouds.a == 0.0) { + clouds = GetVolumetricClouds(minCloudAlt, thresholdF, cloudLinearDepth, skyFade, skyMult0, + cameraPos, nPlayerPos, lViewPosM, VdotS, VdotU, dither); + } + } + #endif + + #ifdef ATM_COLOR_MULTS + clouds.rgb *= sqrtAtmColorMult; // C72380KD - Reduced atmColorMult impact on some things + #endif + #ifdef MOON_PHASE_INF_ATMOSPHERE + clouds.rgb *= moonPhaseInfluence; + #endif + + #if AURORA_STYLE > 0 + clouds.rgb += auroraBorealis * 0.1; + #endif + #ifdef NIGHT_NEBULA + clouds.rgb += nightNebula * 0.2; + #endif + + return clouds; +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/clouds/reimaginedClouds.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/clouds/reimaginedClouds.glsl new file mode 100644 index 0000000..2a09c24 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/clouds/reimaginedClouds.glsl @@ -0,0 +1,142 @@ +#include "/lib/atmospherics/clouds/cloudCoord.glsl" + +const float cloudStretch = 5.5; +const float cloudHeight = cloudStretch * 2.0; + +bool GetCloudNoise(vec3 tracePos, inout vec3 tracePosM, int cloudAltitude) { + tracePosM = ModifyTracePos(tracePos, cloudAltitude); + vec2 coord = GetRoundedCloudCoord(tracePosM.xz, 0.125); + + #ifdef DEFERRED1 + float noise = texture2D(colortex3, coord).b; + #else + float noise = texture2D(gaux4, coord).b; + #endif + + float threshold = clamp(abs(cloudAltitude - tracePos.y) / cloudStretch, 0.001, 0.999); + threshold = pow2(pow2(pow2(threshold))); + return noise > threshold * 0.5 + 0.25; +} + +vec4 GetVolumetricClouds(int cloudAltitude, float distanceThreshold, inout float cloudLinearDepth, float skyFade, float skyMult0, vec3 cameraPos, vec3 nPlayerPos, float lViewPosM, float VdotS, float VdotU, float dither) { + vec4 volumetricClouds = vec4(0.0); + + float higherPlaneAltitude = cloudAltitude + cloudStretch; + float lowerPlaneAltitude = cloudAltitude - cloudStretch; + + float lowerPlaneDistance = (lowerPlaneAltitude - cameraPos.y) / nPlayerPos.y; + float higherPlaneDistance = (higherPlaneAltitude - cameraPos.y) / nPlayerPos.y; + float minPlaneDistance = min(lowerPlaneDistance, higherPlaneDistance); + minPlaneDistance = max(minPlaneDistance, 0.0); + float maxPlaneDistance = max(lowerPlaneDistance, higherPlaneDistance); + if (maxPlaneDistance < 0.0) return vec4(0.0); + float planeDistanceDif = maxPlaneDistance - minPlaneDistance; + + #if CLOUD_QUALITY == 1 || !defined DEFERRED1 + int sampleCount = max(int(planeDistanceDif) / 16, 6); + #elif CLOUD_QUALITY == 2 + int sampleCount = max(int(planeDistanceDif) / 8, 12); + #elif CLOUD_QUALITY == 3 + int sampleCount = max(int(planeDistanceDif), 12); + #endif + + float stepMult = planeDistanceDif / sampleCount; + vec3 traceAdd = nPlayerPos * stepMult; + vec3 tracePos = cameraPos + minPlaneDistance * nPlayerPos; + tracePos += traceAdd * dither; + tracePos.y -= traceAdd.y; + + #ifdef FIX_AMD_REFLECTION_CRASH + sampleCount = min(sampleCount, 30); //BFARC + #endif + + for (int i = 0; i < sampleCount; i++) { + tracePos += traceAdd; + + vec3 cloudPlayerPos = tracePos - cameraPos; + float lTracePos = length(cloudPlayerPos); + float lTracePosXZ = length(cloudPlayerPos.xz); + float cloudMult = 1.0; + if (lTracePosXZ > distanceThreshold) break; + if (lTracePos > lViewPosM) { + if (skyFade < 0.7) continue; + else cloudMult = skyMult0; + } + + vec3 tracePosM; + if (GetCloudNoise(tracePos, tracePosM, cloudAltitude)) { + float lightMult = 1.0; + + #if SHADOW_QUALITY > -1 + float shadowLength = min(shadowDistance, far) * 0.9166667; //consistent08JJ622 + if (shadowLength > lTracePos) + if (GetShadowOnCloud(tracePos, cameraPos, cloudAltitude, lowerPlaneAltitude, higherPlaneAltitude)) { + #ifdef CLOUD_CLOSED_AREA_CHECK + if (eyeBrightness.y != 240) continue; + else + #endif + lightMult = 0.25; + } + #endif + + float cloudShading = 1.0 - (higherPlaneAltitude - tracePos.y) / cloudHeight; + float VdotSM1 = max0(sunVisibility > 0.5 ? VdotS : - VdotS); + + #if CLOUD_QUALITY >= 2 + #ifdef DEFERRED1 + float cloudShadingM = 1.0 - pow2(cloudShading); + #else + float cloudShadingM = 1.0 - cloudShading; + #endif + + float gradientNoise = InterleavedGradientNoiseForClouds(); + + vec3 cLightPos = tracePosM; + vec3 cLightPosAdd = normalize(ViewToPlayer(lightVec * 1000000000.0)) * vec3(0.08); + cLightPosAdd *= shadowTime; + + float light = 2.0; + cLightPos += (1.0 + gradientNoise) * cLightPosAdd; + #ifdef DEFERRED1 + light -= texture2D(colortex3, GetRoundedCloudCoord(cLightPos.xz, 0.125)).b * cloudShadingM; + #else + light -= texture2D(gaux4, GetRoundedCloudCoord(cLightPos.xz, 0.125)).b * cloudShadingM; + #endif + cLightPos += gradientNoise * cLightPosAdd; + #ifdef DEFERRED1 + light -= texture2D(colortex3, GetRoundedCloudCoord(cLightPos.xz, 0.125)).b * cloudShadingM; + #else + light -= texture2D(gaux4, GetRoundedCloudCoord(cLightPos.xz, 0.125)).b * cloudShadingM; + #endif + + float VdotSM2 = VdotSM1 * shadowTime * 0.25; + VdotSM2 += 0.5 * cloudShading + 0.08; + cloudShading = VdotSM2 * light * lightMult; + #endif + + vec3 colorSample = cloudAmbientColor + cloudLightColor * (0.07 + cloudShading); + vec3 cloudSkyColor = GetSky(VdotU, VdotS, dither, true, false); + #ifdef ATM_COLOR_MULTS + cloudSkyColor *= sqrtAtmColorMult; // C72380KD - Reduced atmColorMult impact on some things + #endif + float distanceRatio = (distanceThreshold - lTracePosXZ) / distanceThreshold; + float cloudDistanceFactor = clamp(distanceRatio, 0.0, 0.75); + #ifndef DISTANT_HORIZONS + float cloudFogFactor = cloudDistanceFactor; + #else + float cloudFogFactor = pow1_5(clamp(distanceRatio, 0.0, 1.0)) * 0.75; + #endif + float skyMult1 = 1.0 - 0.2 * (1.0 - skyFade) * max(sunVisibility2, nightFactor); + float skyMult2 = 1.0 - 0.33333 * skyFade; + colorSample = mix(cloudSkyColor, colorSample * skyMult1, cloudFogFactor * skyMult2); + colorSample *= pow2(1.0 - maxBlindnessDarkness); + + cloudLinearDepth = sqrt(lTracePos / renderDistance); + volumetricClouds.a = pow(cloudDistanceFactor * 1.33333, 0.5 + 10.0 * pow(abs(VdotSM1), 90.0)) * cloudMult; + volumetricClouds.rgb = colorSample; + break; + } + } + + return volumetricClouds; +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/clouds/unboundClouds.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/clouds/unboundClouds.glsl new file mode 100644 index 0000000..0449d64 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/clouds/unboundClouds.glsl @@ -0,0 +1,217 @@ +#if CLOUD_UNBOUND_SIZE_MULT != 100 + #define CLOUD_UNBOUND_SIZE_MULT_M CLOUD_UNBOUND_SIZE_MULT * 0.01 +#endif + +#if CLOUD_QUALITY == 1 || !defined DEFERRED1 + const float cloudStretchRaw = 11.0; +#elif CLOUD_QUALITY == 2 + const float cloudStretchRaw = 16.0; +#elif CLOUD_QUALITY == 3 + const float cloudStretchRaw = 18.0; +#endif +#if CLOUD_UNBOUND_SIZE_MULT <= 100 + const float cloudStretch = cloudStretchRaw; +#else + const float cloudStretch = cloudStretchRaw / float(CLOUD_UNBOUND_SIZE_MULT_M); +#endif + +const float cloudHeight = cloudStretch * 2.0; + +float Noise3D(vec3 p) { + p.z = fract(p.z) * 128.0; + float iz = floor(p.z); + float fz = fract(p.z); + vec2 a_off = vec2(23.0, 29.0) * (iz) / 128.0; + vec2 b_off = vec2(23.0, 29.0) * (iz + 1.0) / 128.0; + float a = texture2D(noisetex, p.xy + a_off).r; + float b = texture2D(noisetex, p.xy + b_off).r; + return mix(a, b, fz); +} + +float GetCloudNoise(vec3 tracePos, int cloudAltitude, float lTracePosXZ, float cloudPlayerPosY) { + vec3 tracePosM = tracePos.xyz * 0.00016; + float wind = 0.0006; + float noise = 0.0; + float currentPersist = 1.0; + float total = 0.0; + + #if CLOUD_SPEED_MULT == 100 + #define CLOUD_SPEED_MULT_M CLOUD_SPEED_MULT * 0.01 + wind *= syncedTime; + #else + #define CLOUD_SPEED_MULT_M CLOUD_SPEED_MULT * 0.01 + wind *= frameTimeCounter * CLOUD_SPEED_MULT_M; + #endif + #if CLOUD_UNBOUND_SIZE_MULT != 100 + tracePosM *= CLOUD_UNBOUND_SIZE_MULT_M; + wind *= CLOUD_UNBOUND_SIZE_MULT_M; + #endif + + #if CLOUD_QUALITY == 1 + int sampleCount = 2; + float persistance = 0.6; + float noiseMult = 0.95; + tracePosM *= 0.5; wind *= 0.5; + #elif CLOUD_QUALITY == 2 || !defined DEFERRED1 + int sampleCount = 4; + float persistance = 0.5; + float noiseMult = 1.07; + #elif CLOUD_QUALITY == 3 + int sampleCount = 4; + float persistance = 0.5; + float noiseMult = 1.0; + #endif + + #ifndef DEFERRED1 + noiseMult *= 1.2; + #endif + + for (int i = 0; i < sampleCount; i++) { + #if CLOUD_QUALITY >= 2 + noise += Noise3D(tracePosM + vec3(wind, 0.0, 0.0)) * currentPersist; + #else + noise += texture2D(noisetex, tracePosM.xz + vec2(wind, 0.0)).b * currentPersist; + #endif + total += currentPersist; + + tracePosM *= 3.0; + wind *= 0.5; + currentPersist *= persistance; + } + noise = pow2(noise / total); + + #ifndef DISTANT_HORIZONS + #define CLOUD_BASE_ADD 0.65 + #define CLOUD_FAR_ADD 0.01 + #define CLOUD_ABOVE_ADD 0.1 + #else + #define CLOUD_BASE_ADD 0.9 + #define CLOUD_FAR_ADD -0.005 + #define CLOUD_ABOVE_ADD 0.03 + #endif + + noiseMult *= CLOUD_BASE_ADD + + CLOUD_FAR_ADD * sqrt(lTracePosXZ + 10.0) // more/less clouds far away + + CLOUD_ABOVE_ADD * clamp01(-cloudPlayerPosY / cloudHeight) // more clouds when camera is above them + + CLOUD_UNBOUND_RAIN_ADD * rainFactor; // more clouds during rain + noise *= noiseMult * CLOUD_UNBOUND_AMOUNT; + + float threshold = clamp(abs(cloudAltitude - tracePos.y) / cloudStretch, 0.001, 0.999); + threshold = pow2(pow2(pow2(threshold))); + return noise - (threshold * 0.2 + 0.25); +} + +vec4 GetVolumetricClouds(int cloudAltitude, float distanceThreshold, inout float cloudLinearDepth, float skyFade, float skyMult0, vec3 cameraPos, vec3 nPlayerPos, float lViewPosM, float VdotS, float VdotU, float dither) { + vec4 volumetricClouds = vec4(0.0); + + float higherPlaneAltitude = cloudAltitude + cloudStretch; + float lowerPlaneAltitude = cloudAltitude - cloudStretch; + + float lowerPlaneDistance = (lowerPlaneAltitude - cameraPos.y) / nPlayerPos.y; + float higherPlaneDistance = (higherPlaneAltitude - cameraPos.y) / nPlayerPos.y; + float minPlaneDistance = min(lowerPlaneDistance, higherPlaneDistance); + minPlaneDistance = max(minPlaneDistance, 0.0); + float maxPlaneDistance = max(lowerPlaneDistance, higherPlaneDistance); + if (maxPlaneDistance < 0.0) return vec4(0.0); + float planeDistanceDif = maxPlaneDistance - minPlaneDistance; + + #ifndef DEFERRED1 + float stepMult = 32.0; + #elif CLOUD_QUALITY == 1 + float stepMult = 16.0; + #elif CLOUD_QUALITY == 2 + float stepMult = 24.0; + #elif CLOUD_QUALITY == 3 + float stepMult = 16.0; + #endif + + #if CLOUD_UNBOUND_SIZE_MULT > 100 + stepMult = stepMult / sqrt(float(CLOUD_UNBOUND_SIZE_MULT_M)); + #endif + + int sampleCount = int(planeDistanceDif / stepMult + dither + 1); + vec3 traceAdd = nPlayerPos * stepMult; + vec3 tracePos = cameraPos + minPlaneDistance * nPlayerPos; + tracePos += traceAdd * dither; + tracePos.y -= traceAdd.y; + + float firstHitPos = 0.0; + float VdotSM1 = max0(sunVisibility > 0.5 ? VdotS : - VdotS); + float VdotSM1M = VdotSM1 * invRainFactor; + float VdotSM2 = pow2(VdotSM1) * abs(sunVisibility - 0.5) * 2.0; + float VdotSM3 = VdotSM2 * (2.5 + rainFactor) + 1.5 * rainFactor; + + #ifdef FIX_AMD_REFLECTION_CRASH + sampleCount = min(sampleCount, 30); //BFARC + #endif + + for (int i = 0; i < sampleCount; i++) { + tracePos += traceAdd; + + if (abs(tracePos.y - cloudAltitude) > cloudStretch) break; + + vec3 cloudPlayerPos = tracePos - cameraPos; + float lTracePos = length(cloudPlayerPos); + float lTracePosXZ = length(cloudPlayerPos.xz); + float cloudMult = 1.0; + if (lTracePosXZ > distanceThreshold) break; + if (lTracePos > lViewPosM) { + if (skyFade < 0.7) continue; + else cloudMult = skyMult0; + } + + float cloudNoise = GetCloudNoise(tracePos, cloudAltitude, lTracePosXZ, cloudPlayerPos.y); + + if (cloudNoise > 0.00001) { + #if defined CLOUD_CLOSED_AREA_CHECK && SHADOW_QUALITY > -1 + float shadowLength = min(shadowDistance, far) * 0.9166667; //consistent08JJ622 + if (shadowLength < lTracePos) + if (GetShadowOnCloud(tracePos, cameraPos, cloudAltitude, lowerPlaneAltitude, higherPlaneAltitude)) { + if (eyeBrightness.y != 240) continue; + } + #endif + + if (firstHitPos < 1.0) { + firstHitPos = lTracePos; + #if CLOUD_QUALITY == 1 && defined DEFERRED1 + tracePos.y += 4.0 * (texture2D(noisetex, tracePos.xz * 0.001).r - 0.5); + #endif + } + + float opacityFactor = min1(cloudNoise * 8.0); + + float cloudShading = 1.0 - (higherPlaneAltitude - tracePos.y) / cloudHeight; + cloudShading *= 1.0 + 0.75 * VdotSM3 * (1.0 - opacityFactor); + + vec3 colorSample = cloudAmbientColor * (0.7 + 0.3 * cloudShading) + cloudLightColor * cloudShading; + //vec3 colorSample = 2.5 * cloudLightColor * pow2(cloudShading); // <-- Used this to take the Unbound logo + vec3 cloudSkyColor = GetSky(VdotU, VdotS, dither, true, false); + #ifdef ATM_COLOR_MULTS + cloudSkyColor *= sqrtAtmColorMult; // C72380KD - Reduced atmColorMult impact on some things + #endif + float distanceRatio = (distanceThreshold - lTracePosXZ) / distanceThreshold; + float cloudDistanceFactor = clamp(distanceRatio, 0.0, 0.8) * 1.25; + #ifndef DISTANT_HORIZONS + float cloudFogFactor = cloudDistanceFactor; + #else + float cloudFogFactor = clamp(distanceRatio, 0.0, 1.0); + #endif + float skyMult1 = 1.0 - 0.2 * (1.0 - skyFade) * max(sunVisibility2, nightFactor); + float skyMult2 = 1.0 - 0.33333 * skyFade; + colorSample = mix(cloudSkyColor, colorSample * skyMult1, cloudFogFactor * skyMult2 * 0.72); + colorSample *= pow2(1.0 - maxBlindnessDarkness); + + volumetricClouds.rgb = mix(volumetricClouds.rgb, colorSample, 1.0 - min1(volumetricClouds.a)); + volumetricClouds.a += opacityFactor * pow(cloudDistanceFactor, 0.5 + 10.0 * pow(abs(VdotSM1M), 90.0)) * cloudMult; + + if (volumetricClouds.a > 0.9) { + volumetricClouds.a = 1.0; + break; + } + } + } + + if (volumetricClouds.a > 0.5) cloudLinearDepth = sqrt(firstHitPos / renderDistance); + + return volumetricClouds; +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/enderBeams.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/enderBeams.glsl new file mode 100644 index 0000000..9c9cc52 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/enderBeams.glsl @@ -0,0 +1,57 @@ +#ifndef INCLUDE_ENDER_BEAMS + #define INCLUDE_ENDER_BEAMS + + #include "/lib/colors/lightAndAmbientColors.glsl" + + vec3 endOrangeCol = vec3(1.0, 0.3, 0.0); + vec3 beamPurple = normalize(ambientColor * ambientColor * ambientColor) * (2.5 - 1.0 * vlFactor); + vec3 beamOrange = endOrangeCol * (300.0 + 700.0 * vlFactor); + + vec2 wind = vec2(syncedTime * 0.00); + + float BeamNoise(vec2 planeCoord, vec2 wind) { + float noise = texture2D(noisetex, planeCoord * 0.175 - wind * 0.0625).b; + noise+= texture2D(noisetex, planeCoord * 0.04375 + wind * 0.0375).b * 5.0; + + return noise; + } + + vec3 DrawEnderBeams(float VdotU, vec3 playerPos) { + int sampleCount = 8; + + float VdotUM = 1.0 - VdotU * VdotU; + float VdotUM2 = VdotUM + smoothstep1(pow2(pow2(1.0 - abs(VdotU)))) * 0.2; + + vec4 beams = vec4(0.0); + float gradientMix = 1.0; + for (int i = 0; i < sampleCount; i++) { + vec2 planeCoord = playerPos.xz + cameraPosition.xz; + planeCoord *= (1.0 + i * 6.0 / sampleCount) * 0.0014; + + float noise = BeamNoise(planeCoord, wind); + noise = max(0.75 - 1.0 / abs(noise - (4.0 + VdotUM * 2.0)), 0.0) * 3.0; + + if (noise > 0.0) { + noise *= 0.65; + float fireNoise = texture2D(noisetex, abs(planeCoord * 0.2) - wind).b; + noise *= 0.5 * fireNoise + 0.75; + noise = noise * noise * 3.0 / sampleCount; + noise *= VdotUM2; + + vec3 beamColor = beamPurple; + beamColor += beamOrange * pow2(pow2(fireNoise - 0.5)); + beamColor *= gradientMix / sampleCount; + + noise *= exp2(-6.0 * i / float(sampleCount)); + beams += vec4(noise * beamColor, noise); + } + gradientMix += 1.0; + } + + beams.rgb *= beams.a * beams.a * beams.a * 3.5; + beams.rgb = sqrt(beams.rgb); + + return beams.rgb; + } + +#endif //INCLUDE_ENDER_BEAMS \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/enderStars.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/enderStars.glsl new file mode 100644 index 0000000..f1773dd --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/enderStars.glsl @@ -0,0 +1,29 @@ +float GetEnderStarNoise(vec2 pos) { + return fract(sin(dot(pos, vec2(12.9898, 4.1414))) * 43758.54953); +} + +vec3 GetEnderStars(vec3 viewPos, float VdotU) { + vec3 wpos = normalize((gbufferModelViewInverse * vec4(viewPos * 1000.0, 1.0)).xyz); + + vec3 starCoord = 0.65 * wpos / (abs(wpos.y) + length(wpos.xz)); + vec2 starCoord2 = starCoord.xz * 0.5; + if (VdotU < 0.0) starCoord2 += 100.0; + float starFactor = 1024.0; + starCoord2 = floor(starCoord2 * starFactor) / starFactor; + + float star = 1.0; + star *= GetEnderStarNoise(starCoord2.xy); + star *= GetEnderStarNoise(starCoord2.xy+0.1); + star *= GetEnderStarNoise(starCoord2.xy+0.23); + star = max(star - 0.7, 0.0); + star *= star; + + vec3 enderStars = star * endSkyColor * 3000.0; + + float VdotUM1 = abs(VdotU); + float VdotUM2 = pow2(1.0 - VdotUM1); + enderStars *= VdotUM1 * VdotUM1 * (VdotUM2 + 0.015) + 0.015; + //if (gl_FragCoord.x > 960.0) enderStars = vec3(VdotUM1); else enderStars = vec3(VdotUM2); + + return enderStars; +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/fog/bloomFog.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/fog/bloomFog.glsl new file mode 100644 index 0000000..bca373e --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/fog/bloomFog.glsl @@ -0,0 +1,42 @@ +#ifdef CAVE_FOG + #include "/lib/atmospherics/fog/caveFactor.glsl" +#endif + +const float rainBloomAdd = 8.0; +const float nightBloomAdd = 3.0; +const float caveBloomAdd = 14.0; +const float waterBloomAdd = 14.0; + +#ifdef BORDER_FOG + const float netherBloomAdd = 14.0; +#else + const float netherBloomAdd = 3.0; +#endif + +float GetBloomFog(float lViewPos) { + #ifdef OVERWORLD + float bloomFog = pow2(pow2(1.0 - exp(-lViewPos * (0.02 + 0.04 * float(isEyeInWater == 1))))); + + float bloomFogMult; + if (isEyeInWater != 1) { + bloomFogMult = (rainFactor2 * rainBloomAdd + nightBloomAdd * (1.0 - sunFactor)) * eyeBrightnessM; + #ifdef CAVE_FOG + bloomFogMult += GetCaveFactor() * caveBloomAdd; + #endif + } else { + bloomFogMult = waterBloomAdd; + } + #elif defined NETHER + float farM = min(renderDistance, NETHER_VIEW_LIMIT); // consistency9023HFUE85JG + float bloomFog = lViewPos / clamp(farM, 96.0, 256.0); + bloomFog *= bloomFog * bloomFog; + bloomFog = 1.0 - exp(-8.0 * bloomFog); + bloomFog *= float(isEyeInWater == 0); + + float bloomFogMult = netherBloomAdd; + #endif + + bloomFogMult *= BLOOM_STRENGTH * 8.33333; + + return 1.0 + bloomFog * bloomFogMult; +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/fog/caveFactor.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/fog/caveFactor.glsl new file mode 100644 index 0000000..c54b8e9 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/fog/caveFactor.glsl @@ -0,0 +1,7 @@ +#ifndef INCLUDE_CAVE_FACTOR + #define INCLUDE_CAVE_FACTOR + + float GetCaveFactor() { + return clamp(1.0 - cameraPosition.y / oceanAltitude, 0.0, 1.0 - eyeBrightnessM); + } +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/fog/coloredLightFog.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/fog/coloredLightFog.glsl new file mode 100644 index 0000000..97f7841 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/fog/coloredLightFog.glsl @@ -0,0 +1,51 @@ +vec3 GetColoredLightFog(vec3 nPlayerPos, vec3 translucentMult, float lViewPos, float lViewPos1, float dither) { + vec3 lightFog = vec3(0.0); + + float stepMult = 8.0; + + float maxDist = min(effectiveACLdistance * 0.5, far); + int sampleCount = int(maxDist / stepMult + 0.001); + vec3 traceAdd = nPlayerPos * stepMult; + vec3 tracePos = traceAdd * dither; + + for (int i = 0; i < sampleCount; i++) { + float lTracePos = length(tracePos); + if (lTracePos > lViewPos1) break; + if (any(greaterThan(abs(tracePos * 2.0), vec3(voxelVolumeSize)))) break; + + vec3 voxelPos = SceneToVoxel(tracePos); + voxelPos = clamp01(voxelPos / vec3(voxelVolumeSize)); + + vec4 lightVolume = GetLightVolume(voxelPos); + vec3 lightSample = lightVolume.rgb; + + float lTracePosM = length( + vec3( + tracePos.x, + #if COLORED_LIGHTING_INTERNAL <= 512 + tracePos.y * 2.0, + #elif COLORED_LIGHTING_INTERNAL == 768 + tracePos.y * 3.0, + #elif COLORED_LIGHTING_INTERNAL == 1024 + tracePos.y * 4.0, + #endif + tracePos.z + ) + ); + lightSample *= max0(1.0 - lTracePosM / maxDist); + lightSample *= pow2(min1(lTracePos * 0.03125)); + + if (lTracePos > lViewPos) lightSample *= translucentMult; + lightFog += lightSample; + + tracePos += traceAdd; + } + + #ifdef NETHER + lightFog *= netherColor * 5.0; + #endif + + lightFog *= 1.0 - maxBlindnessDarkness; + + return pow(lightFog / sampleCount, vec3(0.25)); +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/fog/mainFog.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/fog/mainFog.glsl new file mode 100644 index 0000000..7db7210 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/fog/mainFog.glsl @@ -0,0 +1,258 @@ +#ifdef ATM_COLOR_MULTS + #include "/lib/colors/colorMultipliers.glsl" +#endif +#ifdef MOON_PHASE_INF_ATMOSPHERE + #include "/lib/colors/moonPhaseInfluence.glsl" +#endif + +#ifdef BORDER_FOG + #ifdef OVERWORLD + #include "/lib/atmospherics/sky.glsl" + #elif defined NETHER + #include "/lib/colors/skyColors.glsl" + #endif + + void DoBorderFog(inout vec3 color, inout float skyFade, float lPos, float VdotU, float VdotS, float dither) { + #ifdef OVERWORLD + float fog = lPos / renderDistance; + fog = pow2(pow2(fog)); + #ifndef DISTANT_HORIZONS + fog = pow2(pow2(fog)); + #endif + fog = 1.0 - exp(-3.0 * fog); + #endif + #ifdef NETHER + float farM = min(renderDistance, NETHER_VIEW_LIMIT); // consistency9023HFUE85JG + float fog = lPos / farM; + fog = fog * 0.3 + 0.7 * pow(fog, 256.0 / max(farM, 256.0)); + #endif + #ifdef END + float fog = lPos / renderDistance; + fog = pow2(pow2(fog)); + fog = 1.0 - exp(-3.0 * fog); + #endif + + #ifdef DREAM_TWEAKED_BORDERFOG + fog *= fog * 0.5; + #endif + + if (fog > 0.0) { + fog = clamp(fog, 0.0, 1.0); + + #ifdef OVERWORLD + vec3 fogColorM = GetSky(VdotU, VdotS, dither, true, false); + #elif defined NETHER + vec3 fogColorM = netherColor; + #else + vec3 fogColorM = endSkyColor; + #endif + + #ifdef ATM_COLOR_MULTS + fogColorM *= atmColorMult; + #endif + #ifdef MOON_PHASE_INF_ATMOSPHERE + fogColorM *= moonPhaseInfluence; + #endif + + color = mix(color, fogColorM, fog); + + #ifndef GBUFFERS_WATER + skyFade = fog; + #else + skyFade = fog * (1.0 - isEyeInWater); + #endif + } + } +#endif + +#ifdef CAVE_FOG + #include "/lib/atmospherics/fog/caveFactor.glsl" + + void DoCaveFog(inout vec3 color, float lViewPos) { + float fog = GetCaveFactor() * (0.9 - 0.9 * exp(- lViewPos * 0.015)); + + color = mix(color, caveFogColor, fog); + } +#endif + +#ifdef ATMOSPHERIC_FOG + #include "/lib/colors/lightAndAmbientColors.glsl" + #include "/lib/colors/skyColors.glsl" + + // SRATA: Atm. fog starts reducing above this altitude + // CRFTM: Atm. fog continues reducing for this meters + #ifdef OVERWORLD + #define atmFogSRATA ATM_FOG_ALTITUDE + 0.1 + #ifndef DISTANT_HORIZONS + float atmFogCRFTM = 60.0; + #else + float atmFogCRFTM = 90.0; + #endif + + vec3 GetAtmFogColor(float altitudeFactorRaw, float VdotS) { + float nightFogMult = 2.5 - 0.625 * max(pow2(pow2(altitudeFactorRaw)), rainFactor); + float dayNightFogBlend = pow(invNightFactor, 4.0 - VdotS - 2.5 * sunVisibility2); + return mix( + nightUpSkyColor * (nightFogMult - dayNightFogBlend * nightFogMult), + dayDownSkyColor * (0.9 + 0.2 * noonFactor), + dayNightFogBlend + ); + } + #else + float atmFogSRATA = 55.1; + float atmFogCRFTM = 30.0; + #endif + + float GetAtmFogAltitudeFactor(float altitude) { + float altitudeFactor = pow2(1.0 - clamp(altitude - atmFogSRATA, 0.0, atmFogCRFTM) / atmFogCRFTM); + #ifndef LIGHTSHAFTS_ACTIVE + altitudeFactor = mix(altitudeFactor, 1.0, rainFactor * 0.2); + #endif + return altitudeFactor; + } + + void DoAtmosphericFog(inout vec3 color, vec3 playerPos, float lViewPos, float VdotS) { + #ifndef DISTANT_HORIZONS + float renDisFactor = min1(192.0 / renderDistance); + + #if ATM_FOG_DISTANCE != 100 + #define ATM_FOG_DISTANCE_M 100.0 / ATM_FOG_DISTANCE; + renDisFactor *= ATM_FOG_DISTANCE_M; + #endif + + float fog = 1.0 - exp(-pow(lViewPos * (0.001 - 0.0007 * rainFactor), 2.0 - rainFactor2) * lViewPos * renDisFactor); + #else + float fog = pow2(1.0 - exp(-max0(lViewPos - 40.0) * (0.7 + 0.7 * rainFactor) / ATM_FOG_DISTANCE)); + #endif + + fog *= ATM_FOG_MULT - 0.1 - 0.15 * invRainFactor; + + float altitudeFactorRaw = GetAtmFogAltitudeFactor(playerPos.y + cameraPosition.y); + + #ifndef DISTANT_HORIZONS + float altitudeFactor = altitudeFactorRaw * 0.9 + 0.1; + #else + float altitudeFactor = altitudeFactorRaw * 0.8 + 0.2; + #endif + + #ifdef OVERWORLD + altitudeFactor *= 1.0 - 0.75 * GetAtmFogAltitudeFactor(cameraPosition.y) * invRainFactor; + + #if defined SPECIAL_BIOME_WEATHER || RAIN_STYLE == 2 + #if RAIN_STYLE == 2 + float factor = 1.0; + #else + float factor = max(inSnowy, inDry); + #endif + + float fogFactor = 4.0; + #ifdef SPECIAL_BIOME_WEATHER + fogFactor += 2.0 * inDry; + #endif + + float fogIntense = pow2(1.0 - exp(-lViewPos * fogFactor / ATM_FOG_DISTANCE)); + fog = mix(fog, fogIntense / altitudeFactor, 0.8 * rainFactor * factor); + #endif + + #ifdef CAVE_FOG + fog *= 0.2 + 0.8 * sqrt2(eyeBrightnessM); + fog *= 1.0 - GetCaveFactor(); + #else + fog *= eyeBrightnessM; + #endif + #else + fog *= 0.5; + #endif + + fog *= altitudeFactor; + + if (fog > 0.0) { + fog = clamp(fog, 0.0, 1.0); + + #ifdef OVERWORLD + vec3 fogColorM = GetAtmFogColor(altitudeFactorRaw, VdotS); + #else + vec3 fogColorM = endSkyColor * 1.5; + #endif + + #ifdef ATM_COLOR_MULTS + fogColorM *= atmColorMult; + #endif + #ifdef MOON_PHASE_INF_ATMOSPHERE + fogColorM *= moonPhaseInfluence; + #endif + + color = mix(color, fogColorM, fog); + } + } +#endif + +#include "/lib/atmospherics/fog/waterFog.glsl" + +void DoWaterFog(inout vec3 color, float lViewPos) { + float fog = GetWaterFog(lViewPos); + + color = mix(color, waterFogColor, fog); +} + +void DoLavaFog(inout vec3 color, float lViewPos) { + float fog = (lViewPos * 3.0 - gl_Fog.start) * gl_Fog.scale; + + #ifdef LESS_LAVA_FOG + fog = sqrt(fog) * 0.4; + #endif + + fog = 1.0 - exp(-fog); + + fog = clamp(fog, 0.0, 1.0); + color = mix(color, fogColor * 5.0, fog); +} + +void DoPowderSnowFog(inout vec3 color, float lViewPos) { + float fog = lViewPos; + + #ifdef LESS_LAVA_FOG + fog = sqrt(fog) * 0.4; + #endif + + fog *= fog; + fog = 1.0 - exp(-fog); + + fog = clamp(fog, 0.0, 1.0); + color = mix(color, fogColor, fog); +} + +void DoBlindnessFog(inout vec3 color, float lViewPos) { + float fog = lViewPos * 0.3 * blindness; + fog *= fog; + fog = 1.0 - exp(-fog); + + fog = clamp(fog, 0.0, 1.0); + color = mix(color, vec3(0.0), fog); +} + +void DoDarknessFog(inout vec3 color, float lViewPos) { + float fog = lViewPos * 0.075 * darknessFactor; + fog *= fog; + fog *= fog; + color *= exp(-fog); +} + +void DoFog(inout vec3 color, inout float skyFade, float lViewPos, vec3 playerPos, float VdotU, float VdotS, float dither) { + #ifdef CAVE_FOG + DoCaveFog(color, lViewPos); + #endif + #ifdef ATMOSPHERIC_FOG + DoAtmosphericFog(color, playerPos, lViewPos, VdotS); + #endif + #ifdef BORDER_FOG + DoBorderFog(color, skyFade, max(length(playerPos.xz), abs(playerPos.y)), VdotU, VdotS, dither); + #endif + + if (isEyeInWater == 1) DoWaterFog(color, lViewPos); + else if (isEyeInWater == 2) DoLavaFog(color, lViewPos); + else if (isEyeInWater == 3) DoPowderSnowFog(color, lViewPos); + + if (blindness > 0.00001) DoBlindnessFog(color, lViewPos); + if (darknessFactor > 0.00001) DoDarknessFog(color, lViewPos); +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/fog/waterFog.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/fog/waterFog.glsl new file mode 100644 index 0000000..173a636 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/fog/waterFog.glsl @@ -0,0 +1,19 @@ +#ifndef INCLUDE_WATER_FOG + #define INCLUDE_WATER_FOG + + float GetWaterFog(float lViewPos) { + #if WATER_FOG_MULT != 100 + #define WATER_FOG_MULT_M WATER_FOG_MULT * 0.01; + lViewPos *= WATER_FOG_MULT_M; + #endif + + #if LIGHTSHAFT_QUALI > 0 && SHADOW_QUALITY > -1 + float fog = lViewPos / 48.0; + fog *= fog; + #else + float fog = lViewPos / 32.0; + #endif + + return 1.0 - exp(-fog); + } +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/netherStorm.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/netherStorm.glsl new file mode 100644 index 0000000..0d2c285 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/netherStorm.glsl @@ -0,0 +1,83 @@ +float Noise3D(vec3 p) { + p.z = fract(p.z) * 128.0; + float iz = floor(p.z); + float fz = fract(p.z); + vec2 a_off = vec2(23.0, 29.0) * (iz) / 128.0; + vec2 b_off = vec2(23.0, 29.0) * (iz + 1.0) / 128.0; + float a = texture2D(noisetex, p.xy + a_off).r; + float b = texture2D(noisetex, p.xy + b_off).r; + return mix(a, b, fz); +} + +vec4 GetNetherStorm(vec3 color, vec3 translucentMult, vec3 nPlayerPos, vec3 playerPos, float lViewPos, float lViewPos1, float dither) { + if (isEyeInWater != 0) return vec4(0.0); + vec4 netherStorm = vec4(1.0, 1.0, 1.0, 0.0); + + #ifdef BORDER_FOG + float maxDist = min(renderDistance, NETHER_VIEW_LIMIT); // consistency9023HFUE85JG + #else + float maxDist = renderDistance; + #endif + + #ifndef LOW_QUALITY_NETHER_STORM + int sampleCount = int(maxDist / 8.0 + 0.001); + + vec3 traceAdd = nPlayerPos * maxDist / sampleCount; + vec3 tracePos = cameraPosition; + tracePos += traceAdd * dither; + #else + int sampleCount = int(maxDist / 16.0 + 0.001); + + vec3 traceAdd = 0.75 * nPlayerPos * maxDist / sampleCount; + vec3 tracePos = cameraPosition; + tracePos += traceAdd * dither; + tracePos += traceAdd * sampleCount * 0.25; + #endif + + vec3 translucentMultM = pow(translucentMult, vec3(1.0 / sampleCount)); + + for (int i = 0; i < sampleCount; i++) { + tracePos += traceAdd; + + vec3 tracedPlayerPos = tracePos - cameraPosition; + float lTracePos = length(tracedPlayerPos); + if (lTracePos > lViewPos1) break; + + vec3 wind = vec3(frameTimeCounter * 0.002); + + vec3 tracePosM = tracePos * 0.001; + tracePosM.y += tracePosM.x; + tracePosM += Noise3D(tracePosM - wind) * 0.01; + tracePosM = tracePosM * vec3(2.0, 0.5, 2.0); + + float traceAltitudeM = abs(tracePos.y - NETHER_STORM_LOWER_ALT); + if (tracePos.y < NETHER_STORM_LOWER_ALT) traceAltitudeM *= 10.0; + traceAltitudeM = 1.0 - min1(abs(traceAltitudeM) / NETHER_STORM_HEIGHT); + + for (int h = 0; h < 4; h++) { + float stormSample = pow2(Noise3D(tracePosM + wind)); + stormSample *= traceAltitudeM; + stormSample = pow2(pow2(stormSample)); + stormSample *= sqrt1(max0(1.0 - lTracePos / maxDist)); + + netherStorm.a += stormSample; + tracePosM *= 2.0; + wind *= -2.0; + } + + if (lTracePos > lViewPos) netherStorm.rgb *= translucentMultM; + } + + #ifdef LOW_QUALITY_NETHER_STORM + netherStorm.a *= 1.8; + #endif + + netherStorm.a = min1(netherStorm.a * NETHER_STORM_I); + + netherStorm.rgb *= netherColor * 3.0 * (1.0 - maxBlindnessDarkness); + + //if (netherStorm.a > 0.98) netherStorm.rgb = vec3(1,0,1); + //netherStorm.a *= 1.0 - max0(netherStorm.a - 0.98) * 50.0; + + return netherStorm; +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/nightNebula.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/nightNebula.glsl new file mode 100644 index 0000000..946d6af --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/nightNebula.glsl @@ -0,0 +1,106 @@ +#include "/lib/atmospherics/stars.glsl" + +// Nebula implementation by flytrap https://godotshaders.com/shader/2d-nebula-shader/ + +#ifndef HQ_NIGHT_NEBULA + const int OCTAVE = 5; +#else + const int OCTAVE = 8; +#endif +const float timescale = 5.0; +const float zoomScale = 3.5; +const vec4 CLOUD1_COL = vec4(0.41, 0.64, 0.97, 0.4); +const vec4 CLOUD2_COL = vec4(0.81, 0.55, 0.21, 0.2); +const vec4 CLOUD3_COL = vec4(0.51, 0.81, 0.98, 1.0); + +float sinM(float x) { + return sin(mod(x, 2.0 * pi)); +} + +float cosM(float x) { + return cos(mod(x, 2.0 * pi)); +} + +float rand(vec2 inCoord){ + return fract(sinM(dot(inCoord, vec2(23.53, 44.0))) * 42350.45); +} + +float perlin(vec2 inCoord){ + vec2 i = floor(inCoord); + vec2 j = fract(inCoord); + vec2 coord = smoothstep(0.0, 1.0, j); + + float a = rand(i); + float b = rand(i + vec2(1.0, 0.0)); + float c = rand(i + vec2(0.0, 1.0)); + float d = rand(i + vec2(1.0, 1.0)); + + return mix(mix(a, b, coord.x), mix(c, d, coord.x), coord.y); +} + +float fbmCloud(vec2 inCoord, float minimum){ + float value = 0.0; + float scale = 0.5; + + for (int i = 0; i < OCTAVE; i++){ + value += perlin(inCoord) * scale; + inCoord *= 2.0; + scale *= 0.5; + } + + return smoothstep(0.0, 1.0, (smoothstep(minimum, 1.0, value) - minimum) / (1.0 - minimum)); +} + +float fbmCloud2(vec2 inCoord, float minimum){ + float value = 0.0; + float scale = 0.5; + + for (int i = 0; i < OCTAVE; i++){ + value += perlin(inCoord) * scale; + inCoord *= 2.0; + scale *= 0.5; + } + + return (smoothstep(minimum, 1.0, value) - minimum) / (1.0 - minimum); +} + +vec3 GetNightNebula(vec3 viewPos, float VdotU, float VdotS) { + float nebulaFactor = pow2(max0(VdotU) * min1(nightFactor * 2.0)) * invRainFactor - maxBlindnessDarkness; + if (nebulaFactor < 0.001) return vec3(0.0); + + vec2 UV = GetStarCoord(viewPos, 0.75); + float TIME = syncedTime * 0.003 + 15.0; + + float timescaled = TIME * timescale; + vec2 zoomUV2 + = vec2(zoomScale * UV.x + 0.03 * timescaled * sinM(0.07 * timescaled), zoomScale * UV.y + 0.03 * timescaled * cosM(0.06 * timescaled)); + vec2 zoomUV3 + = vec2(zoomScale * UV.x + 0.027 * timescaled * sinM(0.07 * timescaled), zoomScale * UV.y + 0.025 * timescaled * cosM(0.06 * timescaled)); + vec2 zoomUV4 + = vec2(zoomScale * UV.x + 0.021 * timescaled * sinM(0.07 * timescaled), zoomScale * UV.y + 0.021 * timescaled * cosM(0.07 * timescaled)); + float tide = 0.05 * sinM(TIME); + float tide2 = 0.06 * cosM(0.3 * TIME); + + vec4 nebulaTexture = vec4(vec3(0.0), 0.5 + 0.2 * sinM(0.23 * TIME + UV.x - UV.y)); + nebulaTexture += fbmCloud2(zoomUV3, 0.24 + tide) * CLOUD1_COL; + nebulaTexture += fbmCloud(zoomUV2 * 0.9, 0.33 - tide) * CLOUD2_COL; + nebulaTexture = mix(nebulaTexture, CLOUD3_COL, fbmCloud(vec2(0.9 * zoomUV4.x, 0.9 * zoomUV4.y), 0.25 + tide2)); + + nebulaFactor *= 1.0 - pow2(pow2(pow2(abs(VdotS)))); + nebulaTexture.a *= min1(pow2(pow2(nebulaTexture.a))) * nebulaFactor; + + float starFactor = 1024.0; + vec2 starCoord = floor(UV * 0.25 * starFactor) / starFactor; + nebulaTexture.rgb *= 1.5 + 10.0 * pow2(max0(GetStarNoise(starCoord) * GetStarNoise(starCoord + 0.1) - 0.6)); + + #if NIGHT_NEBULA_I != 100 + #define NIGHT_NEBULA_IM NIGHT_NEBULA_I * 0.01 + nebulaTexture.a *= NIGHT_NEBULA_IM; + #endif + + #ifdef ATM_COLOR_MULTS + nebulaTexture.rgb *= sqrtAtmColorMult; // C72380KD - Reduced atmColorMult impact on some things + #endif + + return max(nebulaTexture.rgb * nebulaTexture.a, vec3(0.0)); +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/rainbow.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/rainbow.glsl new file mode 100644 index 0000000..8bf8dbf --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/rainbow.glsl @@ -0,0 +1,56 @@ +#define RAINBOW_DIAMETER 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00 2.05 2.10 2.15 2.20 2.25 2.30 2.35 2.40 2.45 2.50 2.55 2.60 2.65 2.70 2.75 2.80 2.85 2.90 2.95 3.00 3.05 3.10 3.15 3.20 3.25 3.30 3.35 3.40 3.45 3.50 3.55 3.60 3.65 3.70 3.75 3.80 3.85 3.90 3.95 4.00 4.25 4.50 4.75 5.00 5.25 5.50 5.75 6.00 6.25 6.50 6.75 7.00 7.50 8.00] +#define RAINBOW_STYLE 1 //[1 2] + +vec3 GetRainbow(vec3 translucentMult, float z0, float z1, float lViewPos, float lViewPos1, float VdotL, float dither) { + vec3 rainbow = vec3(0.0); + + float rainbowTime = min1(max0(SdotU - 0.1) / 0.15); + rainbowTime = clamp(rainbowTime - pow2(pow2(pow2(noonFactor))) * 8.0, 0.0, 0.85); + #if RAINBOWS == 1 // After Rain + rainbowTime *= sqrt2(max0(wetness - 0.333) * 1.5) * invRainFactor * inRainy; + #endif + + if (rainbowTime > 0.001) { + float cloudLinearDepth = texelFetch(colortex4, texelCoord, 0).r; + float cloudDistance = pow2(cloudLinearDepth + OSIEBCA * dither) * far; + if (cloudDistance < lViewPos1) lViewPos = cloudDistance; + + float rainbowLength = max(far, 128.0) * 0.9; + + float rainbowCoord = clamp01(1.0 - (VdotL + 0.75) / (0.0625 * RAINBOW_DIAMETER)); + float rainbowFactor = rainbowCoord * (1.0 - rainbowCoord); + rainbowFactor = pow2(pow2(rainbowFactor * 3.7)); + rainbowFactor *= pow2(min1(lViewPos / rainbowLength)); + rainbowFactor *= rainbowTime; + rainbowFactor *= 1.0 - GetCaveFactor(); + + if (rainbowFactor > 0.0) { + #if RAINBOW_STYLE == 1 + float rainbowCoordM = pow(rainbowCoord, 1.4 + max(rainbowCoord - 0.5, 0.0) * 1.6); + rainbowCoordM = smoothstep(0.0, 1.0, rainbowCoordM) * 0.85; + rainbowCoordM += (dither - 0.5) * 0.1; + rainbow += clamp(abs(mod(rainbowCoordM * 6.0 + vec3(-0.55,4.3,2.2) ,6.0)-3.0)-1.0, 0.0, 1.0); + rainbowCoordM += 0.1; + rainbow += clamp(abs(mod(rainbowCoordM * 6.0 + vec3(-0.55,4.3,2.2) ,6.0)-3.0)-1.0, 0.0, 1.0); + rainbowCoordM -= 0.2; + rainbow += clamp(abs(mod(rainbowCoordM * 6.0 + vec3(-0.55,4.3,2.2) ,6.0)-3.0)-1.0, 0.0, 1.0); + rainbow /= 3.0; + rainbow.r += pow2(max(rainbowCoord - 0.5, 0.0)) * (max(1.0 - rainbowCoord, 0.0)) * 26.0; + rainbow = pow(rainbow, vec3(2.2)) * vec3(0.25, 0.075, 0.25) * 3.0; + #else + float rainbowCoordM = pow(rainbowCoord, 1.35); + rainbowCoordM = smoothstep(0.0, 1.0, rainbowCoordM); + rainbow += clamp(abs(mod(rainbowCoordM * 6.0 + vec3(0.0,4.0,2.0) ,6.0)-3.0)-1.0, 0.0, 1.0); + rainbow *= rainbow * (3.0 - 2.0 * rainbow); + rainbow = pow(rainbow, vec3(2.2)) * vec3(0.25, 0.075, 0.25) * 3.0; + #endif + + if (z1 > z0 && lViewPos < rainbowLength) + rainbow *= mix(translucentMult, vec3(1.0), lViewPos / rainbowLength); + + rainbow *= rainbowFactor; + } + } + + return rainbow; +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/sky.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/sky.glsl new file mode 100644 index 0000000..f866914 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/sky.glsl @@ -0,0 +1,127 @@ +#ifndef INCLUDE_SKY + #define INCLUDE_SKY + + #include "/lib/colors/lightAndAmbientColors.glsl" + #include "/lib/colors/skyColors.glsl" + + #ifdef CAVE_FOG + #include "/lib/atmospherics/fog/caveFactor.glsl" + #endif + + vec3 GetSky(float VdotU, float VdotS, float dither, bool doGlare, bool doGround) { + // Prepare variables + float nightFactorSqrt2 = sqrt2(nightFactor); + float nightFactorM = sqrt2(nightFactorSqrt2) * 0.4; + float VdotSM1 = pow2(max(VdotS, 0.0)); + float VdotSM2 = pow2(VdotSM1); + float VdotSM3 = pow2(pow2(max(-VdotS, 0.0))); + float VdotSML = sunVisibility > 0.5 ? VdotS : -VdotS; + + float VdotUmax0 = max(VdotU, 0.0); + float VdotUmax0M = 1.0 - pow2(VdotUmax0); + + // Prepare colors + vec3 upColor = mix(nightUpSkyColor * (1.5 - 0.5 * nightFactorSqrt2 + nightFactorM * VdotSM3 * 1.5), dayUpSkyColor, sunFactor); + vec3 middleColor = mix(nightMiddleSkyColor * (3.0 - 2.0 * nightFactorSqrt2), dayMiddleSkyColor * (1.0 + VdotSM2 * 0.3), sunFactor); + vec3 downColor = mix(nightDownSkyColor, dayDownSkyColor, (sunFactor + sunVisibility) * 0.5); + + // Mix the colors + // Set sky gradient + float VdotUM1 = pow2(1.0 - VdotUmax0); + VdotUM1 = pow(VdotUM1, 1.0 - VdotSM2 * 0.4); + VdotUM1 = mix(VdotUM1, 1.0, rainFactor2 * 0.15); + vec3 finalSky = mix(upColor, middleColor, VdotUM1); + + // Add sunset color + float VdotUM2 = pow2(1.0 - abs(VdotU)); + VdotUM2 = VdotUM2 * VdotUM2 * (3.0 - 2.0 * VdotUM2); + VdotUM2 *= (0.7 - nightFactorM + VdotSM1 * (0.3 + nightFactorM)) * invNoonFactor * sunFactor; + finalSky = mix(finalSky, sunsetDownSkyColorP * (1.0 + VdotSM1 * 0.3), VdotUM2 * invRainFactor); + + // Add sky ground with fake light scattering + float VdotUM3 = min(max0(-VdotU + 0.08) / 0.35, 1.0); + VdotUM3 = smoothstep1(VdotUM3); + vec3 scatteredGroundMixer = vec3(VdotUM3 * VdotUM3, sqrt1(VdotUM3), sqrt3(VdotUM3)); + scatteredGroundMixer = mix(vec3(VdotUM3), scatteredGroundMixer, 0.75 - 0.5 * rainFactor); + finalSky = mix(finalSky, downColor, scatteredGroundMixer); + // + + // Sky Ground + if (doGround) + finalSky *= smoothstep1(pow2(1.0 + min(VdotU, 0.0))); + + // Apply Underwater Fog + if (isEyeInWater == 1) + finalSky = mix(finalSky * 3.0, waterFogColor, VdotUmax0M); + + // Sun/Moon Glare + if (doGlare) { + if (0.0 < VdotSML) { + float glareScatter = 4.0 * (2.0 - clamp01(VdotS * 1000.0)); + float VdotSM4 = pow(abs(VdotS), glareScatter); + + float visfactor = 0.075; + float glare = visfactor / (1.0 - (1.0 - visfactor) * VdotSM4) - visfactor; + + glare *= 0.5 + pow2(noonFactor) * 1.2; + glare *= 1.0 - rainFactor * 0.5; + + float glareWaterFactor = isEyeInWater * sunVisibility; + vec3 glareColor = mix(vec3(0.38, 0.4, 0.5) * 0.7, vec3(0.5), sunVisibility); + glareColor = glareColor + glareWaterFactor * vec3(7.0); + + finalSky += glare * shadowTime * glareColor; + } + } + + #ifdef CAVE_FOG + // Apply Cave Fog + finalSky = mix(finalSky, caveFogColor, GetCaveFactor() * VdotUmax0M); + #endif + + // Dither to fix banding + finalSky += (dither - 0.5) / 128.0; + + return finalSky; + } + + vec3 GetLowQualitySky(float VdotU, float VdotS, float dither, bool doGlare, bool doGround) { + // Prepare variables + float VdotUmax0 = max(VdotU, 0.0); + float VdotUmax0M = 1.0 - pow2(VdotUmax0); + + // Prepare colors + vec3 upColor = mix(nightUpSkyColor, dayUpSkyColor, sunFactor); + vec3 middleColor = mix(nightMiddleSkyColor, dayMiddleSkyColor, sunFactor); + + // Mix the colors + // Set sky gradient + float VdotUM1 = pow2(1.0 - VdotUmax0); + VdotUM1 = mix(VdotUM1, 1.0, rainFactor2 * 0.2); + vec3 finalSky = mix(upColor, middleColor, VdotUM1); + + // Add sunset color + float VdotUM2 = pow2(1.0 - abs(VdotU)); + VdotUM2 *= invNoonFactor * sunFactor * (0.8 + 0.2 * VdotS); + finalSky = mix(finalSky, sunsetDownSkyColorP * (shadowTime * 0.6 + 0.2), VdotUM2 * invRainFactor); + // + + // Sky Ground + finalSky *= pow2(pow2(1.0 + min(VdotU, 0.0))); + + // Apply Underwater Fog + if (isEyeInWater == 1) + finalSky = mix(finalSky, waterFogColor, VdotUmax0M); + + // Sun/Moon Glare + finalSky *= 1.0 + mix(nightFactor, 0.5 + 0.7 * noonFactor, VdotS * 0.5 + 0.5) * pow2(pow2(pow2(VdotS))); + + #ifdef CAVE_FOG + // Apply Cave Fog + finalSky = mix(finalSky, caveFogColor, GetCaveFactor() * VdotUmax0M); + #endif + + return finalSky; + } + +#endif //INCLUDE_SKY \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/stars.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/stars.glsl new file mode 100644 index 0000000..1367647 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/stars.glsl @@ -0,0 +1,39 @@ +#include "/lib/colors/skyColors.glsl" + +float GetStarNoise(vec2 pos) { + return fract(sin(dot(pos, vec2(12.9898, 4.1414))) * 43758.54953); +} + +vec2 GetStarCoord(vec3 viewPos, float sphereness) { + vec3 wpos = normalize((gbufferModelViewInverse * vec4(viewPos * 1000.0, 1.0)).xyz); + vec3 starCoord = wpos / (wpos.y + length(wpos.xz) * sphereness); + starCoord.x += 0.006 * syncedTime; + return starCoord.xz; +} + +vec3 GetStars(vec2 starCoord, float VdotU, float VdotS) { + if (VdotU < 0.0) return vec3(0.0); + + starCoord *= 0.2; + float starFactor = 1024.0; + starCoord = floor(starCoord * starFactor) / starFactor; + + float star = 1.0; + star *= GetStarNoise(starCoord.xy); + star *= GetStarNoise(starCoord.xy+0.1); + star *= GetStarNoise(starCoord.xy+0.23); + + #if NIGHT_STAR_AMOUNT == 2 + star -= 0.7; + #else + star -= 0.6; + star *= 0.65; + #endif + star = max0(star); + star *= star; + + star *= min1(VdotU * 3.0) * max0(1.0 - pow(abs(VdotS) * 1.002, 100.0)); + star *= invRainFactor * pow2(pow2(invNoonFactor2)) * (1.0 - 0.5 * sunVisibility); + + return 40.0 * star * vec3(0.38, 0.4, 0.5); +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/volumetricLight.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/volumetricLight.glsl new file mode 100644 index 0000000..d1c40f9 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/atmospherics/volumetricLight.glsl @@ -0,0 +1,338 @@ +// Volumetric tracing from Robobo1221, highly modified + +#include "/lib/colors/lightAndAmbientColors.glsl" + +float GetDepth(float depth) { + return 2.0 * near * far / (far + near - (2.0 * depth - 1.0) * (far - near)); +} + +float GetDistX(float dist) { + return (far * (dist - near)) / (dist * (far - near)); +} + +vec4 DistortShadow(vec4 shadowpos, float distortFactor) { + shadowpos.xy *= 1.0 / distortFactor; + shadowpos.z = shadowpos.z * 0.2; + shadowpos = shadowpos * 0.5 + 0.5; + + return shadowpos; +} + +float Noise3D(vec3 p) { + p.z = fract(p.z) * 128.0; + float iz = floor(p.z); + float fz = fract(p.z); + vec2 a_off = vec2(23.0, 29.0) * (iz) / 128.0; + vec2 b_off = vec2(23.0, 29.0) * (iz + 1.0) / 128.0; + float a = texture2D(noisetex, p.xy + a_off).r; + float b = texture2D(noisetex, p.xy + b_off).r; + return mix(a, b, fz); +} + +vec4 GetVolumetricLight(inout vec3 color, inout float vlFactor, vec3 translucentMult, float lViewPos0, float lViewPos1, vec3 nViewPos, float VdotL, float VdotU, vec2 texCoord, float z0, float z1, float dither) { + vec4 volumetricLight = vec4(0.0); + float vlMult = 1.0 - maxBlindnessDarkness; + + #if SHADOW_QUALITY > -1 + // Optifine for some reason doesn't provide correct shadowMapResolution if Shadow Quality isn't 1x + vec2 shadowMapResolutionM = textureSize(shadowtex0, 0); + #endif + + #ifdef OVERWORLD + vec3 vlColor = lightColor; + vec3 vlColorReducer = vec3(1.0); + float vlSceneIntensity = isEyeInWater != 1 ? vlFactor : 1.0; + + #ifdef SPECIAL_BIOME_WEATHER + vlSceneIntensity = mix(vlSceneIntensity, 1.0, inDry * rainFactor); + #endif + + if (sunVisibility < 0.5) { + vlSceneIntensity = 0.0; + + float vlMultNightModifier = 0.6 + 0.4 * max0(far - lViewPos1) / far; + #ifdef SPECIAL_PALE_GARDEN_LIGHTSHAFTS + vlMultNightModifier = mix(vlMultNightModifier, 1.0, inPaleGarden); + #endif + vlMult *= vlMultNightModifier; + + vlColor = normalize(pow(vlColor, vec3(1.0 - max0(1.0 - 1.5 * nightFactor)))); + vlColor *= 0.0766 + 0.0766 * vsBrightness; + } else { + vlColorReducer = 1.0 / sqrt(vlColor); + } + + #ifdef SPECIAL_PALE_GARDEN_LIGHTSHAFTS + vlSceneIntensity = mix(vlSceneIntensity, 1.0, inPaleGarden); + vlMult *= 1.0 + (3.0 * inPaleGarden) * (1.0 - sunVisibility); + #endif + + float rainyNight = (1.0 - sunVisibility) * rainFactor; + float VdotLM = max((VdotL + 1.0) / 2.0, 0.0); + float VdotUmax0 = max(VdotU, 0.0); + float VdotUM = mix(pow2(1.0 - VdotUmax0), 1.0, 0.5 * vlSceneIntensity); + VdotUM = smoothstep1(VdotUM); + VdotUM = pow(VdotUM, min(lViewPos1 / far, 1.0) * (3.0 - 2.0 * vlSceneIntensity)); + vlMult *= mix(VdotUM * VdotLM, 1.0, 0.4 * rainyNight) * vlTime; + vlMult *= mix(invNoonFactor2 * 0.875 + 0.125, 1.0, max(vlSceneIntensity, rainFactor2)); + + #if LIGHTSHAFT_QUALI == 4 + int sampleCount = vlSceneIntensity < 0.5 ? 30 : 50; + #elif LIGHTSHAFT_QUALI == 3 + int sampleCount = vlSceneIntensity < 0.5 ? 15 : 30; + #elif LIGHTSHAFT_QUALI == 2 + int sampleCount = vlSceneIntensity < 0.5 ? 10 : 20; + #elif LIGHTSHAFT_QUALI == 1 + int sampleCount = vlSceneIntensity < 0.5 ? 6 : 12; + #endif + + #ifdef LIGHTSHAFT_SMOKE + float totalSmoke = 0.0; + #endif + #else + translucentMult = sqrt(translucentMult); // Because we pow2() the vl result in composite for the End dimension + + float vlSceneIntensity = 0.0; + + #ifndef LOW_QUALITY_ENDER_NEBULA + int sampleCount = 16; + #else + int sampleCount = 10; + #endif + #endif + + float addition = 1.0; + float maxDist = mix(max(far, 96.0) * 0.55, 80.0, vlSceneIntensity); + + #if WATER_FOG_MULT != 100 + if (isEyeInWater == 1) { + #define WATER_FOG_MULT_M WATER_FOG_MULT * 0.01; + maxDist /= WATER_FOG_MULT_M; + } + #endif + + float distMult = maxDist / (sampleCount + addition); + float sampleMultIntense = isEyeInWater != 1 ? 1.0 : 0.85; + + float viewFactor = 1.0 - 0.7 * pow2(dot(nViewPos.xy, nViewPos.xy)); + + float depth0 = GetDepth(z0); + float depth1 = GetDepth(z1); + #ifdef END + if (z0 == 1.0) depth0 = 1000.0; + if (z1 == 1.0) depth1 = 1000.0; + #endif + + // Fast but inaccurate perspective distortion approximation + maxDist *= viewFactor; + distMult *= viewFactor; + + #ifdef OVERWORLD + float maxCurrentDist = min(depth1, maxDist); + #else + float maxCurrentDist = min(depth1, far); + #endif + + for (int i = 0; i < sampleCount; i++) { + float currentDist = (i + dither) * distMult + addition; + + if (currentDist > maxCurrentDist) break; + + vec4 viewPos = gbufferProjectionInverse * (vec4(texCoord, GetDistX(currentDist), 1.0) * 2.0 - 1.0); + viewPos /= viewPos.w; + vec4 wpos = gbufferModelViewInverse * viewPos; + vec3 playerPos = wpos.xyz / wpos.w; + #ifdef END + #ifdef DISTANT_HORIZONS + playerPos *= sqrt(renderDistance / far); + #endif + vec4 enderBeamSample = vec4(DrawEnderBeams(VdotU, playerPos), 1.0); + enderBeamSample /= sampleCount; + #endif + + float shadowSample = 1.0; + vec3 vlSample = vec3(1.0); + #if SHADOW_QUALITY > -1 + wpos = shadowModelView * wpos; + wpos = shadowProjection * wpos; + wpos /= wpos.w; + float distb = sqrt(wpos.x * wpos.x + wpos.y * wpos.y); + float distortFactor = 1.0 - shadowMapBias + distb * shadowMapBias; + vec4 shadowPosition = DistortShadow(wpos,distortFactor); + //shadowPosition.z += 0.0001; + + #ifdef OVERWORLD + float percentComplete = currentDist / maxDist; + float sampleMult = mix(percentComplete * 3.0, sampleMultIntense, max(rainFactor, vlSceneIntensity)); + if (currentDist < 5.0) sampleMult *= smoothstep1(clamp(currentDist / 5.0, 0.0, 1.0)); + sampleMult /= sampleCount; + #endif + + if (length(shadowPosition.xy * 2.0 - 1.0) < 1.0) { + // 28A3DK6 We need to use texelFetch here or a lot of Nvidia GPUs can't get a valid value + shadowSample = texelFetch(shadowtex0, ivec2(shadowPosition.xy * shadowMapResolutionM), 0).x; + shadowSample = clamp((shadowSample-shadowPosition.z)*65536.0,0.0,1.0); + + vlSample = vec3(shadowSample); + + #if SHADOW_QUALITY >= 1 + if (shadowSample == 0.0) { + float testsample = shadow2D(shadowtex1, shadowPosition.xyz).z; + if (testsample == 1.0) { + vec3 colsample = texture2D(shadowcolor1, shadowPosition.xy).rgb * 4.0; + colsample *= colsample; + vlSample = colsample; + shadowSample = 1.0; + #ifdef OVERWORLD + vlSample *= vlColorReducer; + #endif + } + } else { + #ifdef OVERWORLD + // For water-tinting the water surface when observed from below the surface + if (translucentMult != vec3(1.0) && currentDist > depth0) { + vec3 tinter = vec3(1.0); + if (isEyeInWater == 1) { + vec3 translucentMultM = translucentMult * 2.8; + tinter = pow(translucentMultM, vec3(sunVisibility * 3.0 * clamp01(playerPos.y * 0.03))); + } else { + tinter = 0.1 + 0.9 * pow2(pow2(translucentMult * 1.7)); + } + vlSample *= mix(vec3(1.0), tinter, clamp01(oceanAltitude - cameraPosition.y)); + } + #endif + + if (isEyeInWater == 1 && translucentMult == vec3(1.0)) vlSample = vec3(0.0); + } + #endif + } + #endif + + if (currentDist > depth0) vlSample *= translucentMult; + + #ifdef OVERWORLD + #ifdef LIGHTSHAFT_SMOKE + vec3 smokePos = 0.0015 * (playerPos + cameraPosition); + vec3 smokeWind = frameTimeCounter * vec3(0.002, 0.001, 0.0); + float smoke = 0.65 * Noise3D(smokePos + smokeWind) + + 0.25 * Noise3D((smokePos - smokeWind) * 3.0) + + 0.10 * Noise3D((smokePos + smokeWind) * 9.0); + smoke = smoothstep1(smoothstep1(smoothstep1(smoke))); + totalSmoke += smoke * shadowSample * sampleMult; + #endif + + volumetricLight += vec4(vlSample, shadowSample) * sampleMult; + #else + volumetricLight += vec4(vlSample, shadowSample) * enderBeamSample; + #endif + } + + #ifdef LIGHTSHAFT_SMOKE + volumetricLight *= pow(totalSmoke / volumetricLight.a, min(1.0 - volumetricLight.a, 0.5)); + volumetricLight.rgb /= pow(0.5, 1.0 - volumetricLight.a); + #endif + + // Decision of Intensity for Scene Aware Light Shafts // + #if defined OVERWORLD && LIGHTSHAFT_BEHAVIOUR == 1 && SHADOW_QUALITY >= 1 + if (viewWidth + viewHeight - gl_FragCoord.x - gl_FragCoord.y < 1.5) { + if (frameCounter % int(0.06666 / frameTimeSmooth + 0.5) == 0) { // Change speed is not too different above 10 fps + int salsX = 5; + int salsY = 5; + float heightThreshold = 6.0; + + vec2 viewM = 1.0 / vec2(salsX, salsY); + float salsSampleSum = 0.0; + int salsSampleCount = 0; + for (float i = 0.25; i < salsX; i++) { + for (float h = 0.45; h < salsY; h++) { + vec2 coord = 0.3 + 0.4 * viewM * vec2(i, h); + ivec2 icoord = ivec2(coord * shadowMapResolutionM); + float salsSample = texelFetch(shadowtex0, icoord, 0).x; // read 28A3DK6 + if (salsSample < 0.55) { + float sampledHeight = texture2D(shadowcolor1, coord).a; + if (sampledHeight > 0.0) { + sampledHeight = max0(sampledHeight - 0.25) / 0.05; // consistencyMEJHRI7DG + salsSampleSum += sampledHeight; + salsSampleCount++; + } + } + } + } + + float salsCheck = salsSampleSum / salsSampleCount; + int reduceAmount = 2; + + int skyCheck = 0; + for (float i = 0.1; i < 1.0; i += 0.2) { + skyCheck += int(texelFetch(depthtex0, ivec2(view.x * i, view.y * 0.9), 0).x == 1.0); + } + if (skyCheck >= 4) { + salsCheck = 0.0; + reduceAmount = 3; + } + + if (salsCheck > heightThreshold) { + vlFactor = min(vlFactor + OSIEBCA, 1.0); + } else { + vlFactor = max(vlFactor - OSIEBCA * reduceAmount, 0.0); + } + } + } else vlFactor = 0.0; + //if (gl_FragCoord.y < 50) color.rgb = vec3(1,0,1) * float(salsCheck / heightThreshold > gl_FragCoord.x / 1920.0); + + /*for (float i = 0.25; i < salsX; i++) { + for (float h = 0.45; h < salsY; h++) { + if (length(texCoord - (0.3 + 0.4 * viewM * vec2(i, h))) < 0.01) return vec4(1,0,1,1); + } + }*/ + #endif + + #ifdef OVERWORLD + vlColor = pow(vlColor, vec3(0.5 + 0.5 * invNoonFactor * invRainFactor + 0.3 * rainFactor)); + vlColor *= 1.0 - (0.3 + 0.3 * noonFactor) * rainFactor - 0.5 * rainyNight; + + #if LIGHTSHAFT_DAY_I != 100 || LIGHTSHAFT_NIGHT_I != 100 || LIGHTSHAFT_RAIN_I != 100 + #define LIGHTSHAFT_DAY_IM LIGHTSHAFT_DAY_I * 0.01 + #define LIGHTSHAFT_NIGHT_IM LIGHTSHAFT_NIGHT_I * 0.01 + #define LIGHTSHAFT_RAIN_IM LIGHTSHAFT_RAIN_I * 0.01 + + if (isEyeInWater == 0) { + #if LIGHTSHAFT_DAY_I != 100 || LIGHTSHAFT_NIGHT_I != 100 + vlColor.rgb *= mix(LIGHTSHAFT_NIGHT_IM, LIGHTSHAFT_DAY_IM, sunVisibility); + #endif + #if LIGHTSHAFT_RAIN_I != 100 + vlColor.rgb *= mix(1.0, LIGHTSHAFT_RAIN_IM, rainFactor); + #endif + } + #endif + + volumetricLight.rgb *= vlColor; + #endif + + volumetricLight.rgb *= vlMult; + volumetricLight = max(volumetricLight, vec4(0.0)); + + #ifdef DISTANT_HORIZONS + if (isEyeInWater == 0) { + #ifdef OVERWORLD + float lViewPosM = lViewPos0; + if (z0 >= 1.0) { + float z0DH = texelFetch(dhDepthTex, texelCoord, 0).r; + vec4 screenPosDH = vec4(texCoord, z0DH, 1.0); + vec4 viewPosDH = dhProjectionInverse * (screenPosDH * 2.0 - 1.0); + viewPosDH /= viewPosDH.w; + lViewPosM = length(viewPosDH.xyz); + } + lViewPosM = min(lViewPosM, renderDistance * 0.6); + + float dhVlStillIntense = max(max(vlSceneIntensity, rainFactor), nightFactor * 0.5); + + volumetricLight *= mix(0.0003 * lViewPosM, 1.0, dhVlStillIntense); + #else + volumetricLight *= min1(lViewPos1 * 3.0 / renderDistance); + #endif + } + #endif + + return volumetricLight; +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/colors/blocklightColors.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/colors/blocklightColors.glsl new file mode 100644 index 0000000..dc64f2e --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/colors/blocklightColors.glsl @@ -0,0 +1,220 @@ +vec3 blocklightCol = vec3(0.1775, 0.108, 0.0775) * vec3(XLIGHT_R, XLIGHT_G, XLIGHT_B); + +void AddSpecialLightDetail(inout vec3 light, vec3 albedo, float emission) { + vec3 lightM = max(light, vec3(0.0)); + lightM /= (0.2 + 0.8 * GetLuminance(lightM)); + lightM *= (1.0 / (1.0 + emission)) * 0.22; + light *= 0.9; + light += pow2(lightM / (albedo + 0.1)); +} + +vec3 fireSpecialLightColor = vec3(2.0, 0.87, 0.27) * 3.8; +vec3 lavaSpecialLightColor = vec3(3.0, 0.9, 0.2) * 4.0; +vec3 netherPortalSpecialLightColor = vec3(1.8, 0.4, 2.2) * 0.8; +vec3 redstoneSpecialLightColor = vec3(4.0, 0.1, 0.1); +vec4 soulFireSpecialColor = vec4(vec3(0.3, 2.0, 2.2) * 1.0, 0.3); +float candleColorMult = 2.0; +float candleExtraLight = 0.004; +vec4 GetSpecialBlocklightColor(int mat) { + /* Please note that these colors do not determine the intensity of the + final light. Instead; higher values of color change how long the color + will travel, and also how dominant it will be next to other colors.*/ + /* Additional feature: An alpha value bigger than 0 will make that + block cast extra light regardless of the vanilla lightmap. Use this + with caution though because our floodfill isn't as accurate as vanilla.*/ + + if (mat < 50) { + if (mat < 26) { + if (mat < 14) { + if (mat < 8) { + if (mat == 2) return vec4(fireSpecialLightColor, 0.0); // Torch + #ifndef END + if (mat == 3) return vec4(vec3(1.0, 1.0, 1.0) * 4.0, 0.0); // End Rod - This is the base for all lights. Total value 12 + #else + if (mat == 3) return vec4(vec3(1.25, 0.5, 1.25) * 4.0, 0.0); // End Rod in the End dimension + #endif + if (mat == 4) return vec4(vec3(1.0, 1.5, 2.0) * 3.0, 0.0); // Beacon + if (mat == 5) return vec4(fireSpecialLightColor, 0.0); // Fire + if (mat == 6) return vec4(vec3(0.7, 1.5, 1.5) * 1.7, 0.0); // Sea Pickle:Waterlogged + if (mat == 7) return vec4(vec3(1.1, 0.85, 0.35) * 5.0, 0.0); // Ochre Froglight + } else { + if (mat == 8) return vec4(vec3(0.6, 1.3, 0.6) * 4.5, 0.0); // Verdant Froglight + if (mat == 9) return vec4(vec3(1.1, 0.5, 0.9) * 4.5, 0.0); // Pearlescent Froglight + if (mat == 10) return vec4(vec3(1.7, 0.9, 0.4) * 4.0, 0.0); // Glowstone + if (mat == 11) return vec4(fireSpecialLightColor, 0.0); // Jack o'Lantern + if (mat == 12) return vec4(fireSpecialLightColor, 0.0); // Lantern + if (mat == 13) return vec4(lavaSpecialLightColor, 0.0); // Lava + } + } else { + if (mat < 20) { + if (mat == 14) return vec4(lavaSpecialLightColor, 0.0); // Lava Cauldron + if (mat == 15) return vec4(fireSpecialLightColor, 0.0); // Campfire:Lit + if (mat == 16) return vec4(vec3(1.7, 0.9, 0.4) * 4.0, 0.0); // Redstone Lamp:Lit + if (mat == 17) return vec4(vec3(1.7, 0.9, 0.4) * 2.0, 0.0); // Respawn Anchor:Lit + if (mat == 18) return vec4(vec3(1.0, 1.25, 1.5) * 3.4, 0.0); // Sea Lantern + if (mat == 19) return vec4(vec3(3.0, 0.9, 0.2) * 3.0, 0.0); // Shroomlight + } else { + if (mat == 20) return vec4(vec3(2.3, 0.9, 0.2) * 3.4, 0.0); // Cave Vines:With Glow Berries + if (mat == 21) return vec4(fireSpecialLightColor * 0.7, 0.0); // Furnace:Lit + if (mat == 22) return vec4(fireSpecialLightColor * 0.7, 0.0); // Smoker:Lit + if (mat == 23) return vec4(fireSpecialLightColor * 0.7, 0.0); // Blast Furnace:Lit + if (mat == 24) return vec4(fireSpecialLightColor * 0.25 * candleColorMult, candleExtraLight); // Standard Candles:Lit + if (mat == 25) return vec4(netherPortalSpecialLightColor * 2.0, 0.4); // Nether Portal + } + } + } else { + if (mat < 38) { + if (mat < 32) { + if (mat == 26) return vec4(netherPortalSpecialLightColor, 0.0); // Crying Obsidian + if (mat == 27) return soulFireSpecialColor; // Soul Fire + if (mat == 28) return soulFireSpecialColor; // Soul Torch + if (mat == 29) return soulFireSpecialColor; // Soul Lantern + if (mat == 30) return soulFireSpecialColor; // Soul Campfire:Lit + if (mat == 31) return vec4(redstoneSpecialLightColor * 0.5, 0.1); // Redstone Ores:Lit + } else { + if (mat == 32) return vec4(redstoneSpecialLightColor * 0.3, 0.1); // Redstone Ores:Unlit + if (mat == 33) return vec4(vec3(1.4, 1.1, 0.5), 0.0); // Enchanting Table + #if GLOWING_LICHEN > 0 + if (mat == 34) return vec4(vec3(0.8, 1.1, 1.1), 0.05); // Glow Lichen with IntegratedPBR + #else + if (mat == 34) return vec4(vec3(0.4, 0.55, 0.55), 0.0); // Glow Lichen vanilla + #endif + if (mat == 35) return vec4(redstoneSpecialLightColor * 0.25, 0.0); // Redstone Torch + if (mat == 36) return vec4(vec3(0.325, 0.15, 0.425) * 2.0, 0.05); // Amethyst Cluster, Amethyst Buds, Calibrated Sculk Sensor + if (mat == 37) return vec4(lavaSpecialLightColor * 0.1, 0.1); // Magma Block + } + } else { + if (mat < 44) { + if (mat == 38) return vec4(vec3(2.0, 0.5, 1.5) * 0.3, 0.1); // Dragon Egg + if (mat == 39) return vec4(vec3(2.0, 1.0, 1.5) * 0.25, 0.1); // Chorus Flower + if (mat == 40) return vec4(vec3(2.5, 1.2, 0.4) * 0.1, 0.1); // Brewing Stand + if (mat == 41) return vec4(redstoneSpecialLightColor * 0.4, 0.15); // Redstone Block + if (mat == 42) return vec4(vec3(0.75, 0.75, 3.0) * 0.277, 0.15); // Lapis Block + if (mat == 43) return vec4(vec3(1.7, 0.9, 0.4) * 0.45, 0.05); // Iron Ores + } else { + if (mat == 44) return vec4(vec3(1.7, 1.1, 0.2) * 0.45, 0.1); // Gold Ores + if (mat == 45) return vec4(vec3(1.7, 0.8, 0.4) * 0.45, 0.05); // Copper Ores + if (mat == 46) return vec4(vec3(0.75, 0.75, 3.0) * 0.2, 0.1); // Lapis Ores + if (mat == 47) return vec4(vec3(0.5, 3.5, 0.5) * 0.3, 0.1); // Emerald Ores + if (mat == 48) return vec4(vec3(0.5, 2.0, 2.0) * 0.4, 0.15); // Diamond Ores + if (mat == 49) return vec4(vec3(1.5, 1.5, 1.5) * 0.3, 0.05); // Nether Quartz Ore + } + } + } + } else { + if (mat < 74) { + if (mat < 62) { + if (mat < 56) { + if (mat == 50) return vec4(vec3(1.7, 1.1, 0.2) * 0.45, 0.05); // Nether Gold Ore + if (mat == 51) return vec4(vec3(1.7, 1.1, 0.2) * 0.45, 0.05); // Gilded Blackstone + if (mat == 52) return vec4(vec3(1.8, 0.8, 0.4) * 0.6, 0.15); // Ancient Debris + if (mat == 53) return vec4(vec3(1.4, 0.2, 1.4) * 0.3, 0.05); // Spawner + if (mat == 54) return vec4(vec3(3.1, 1.1, 0.3) * 1.0, 0.1); // Trial Spawner:NotOminous:Active, Vault:NotOminous:Active + if (mat == 55) return vec4(vec3(1.7, 0.9, 0.4) * 4.0, 0.0); // Copper Bulb:BrighterOnes:Lit + } else { + if (mat == 56) return vec4(vec3(1.7, 0.9, 0.4) * 2.0, 0.0); // Copper Bulb:DimmerOnes:Lit + if (mat == 57) return vec4(vec3(0.1, 0.3, 0.4) * 0.5, 0.0005); // Sculk++ + if (mat == 58) return vec4(vec3(0.0, 1.4, 1.4) * 4.0, 0.15); // End Portal Frame:Active + if (mat == 59) return vec4(0.0); // Bedrock + if (mat == 60) return vec4(vec3(3.1, 1.1, 0.3) * 0.125, 0.0125); // Command Block + if (mat == 61) return vec4(vec3(3.0, 0.9, 0.2) * 0.125, 0.0125); // Warped Fungus, Crimson Fungus + } + } else { + if (mat < 68) { + if (mat == 62) return vec4(vec3(3.5, 0.6, 0.4) * 0.3, 0.05); // Crimson Stem, Crimson Hyphae + if (mat == 63) return vec4(vec3(0.3, 1.9, 1.5) * 0.3, 0.05); // Warped Stem, Warped Hyphae + if (mat == 64) return vec4(vec3(1.1, 0.7, 1.1) * 0.45, 0.1); // Structure Block, Jigsaw Block + if (mat == 65) return vec4(vec3(3.0, 0.9, 0.2) * 0.125, 0.0125); // Weeping Vines Plant + if (mat == 66) return vec4(redstoneSpecialLightColor * 0.05, 0.002); // Redstone Wire:Lit, Comparator:Unlit:Subtract + if (mat == 67) return vec4(redstoneSpecialLightColor * 0.125, 0.0125); // Repeater:Lit, Comparator:Lit + } else { + if (mat == 68) return vec4(vec3(0.75), 0.0); // Vault:Inactive + if (mat == 69) return vec4(vec3(1.3, 1.6, 1.6) * 1.0, 0.1); // Trial Spawner:Ominous:Active, Vault:Ominous:Active + if (mat == 70) return vec4(vec3(1.0, 0.1, 0.1) * candleColorMult, candleExtraLight); // Red Candles:Lit + if (mat == 71) return vec4(vec3(1.0, 0.4, 0.1) * candleColorMult, candleExtraLight); // Orange Candles:Lit + if (mat == 72) return vec4(vec3(1.0, 1.0, 0.1) * candleColorMult, candleExtraLight); // Yellow Candles:Lit + if (mat == 73) return vec4(vec3(0.1, 1.0, 0.1) * candleColorMult, candleExtraLight); // Lime Candles:Lit + } + } + } else { + if (mat < 86) { + if (mat < 80) { + if (mat == 74) return vec4(vec3(0.3, 1.0, 0.3) * candleColorMult, candleExtraLight); // Green Candles:Lit + if (mat == 75) return vec4(vec3(0.3, 0.8, 1.0) * candleColorMult, candleExtraLight); // Cyan Candles:Lit + if (mat == 76) return vec4(vec3(0.5, 0.65, 1.0) * candleColorMult, candleExtraLight); // Light Blue Candles:Lit + if (mat == 77) return vec4(vec3(0.1, 0.15, 1.0) * candleColorMult, candleExtraLight); // Blue Candles:Lit + if (mat == 78) return vec4(vec3(0.7, 0.3, 1.0) * candleColorMult, candleExtraLight); // Purple Candles:Lit + if (mat == 79) return vec4(vec3(1.0, 0.1, 1.0) * candleColorMult, candleExtraLight); // Magenta Candles:Lit + } else { + if (mat == 80) return vec4(vec3(1.0, 0.4, 1.0) * candleColorMult, candleExtraLight); // Pink Candles:Lit + if (mat == 81) return vec4(vec3(2.8, 1.1, 0.2) * 0.125, 0.0125); // Open Eyeblossom + if (mat == 82) return vec4(vec3(2.8, 1.1, 0.2) * 0.3, 0.05); // Creaking Heart: Active + if (mat == 83) return vec4(0.0); + if (mat == 84) return vec4(0.0); + if (mat == 85) return vec4(0.0); + } + } else { + if (mat < 92) { + if (mat == 86) return vec4(0.0); + if (mat == 87) return vec4(0.0); + if (mat == 88) return vec4(0.0); + if (mat == 89) return vec4(0.0); + if (mat == 90) return vec4(0.0); + if (mat == 91) return vec4(0.0); + } else { + if (mat == 92) return vec4(0.0); + if (mat == 93) return vec4(0.0); + if (mat == 94) return vec4(0.0); + if (mat == 95) return vec4(0.0); + if (mat == 96) return vec4(0.0); + if (mat == 97) return vec4(0.0); + } + } + } + } + + return vec4(blocklightCol * 20.0, 0.0); +} + +vec3[] specialTintColor = vec3[]( + // 200: White + vec3(1.0), + // 201: Orange + vec3(1.0, 0.3, 0.1), + // 202: Magenta + vec3(1.0, 0.1, 1.0), + // 203: Light Blue + vec3(0.5, 0.65, 1.0), + // 204: Yellow + vec3(1.0, 1.0, 0.1), + // 205: Lime + vec3(0.1, 1.0, 0.1), + // 206: Pink + vec3(1.0, 0.4, 1.0), + // 207: Gray + vec3(1.0), + // 208: Light Gray + vec3(1.0), + // 209: Cyan + vec3(0.3, 0.8, 1.0), + // 210: Purple + vec3(0.7, 0.3, 1.0), + // 211: Blue + vec3(0.1, 0.15, 1.0), + // 212: Brown + vec3(1.0, 0.75, 0.5), + // 213: Green + vec3(0.3, 1.0, 0.3), + // 214: Red + vec3(1.0, 0.1, 0.1), + // 215: Black + vec3(1.0), + // 216: Ice + vec3(0.5, 0.65, 1.0), + // 217: Glass + vec3(1.0), + // 218: Glass Pane + vec3(1.0), + // 219++ + vec3(0.0) +); \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/colors/cloudColors.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/colors/cloudColors.glsl new file mode 100644 index 0000000..64f8b9f --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/colors/cloudColors.glsl @@ -0,0 +1,3 @@ +vec3 cloudRainColor = mix(nightMiddleSkyColor, dayMiddleSkyColor, sunFactor); +vec3 cloudAmbientColor = mix(ambientColor * (sunVisibility2 * (0.55 + 0.1 * noonFactor) + 0.35), cloudRainColor * 0.5, rainFactor); +vec3 cloudLightColor = mix(lightColor * (0.9 + 0.2 * noonFactor), cloudRainColor * 0.25, noonFactor * rainFactor); \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/colors/colorMultipliers.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/colors/colorMultipliers.glsl new file mode 100644 index 0000000..13fc1a7 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/colors/colorMultipliers.glsl @@ -0,0 +1,58 @@ +#ifndef INCLUDE_LIGHT_AND_AMBIENT_MULTIPLIERS + #define INCLUDE_LIGHT_AND_AMBIENT_MULTIPLIERS + + vec3 GetLightColorMult() { + vec3 lightColorMult; + + #ifdef OVERWORLD + vec3 morningLightMult = vec3(LIGHT_MORNING_R, LIGHT_MORNING_G, LIGHT_MORNING_B) * LIGHT_MORNING_I; + vec3 noonLightMult = vec3(LIGHT_NOON_R, LIGHT_NOON_G, LIGHT_NOON_B) * LIGHT_NOON_I; + vec3 nightLightMult = vec3(LIGHT_NIGHT_R, LIGHT_NIGHT_G, LIGHT_NIGHT_B) * LIGHT_NIGHT_I; + vec3 rainLightMult = vec3(LIGHT_RAIN_R, LIGHT_RAIN_G, LIGHT_RAIN_B) * LIGHT_RAIN_I; + + lightColorMult = mix(noonLightMult, morningLightMult, invNoonFactor2); + lightColorMult = mix(nightLightMult, lightColorMult, sunVisibility2); + lightColorMult = mix(lightColorMult, dot(lightColorMult, vec3(0.33333)) * rainLightMult, rainFactor); + #elif defined NETHER + vec3 netherLightMult = vec3(LIGHT_NETHER_R, LIGHT_NETHER_G, LIGHT_NETHER_B) * LIGHT_NETHER_I; + + lightColorMult = netherLightMult; + #elif defined END + vec3 endLightMult = vec3(LIGHT_END_R, LIGHT_END_G, LIGHT_END_B) * LIGHT_END_I; + + lightColorMult = endLightMult; + #endif + + return lightColorMult; + } + + vec3 GetAtmColorMult() { + vec3 atmColorMult; + + #ifdef OVERWORLD + vec3 morningAtmMult = vec3(ATM_MORNING_R, ATM_MORNING_G, ATM_MORNING_B) * ATM_MORNING_I; + vec3 noonAtmMult = vec3(ATM_NOON_R, ATM_NOON_G, ATM_NOON_B) * ATM_NOON_I; + vec3 nightAtmMult = vec3(ATM_NIGHT_R, ATM_NIGHT_G, ATM_NIGHT_B) * ATM_NIGHT_I; + vec3 rainAtmMult = vec3(ATM_RAIN_R, ATM_RAIN_G, ATM_RAIN_B) * ATM_RAIN_I; + + atmColorMult = mix(noonAtmMult, morningAtmMult, invNoonFactor2); + atmColorMult = mix(nightAtmMult, atmColorMult, sunVisibility2); + atmColorMult = mix(atmColorMult, dot(atmColorMult, vec3(0.33333)) * rainAtmMult, rainFactor); + #elif defined NETHER + vec3 netherAtmMult = vec3(ATM_NETHER_R, ATM_NETHER_G, ATM_NETHER_B) * ATM_NETHER_I; + + atmColorMult = netherAtmMult; + #elif defined END + vec3 endAtmMult = vec3(ATM_END_R, ATM_END_G, ATM_END_B) * ATM_END_I; + + atmColorMult = endAtmMult; + #endif + + return atmColorMult; + } + + vec3 lightColorMult; + vec3 atmColorMult; + vec3 sqrtAtmColorMult; + +#endif //INCLUDE_LIGHT_AND_AMBIENT_MULTIPLIERS \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/colors/lightAndAmbientColors.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/colors/lightAndAmbientColors.glsl new file mode 100644 index 0000000..9f19199 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/colors/lightAndAmbientColors.glsl @@ -0,0 +1,77 @@ +#ifndef INCLUDE_LIGHT_AND_AMBIENT_COLORS + #define INCLUDE_LIGHT_AND_AMBIENT_COLORS + + #if defined OVERWORLD + #ifndef COMPOSITE + vec3 noonClearLightColor = vec3(0.7, 0.55, 0.4) * 1.9; //ground and cloud color + #else + vec3 noonClearLightColor = vec3(0.4, 0.7, 1.4); //light shaft color + #endif + vec3 noonClearAmbientColor = pow(skyColor, vec3(0.65)) * 0.85; + + #ifndef COMPOSITE + vec3 sunsetClearLightColor = pow(vec3(0.64, 0.45, 0.3), vec3(1.5 + invNoonFactor)) * 5.0; //ground and cloud color + #else + vec3 sunsetClearLightColor = pow(vec3(0.62, 0.39, 0.24), vec3(1.5 + invNoonFactor)) * 6.8; //light shaft color + #endif + vec3 sunsetClearAmbientColor = noonClearAmbientColor * vec3(1.21, 0.92, 0.76) * 0.95; + + #if !defined COMPOSITE && !defined DEFERRED1 + vec3 nightClearLightColor = vec3(0.15, 0.14, 0.20) * (0.4 + vsBrightness * 0.4); //ground color + #elif defined DEFERRED1 + vec3 nightClearLightColor = vec3(0.11, 0.14, 0.20); //cloud color + #else + vec3 nightClearLightColor = vec3(0.07, 0.12, 0.27); //light shaft color + #endif + vec3 nightClearAmbientColor = vec3(0.09, 0.12, 0.17) * (1.55 + vsBrightness * 0.77); + + #ifdef SPECIAL_BIOME_WEATHER + vec3 drlcSnowM = inSnowy * vec3(-0.06, 0.0, 0.04); + vec3 drlcDryM = inDry * vec3(0.0, -0.03, -0.05); + #else + vec3 drlcSnowM = vec3(0.0), drlcDryM = vec3(0.0); + #endif + #if RAIN_STYLE == 2 + vec3 drlcRainMP = vec3(-0.03, 0.0, 0.02); + #ifdef SPECIAL_BIOME_WEATHER + vec3 drlcRainM = inRainy * drlcRainMP; + #else + vec3 drlcRainM = drlcRainMP; + #endif + #else + vec3 drlcRainM = vec3(0.0); + #endif + vec3 dayRainLightColor = vec3(0.21, 0.16, 0.13) * 0.85 + noonFactor * vec3(0.0, 0.02, 0.06) + + rainFactor * (drlcRainM + drlcSnowM + drlcDryM); + vec3 dayRainAmbientColor = vec3(0.2, 0.2, 0.25) * (1.8 + 0.5 * vsBrightness); + + vec3 nightRainLightColor = vec3(0.03, 0.035, 0.05) * (0.5 + 0.5 * vsBrightness); + vec3 nightRainAmbientColor = vec3(0.16, 0.20, 0.3) * (0.75 + 0.6 * vsBrightness); + + #ifndef COMPOSITE + float noonFactorDM = noonFactor; //ground and cloud factor + #else + float noonFactorDM = noonFactor * noonFactor; //light shaft factor + #endif + vec3 dayLightColor = mix(sunsetClearLightColor, noonClearLightColor, noonFactorDM); + vec3 dayAmbientColor = mix(sunsetClearAmbientColor, noonClearAmbientColor, noonFactorDM); + + vec3 clearLightColor = mix(nightClearLightColor, dayLightColor, sunVisibility2); + vec3 clearAmbientColor = mix(nightClearAmbientColor, dayAmbientColor, sunVisibility2); + + vec3 rainLightColor = mix(nightRainLightColor, dayRainLightColor, sunVisibility2) * 2.5; + vec3 rainAmbientColor = mix(nightRainAmbientColor, dayRainAmbientColor, sunVisibility2); + + vec3 lightColor = mix(clearLightColor, rainLightColor, rainFactor); + vec3 ambientColor = mix(clearAmbientColor, rainAmbientColor, rainFactor); + #elif defined NETHER + vec3 lightColor = vec3(0.0); + vec3 ambientColor = (netherColor + 0.5 * lavaLightColor) * (0.9 + 0.45 * vsBrightness); + #elif defined END + vec3 endLightColor = vec3(0.68, 0.51, 1.07); + float endLightBalancer = 0.2 * vsBrightness; + vec3 lightColor = endLightColor * (0.35 - endLightBalancer); + vec3 ambientColor = endLightColor * (0.2 + endLightBalancer); + #endif + +#endif //INCLUDE_LIGHT_AND_AMBIENT_COLORS \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/colors/moonPhaseInfluence.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/colors/moonPhaseInfluence.glsl new file mode 100644 index 0000000..4e99153 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/colors/moonPhaseInfluence.glsl @@ -0,0 +1,13 @@ +#ifndef INCLUDE_MOON_PHASE_INF + #define INCLUDE_MOON_PHASE_INF + + #ifdef OVERWORLD + float moonPhaseInfluence = mix( + 1.0, + moonPhase == 0 ? MOON_PHASE_FULL : moonPhase != 4 ? MOON_PHASE_PARTIAL : MOON_PHASE_DARK, + 1.0 - sunVisibility2 + ); + #else + float moonPhaseInfluence = 1.0; + #endif +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/colors/skyColors.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/colors/skyColors.glsl new file mode 100644 index 0000000..4f2cd99 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/colors/skyColors.glsl @@ -0,0 +1,52 @@ +#ifndef INCLUDE_SKY_COLORS + #define INCLUDE_SKY_COLORS + + #ifdef OVERWORLD + vec3 skyColorSqrt = sqrt(skyColor); + + #ifdef SPECIAL_BIOME_WEATHER + vec3 nmscSnowM = inSnowy * vec3(-0.3, 0.05, 0.2); + vec3 nmscDryM = inDry * vec3(-0.3); + vec3 ndscSnowM = inSnowy * vec3(-0.25, -0.01, 0.25); + vec3 ndscDryM = inDry * vec3(-0.05, -0.09, -0.1); + #else + vec3 nmscSnowM = vec3(0.0), nmscDryM = vec3(0.0), ndscSnowM = vec3(0.0), ndscDryM = vec3(0.0); + #endif + #if RAIN_STYLE == 2 + vec3 nmscRainMP = vec3(-0.15, 0.025, 0.1); + vec3 ndscRainMP = vec3(-0.125, -0.005, 0.125); + #ifdef SPECIAL_BIOME_WEATHER + vec3 nmscRainM = inRainy * ndscRainMP; + vec3 ndscRainM = inRainy * ndscRainMP; + #else + vec3 nmscRainM = ndscRainMP; + vec3 ndscRainM = ndscRainMP; + #endif + #else + vec3 nmscRainM = vec3(0.0), ndscRainM = vec3(0.0); + #endif + vec3 nmscWeatherM = vec3(-0.1, -0.4, -0.6) + vec3(0.0, 0.06, 0.12) * noonFactor; + vec3 ndscWeatherM = vec3(-0.15, -0.3, -0.42) + vec3(0.0, 0.02, 0.08) * noonFactor; + + vec3 noonUpSkyColor = pow(skyColorSqrt, vec3(2.9)); + vec3 noonMiddleSkyColor = skyColorSqrt * (vec3(1.15) + rainFactor * (nmscWeatherM + nmscRainM + nmscSnowM + nmscDryM)) + + noonUpSkyColor * 0.6; + vec3 noonDownSkyColor = skyColorSqrt * (vec3(0.9) + rainFactor * (ndscWeatherM + ndscRainM + ndscSnowM + ndscDryM)) + + noonUpSkyColor * 0.25; + + vec3 sunsetUpSkyColor = skyColor * (vec3(0.8, 0.58, 0.58) + vec3(0.1, 0.2, 0.35) * rainFactor2); + vec3 sunsetMiddleSkyColor = skyColor * (vec3(1.8, 1.3, 1.2) + vec3(0.15, 0.25, -0.05) * rainFactor2); + vec3 sunsetDownSkyColorP = vec3(1.45, 0.86, 0.5) - vec3(0.8, 0.3, 0.0) * rainFactor; + vec3 sunsetDownSkyColor = sunsetDownSkyColorP * 0.5 + 0.25 * sunsetMiddleSkyColor; + + vec3 dayUpSkyColor = mix(noonUpSkyColor, sunsetUpSkyColor, invNoonFactor2); + vec3 dayMiddleSkyColor = mix(noonMiddleSkyColor, sunsetMiddleSkyColor, invNoonFactor2); + vec3 dayDownSkyColor = mix(noonDownSkyColor, sunsetDownSkyColor, invNoonFactor2); + + vec3 nightColFactor = vec3(0.07, 0.14, 0.24) * (1.0 - 0.5 * rainFactor) + skyColor; + vec3 nightUpSkyColor = pow(nightColFactor, vec3(0.90)) * 0.4; + vec3 nightMiddleSkyColor = sqrt(nightUpSkyColor) * 0.68; + vec3 nightDownSkyColor = nightMiddleSkyColor * vec3(0.82, 0.82, 0.88); + #endif + +#endif //INCLUDE_SKY_COLORS \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/common.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/common.glsl new file mode 100644 index 0000000..59b813d --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/common.glsl @@ -0,0 +1,764 @@ +/*--------------------------------------------------------------------- + ___ __ __ ____ ___ ____ _____ _ _ _ _____ + |_ _| \/ | _ \ / _ \| _ \_ _|/ \ | \ | |_ _| + | || |\/| | |_) | | | | |_) || | / _ \ | \| | | | + | || | | | __/| |_| | _ < | |/ ___ \| |\ | | | + |___|_| |_|_| \___/|_| \_\|_/_/ \_\_| \_| |_| + . + -> -> -> EDITING THIS FILE HAS A HIGH CHANCE TO BREAK THE SHADER PACK + -> -> -> DO NOT CHANGE ANYTHING UNLESS YOU KNOW WHAT YOU ARE DOING + -> -> -> DO NOT EXPECT SUPPORT AFTER MODIFYING SHADER FILES +---------------------------------------------------------------------*/ + +//User Settings// + #define SHADER_STYLE 4 //[1 4] + + #define RP_MODE 1 //[1 0 3 2] + + #define SHADOW_QUALITY 2 //[-1 0 1 2 3 4 5] + const float shadowDistance = 192.0; //[64.0 80.0 96.0 112.0 128.0 160.0 192.0 224.0 256.0 320.0 384.0 512.0 768.0 1024.0] + #define ENTITY_SHADOWS_DEFINE -1 //[-1 1] + #define SSAO_QUALI_DEFINE 2 //[0 2 3] + #define FXAA_DEFINE 1 //[-1 1] + #define DETAIL_QUALITY 2 //[0 2 3] + #define CLOUD_QUALITY 2 //[0 1 2 3] + #define LIGHTSHAFT_QUALI_DEFINE 2 //[0 1 2 3 4] + #define WATER_REFLECT_QUALITY 2 //[-1 0 1 2] + #define BLOCK_REFLECT_QUALITY 3 //[0 1 2 3] + #define ANISOTROPIC_FILTER 0 //[0 4 8 16] + + #define COLORED_LIGHTING 0 //[128 192 256 384 512 768 1024] + #if defined IRIS_FEATURE_CUSTOM_IMAGES && SHADOW_QUALITY > -1 && !defined MC_OS_MAC + #define COLORED_LIGHTING_INTERNAL COLORED_LIGHTING + #if COLORED_LIGHTING_INTERNAL > 0 + #define COLORED_LIGHT_SATURATION 100 //[50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125] + + #define COLORED_LIGHT_FOG + #define COLORED_LIGHT_FOG_I 0.65 //[0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50] + + #define PORTAL_EDGE_EFFECT + #ifndef IRIS_HAS_CONNECTED_TEXTURES + #define CONNECTED_GLASS_EFFECT + #endif + //#define COLORED_CANDLE_LIGHT + #endif + #else + #define COLORED_LIGHTING_INTERNAL 0 + #endif + + #define WATER_STYLE_DEFINE -1 //[-1 1 2 3] + #define WATER_CAUSTIC_STYLE_DEFINE -1 //[-1 1 3] + #define WATER_REFRACTION_INTENSITY 2.0 //[0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0] + #define WATER_FOAM_I 100 //[0 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150] + #define WATER_ALPHA_MULT 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300 325 350 375 400 425 450 475 500 550 600 650 700 750 800 850 900] + #define WATER_FOG_MULT 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300 325 350 375 400 425 450 475 500 550 600 650 700 750 800 850 900] + #define WATERCOLOR_MODE 3 //[3 2 0] + #define BRIGHT_CAVE_WATER + #define WATERCOLOR_R 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300] + #define WATERCOLOR_G 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300] + #define WATERCOLOR_B 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300] + #define UNDERWATERCOLOR_R 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150] + #define UNDERWATERCOLOR_G 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150] + #define UNDERWATERCOLOR_B 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150] + #define WATER_BUMPINESS 1.25 //[0.05 0.10 0.15 0.20 0.25 0.30 0.40 0.50 0.65 0.80 1.00 1.25 1.50 2.00 2.50] + #define WATER_BUMP_SMALL 0.75 //[0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.50 5.00] + #define WATER_BUMP_MED 1.70 //[0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.50 5.00] + #define WATER_BUMP_BIG 2.00 //[0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.50 5.00] + #define WATER_SPEED_MULT 1.10 //[0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.50 5.00] + #define WATER_SIZE_MULT 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300] + + #define SHADOW_SMOOTHING 4 //[1 2 3 4] + #define RAIN_PUDDLES 0 //[0 1 2 3 4] + #define SSAO_I 100 //[0 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300] + #define VANILLAAO_I 100 //[0 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300] + + #define AURORA_STYLE_DEFINE -1 //[-1 0 1 2] + #define AURORA_CONDITION 3 //[0 1 2 3 4] + //#define NIGHT_NEBULA + #define NIGHT_NEBULA_I 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300] + #define WEATHER_TEX_OPACITY 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300 325 350 375 400 425 450 475 500 550 600 650 700 750 800 850 900] + #define SPECIAL_BIOME_WEATHER + #define RAIN_STYLE 1 //[1 2] + #define SUN_MOON_STYLE_DEFINE -1 //[-1 1 2 3] + #define SUN_MOON_HORIZON + #define SUN_MOON_DURING_RAIN + #define NIGHT_STAR_AMOUNT 2 //[2 3] + #define RAINBOWS 1 //[0 1 3] + #define CLOUD_STYLE_DEFINE -1 //[-1 0 1 3 50] + //#define CLOUD_SHADOWS + #define CLOUD_CLOSED_AREA_CHECK + #define CLOUD_ALT1 192 //[-96 -92 -88 -84 -80 -76 -72 -68 -64 -60 -56 -52 -48 -44 -40 -36 -32 -28 -24 -20 -16 -10 -8 -4 0 4 8 12 16 20 22 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120 124 128 132 136 140 144 148 152 156 160 164 168 172 176 180 184 188 192 196 200 204 208 212 216 220 224 228 232 236 240 244 248 252 256 260 264 268 272 276 280 284 288 292 296 300 304 308 312 316 320 324 328 332 336 340 344 348 352 356 360 364 368 372 376 380 384 388 392 396 400 404 408 412 416 420 424 428 432 436 440 444 448 452 456 460 464 468 472 476 480 484 488 492 496 500 510 520 530 540 550 560 570 580 590 600 610 620 630 640 650 660 670 680 690 700 710 720 730 740 750 760 770 780 790 800] + #define CLOUD_SPEED_MULT 100 //[0 5 7 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300 325 350 375 400 425 450 475 500 550 600 650 700 750 800 850 900] + #define CLOUD_R 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300] + #define CLOUD_G 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300] + #define CLOUD_B 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300] + + #define CLOUD_UNBOUND_AMOUNT 1.00 //[0.70 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.80 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.90 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00 1.02 1.04 1.06 1.08 1.10 1.12 1.14 1.16 1.18 1.20 1.22 1.24 1.26 1.28 1.30 1.32 1.34 1.36 1.38 1.40 1.42 1.44 1.46 1.48 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00 2.10 2.20 2.30 2.40 2.50 2.60 2.70 2.80 2.90 3.00] + #define CLOUD_UNBOUND_SIZE_MULT 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300] + #define CLOUD_UNBOUND_RAIN_ADD 0.40 //[0.00 0.05 0.06 0.07 0.08 0.09 0.10 0.12 0.14 0.16 0.18 0.22 0.26 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50] + + //#define DOUBLE_REIM_CLOUDS + #define CLOUD_ALT2 288 //[-96 -92 -88 -84 -80 -76 -72 -68 -64 -60 -56 -52 -48 -44 -40 -36 -32 -28 -24 -20 -16 -10 -8 -4 0 4 8 12 16 20 22 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120 124 128 132 136 140 144 148 152 156 160 164 168 172 176 180 184 188 192 196 200 204 208 212 216 220 224 228 232 236 240 244 248 252 256 260 264 268 272 276 280 284 288 292 296 300 304 308 312 316 320 324 328 332 336 340 344 348 352 356 360 364 368 372 376 380 384 388 392 396 400 404 408 412 416 420 424 428 432 436 440 444 448 452 456 460 464 468 472 476 480 484 488 492 496 500 510 520 530 540 550 560 570 580 590 600 610 620 630 640 650 660 670 680 690 700 710 720 730 740 750 760 770 780 790 800] + + #define NETHER_VIEW_LIMIT 256.0 //[96.0 112.0 128.0 160.0 192.0 224.0 256.0 320.0 384.0 512.0 768.0 1024.0 99999.0] + #define NETHER_COLOR_MODE 3 //[3 2 0] + #define NETHER_STORM + #define NETHER_STORM_LOWER_ALT 28 //[-296 -292 -288 -284 -280 -276 -272 -268 -264 -260 -256 -252 -248 -244 -240 -236 -232 -228 -224 -220 -216 -212 -208 -204 -200 -196 -192 -188 -184 -180 -176 -172 -168 -164 -160 -156 -152 -148 -144 -140 -136 -132 -128 -124 -120 -116 -112 -108 -104 -100 -96 -92 -88 -84 -80 -76 -72 -68 -64 -60 -56 -52 -48 -44 -40 -36 -32 -28 -24 -20 -16 -12 -8 -4 0 4 8 12 16 20 22 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120 124 128 132 136 140 144 148 152 156 160 164 168 172 176 180 184 188 192 196 200 204 208 212 216 220 224 228 232 236 240 244 248 252 256 260 264 268 272 276 280 284 288 292 296 300] + #define NETHER_STORM_HEIGHT 200 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300 325 350 375 400 425 450 475 500 550 600 650 700 750 800 850 900] + #define NETHER_STORM_I 0.40 //[0.05 0.06 0.07 0.08 0.09 0.10 0.12 0.14 0.16 0.18 0.22 0.26 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50] + + #define BORDER_FOG + #define ATM_FOG_MULT 0.95 //[0.50 0.65 0.80 0.95] + #define ATM_FOG_DISTANCE 100 //[10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300] + #define ATM_FOG_ALTITUDE 63 //[0 5 10 15 20 25 30 35 40 45 50 52 54 56 58 60 61 62 63 64 65 66 67 68 69 70 72 74 76 78 80 85 90 95 100 105 110 115 120 125 130 135 140 145 150 155 160 165 170 175 180 185 190 195 200 210 220 230 240 250 260 270 280 290 300] + #define CAVE_FOG + #define LIGHTSHAFT_BEHAVIOUR 1 //[0 1 2 3] + #define LIGHTSHAFT_DAY_I 100 //[1 3 5 7 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200] + #define LIGHTSHAFT_NIGHT_I 100 //[1 3 5 7 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200] + #define LIGHTSHAFT_RAIN_I 100 //[1 3 5 7 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200] + //#define LIGHTSHAFT_SMOKE + #define SPECIAL_PALE_GARDEN_LIGHTSHAFTS + + #define BLOOM + #define BLOOM_STRENGTH 0.12 //[0.027 0.036 0.045 0.054 0.063 0.072 0.081 0.09 0.10 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.21 0.23 0.25 0.28 0.32 10.00] + #define IMAGE_SHARPENING 5 //[0 1 2 3 4 5 6 7 8 9 10] + //#define MOTION_BLURRING + #define MOTION_BLURRING_STRENGTH 1.00 //[0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00] + #define VIGNETTE_R + #define CHROMA_ABERRATION 0 //[0 1 2 3 4 5 6 7 8] + #define UNDERWATER_DISTORTION + #define LENSFLARE_MODE 0 //[0 1 2] + #define LENSFLARE_I 1.00 //[0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.25 4.50 4.75 5.00] + #define TAA_MODE 1 //[1 2 0] + #define DISTANT_LIGHT_BOKEH + + #define WORLD_BLUR 0 //[0 1 2] + //#define WB_FOV_SCALED + //#define WB_CHROMATIC + //#define WB_ANAMORPHIC + #define WB_DOF_I 64.0 //[1.0 1.5 2.0 3.0 4.5 6.0 9.0 12.0 18.0 24.0 32.0 48.0 64.0 96.0 128.0 192.0 256.0 384.0 512.0 768.0 1024.0 1536.0 2048.0 3072.0 4096.0] + #define WB_DOF_FOCUS 0 //[-1 0 1 2 3 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 65 67 69 72 74 76 79 81 83 86 88 91 94 96 99 102 104 107 110 113 115 118 121 124 127 130 133 136 140 143 146 149 153 156 160 163 167 170 174 178 182 185 189 193 197 201 206 210 214 219 223 227 232 237 242 246 251 256 261 267 272 277 283 288 294 300 306 312 318 324 330 337 344 350 357 364 371 379 386 394 402 410 418 427 435 444 453 462 472 481 491 501 512 530 550 575 600 625 650 675 700 725 750 800 850 900] + #define WB_DB_DAY_I 64.0 //[1.0 1.5 2.0 3.0 4.5 6.0 9.0 12.0 18.0 24.0 32.0 48.0 64.0 96.0 128.0 192.0 256.0 384.0 512.0 768.0 1024.0 1536.0 2048.0 3072.0 4096.0] + #define WB_DB_NIGHT_I 64.0 //[1.0 1.5 2.0 3.0 4.5 6.0 9.0 12.0 18.0 24.0 32.0 48.0 64.0 96.0 128.0 192.0 256.0 384.0 512.0 768.0 1024.0 1536.0 2048.0 3072.0 4096.0] + #define WB_DB_RAIN_I 64.0 //[1.0 1.5 2.0 3.0 4.5 6.0 9.0 12.0 18.0 24.0 32.0 48.0 64.0 96.0 128.0 192.0 256.0 384.0 512.0 768.0 1024.0 1536.0 2048.0 3072.0 4096.0] + #define WB_DB_WATER_I 64.0 //[1.0 1.5 2.0 3.0 4.5 6.0 9.0 12.0 18.0 24.0 32.0 48.0 64.0 96.0 128.0 192.0 256.0 384.0 512.0 768.0 1024.0 1536.0 2048.0 3072.0 4096.0] + #define WB_DB_NETHER_I 64.0 //[1.0 1.5 2.0 3.0 4.5 6.0 9.0 12.0 18.0 24.0 32.0 48.0 64.0 96.0 128.0 192.0 256.0 384.0 512.0 768.0 1024.0 1536.0 2048.0 3072.0 4096.0] + #define WB_DB_END_I 64.0 //[1.0 1.5 2.0 3.0 4.5 6.0 9.0 12.0 18.0 24.0 32.0 48.0 64.0 96.0 128.0 192.0 256.0 384.0 512.0 768.0 1024.0 1536.0 2048.0 3072.0 4096.0] + + #define ENTITY_GN_AND_CT + #define GENERATED_NORMAL_MULT 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 250 300 400] + #define COATED_TEXTURE_MULT 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200] + + #define GLOWING_ORE_MASTER 1 //[0 1 2] + #define GLOWING_ORE_MULT 1.00 //[0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #if GLOWING_ORE_MASTER == 2 || SHADER_STYLE == 4 && GLOWING_ORE_MASTER == 1 + #define GLOWING_ORE_IRON + #define GLOWING_ORE_GOLD + #define GLOWING_ORE_COPPER + #define GLOWING_ORE_REDSTONE + #define GLOWING_ORE_LAPIS + #define GLOWING_ORE_EMERALD + #define GLOWING_ORE_DIAMOND + #define GLOWING_ORE_NETHERQUARTZ + #define GLOWING_ORE_NETHERGOLD + #define GLOWING_ORE_GILDEDBLACKSTONE + #define GLOWING_ORE_ANCIENTDEBRIS + #define GLOWING_ORE_MODDED + #endif + + #define GLOWING_AMETHYST 1 //[0 1 2] + #define GLOWING_LICHEN 1 //[0 1 2] + //#define EMISSIVE_REDSTONE_BLOCK + //#define EMISSIVE_LAPIS_BLOCK + //#define GLOWING_ARMOR_TRIM + + #define IPBR_EMISSIVE_MODE 1 //[1 3 2] + + #define NORMAL_MAP_STRENGTH 100 //[0 10 15 20 30 40 60 80 100 120 140 160 180 200] + #define CUSTOM_EMISSION_INTENSITY 100 //[0 5 7 10 15 20 25 30 35 40 45 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 225 250] + #define POM_DEPTH 0.80 //[0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00] + #define POM_QUALITY 128 //[16 32 64 128 256 512] + #define POM_DISTANCE 32 //[16 24 32 48 64 128 256 512 1024] + #define POM_LIGHTING_MODE 2 //[1 2] + //#define POM_ALLOW_CUTOUT + #define DIRECTIONAL_BLOCKLIGHT 0 //[0 3 7 11] + + #define MINIMUM_LIGHT_MODE 2 //[0 1 2 3 4 5 6] + #define HELD_LIGHTING_MODE 2 //[0 1 2] + #define BLOCKLIGHT_FLICKERING 0 //[0 2 3 4 5 6 7 8 9 10] + #define AMBIENT_MULT 100 //[50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200] + #define PLAYER_SHADOW 1 //[-1 1] + + #define WAVING_SPEED 1.00 //[0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.50 5.00] + #define WAVING_I 1.00 //[0.25 0.50 0.75 1.00 1.25 1.50 1.75 2.00 50.0] + #define WAVING_I_RAIN_MULT 100 //[25 50 75 100 125 150 175 200] + #define NO_WAVING_INDOORS + #define WAVING_FOLIAGE + #define WAVING_LEAVES + #define WAVING_LAVA + #define WAVING_LILY_PAD + #define WAVING_WATER_VERTEX + #define WAVING_RAIN + + #define SPECIAL_PORTAL_EFFECTS + + #define SUN_ANGLE -1 //[-1 0 -20 -30 -40 -50 -60 60 50 40 30 20] + + #define SELECT_OUTLINE 1 //[0 1 3 4 2] + //#define SELECT_OUTLINE_AUTO_HIDE + #define SELECT_OUTLINE_I 1.00 //[0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.50 5.00] + #define SELECT_OUTLINE_R 1.35 //[0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00] + #define SELECT_OUTLINE_G 0.35 //[0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00] + #define SELECT_OUTLINE_B 1.75 //[0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00] + + //#define WORLD_OUTLINE + #define WORLD_OUTLINE_THICKNESS 1 //[1 2 3 4] + #define WORLD_OUTLINE_I 1.50 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00] + #define WORLD_OUTLINE_ON_ENTITIES + //#define DARK_OUTLINE + #define DARK_OUTLINE_THICKNESS 1 //[1 2] + + #define HAND_SWAYING 0 //[0 1 2 3] + #define SHOW_LIGHT_LEVEL 0 //[0 1 2 3] + //#define REDUCE_CLOSE_PARTICLES + //#define LESS_LAVA_FOG + //#define SNOWY_WORLD + //#define COLOR_CODED_PROGRAMS + //#define GLOWING_COLORED_PARTICLES + + //#define MOON_PHASE_INF_LIGHT + //#define MOON_PHASE_INF_ATMOSPHERE + #define MOON_PHASE_INF_REFLECTION + #define MOON_PHASE_FULL 1.00 //[0.01 0.03 0.05 0.07 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define MOON_PHASE_PARTIAL 0.85 //[0.01 0.03 0.05 0.07 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define MOON_PHASE_DARK 0.60 //[0.01 0.03 0.05 0.07 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + + //#define PIXELATED_SHADOWS + //#define PIXELATED_BLOCKLIGHT + //#define PIXELATED_AO + #define PIXEL_SCALE 1 //[-2 -1 1 2 3 4 5] + + #define T_EXPOSURE 1.40 //[0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00 2.10 2.20 2.30 2.40 2.50 2.60 2.70 2.80] + #define TM_WHITE_CURVE 2.0 //[1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0] + #define T_LOWER_CURVE 1.10 //[0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00] + #define T_UPPER_CURVE 1.30 //[0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00] + #define T_SATURATION 1.00 //[0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00] + #define T_VIBRANCE 1.00 //[0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00] + //#define COLORGRADING + #define GR_RR 100 //[0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 108 116 124 132 140 148 156 164 172 180 188 196 200 212 224 236 248 260 272 284 296 300 316 332 348 364 380 396 400 424 448 472 496 500] + #define GR_RG 0 //[0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 108 116 124 132 140 148 156 164 172 180 188 196 200 212 224 236 248 260 272 284 296 300 316 332 348 364 380 396 400 424 448 472 496 500] + #define GR_RB 0 //[0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 108 116 124 132 140 148 156 164 172 180 188 196 200 212 224 236 248 260 272 284 296 300 316 332 348 364 380 396 400 424 448 472 496 500] + #define GR_RC 1.00 //[0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.50 5.00] + #define GR_GR 0 //[0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 108 116 124 132 140 148 156 164 172 180 188 196 200 212 224 236 248 260 272 284 296 300 316 332 348 364 380 396 400 424 448 472 496 500] + #define GR_GG 100 //[0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 108 116 124 132 140 148 156 164 172 180 188 196 200 212 224 236 248 260 272 284 296 300 316 332 348 364 380 396 400 424 448 472 496 500] + #define GR_GB 0 //[0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 108 116 124 132 140 148 156 164 172 180 188 196 200 212 224 236 248 260 272 284 296 300 316 332 348 364 380 396 400 424 448 472 496 500] + #define GR_GC 1.00 //[0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.50 5.00] + #define GR_BR 0 //[0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 108 116 124 132 140 148 156 164 172 180 188 196 200 212 224 236 248 260 272 284 296 300 316 332 348 364 380 396 400 424 448 472 496 500] + #define GR_BG 0 //[0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 108 116 124 132 140 148 156 164 172 180 188 196 200 212 224 236 248 260 272 284 296 300 316 332 348 364 380 396 400 424 448 472 496 500] + #define GR_BB 100 //[0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 108 116 124 132 140 148 156 164 172 180 188 196 200 212 224 236 248 260 272 284 296 300 316 332 348 364 380 396 400 424 448 472 496 500] + #define GR_BC 1.00 //[0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.50 5.00] + + //#define LIGHT_COLOR_MULTS + //#define ATM_COLOR_MULTS + #define LIGHT_MORNING_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define LIGHT_MORNING_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define LIGHT_MORNING_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define LIGHT_MORNING_I 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define ATM_MORNING_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define ATM_MORNING_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define ATM_MORNING_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define ATM_MORNING_I 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define LIGHT_NOON_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define LIGHT_NOON_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define LIGHT_NOON_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define LIGHT_NOON_I 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define ATM_NOON_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define ATM_NOON_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define ATM_NOON_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define ATM_NOON_I 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define LIGHT_NIGHT_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define LIGHT_NIGHT_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define LIGHT_NIGHT_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define LIGHT_NIGHT_I 1.00 //[0.01 0.03 0.05 0.07 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define ATM_NIGHT_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define ATM_NIGHT_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define ATM_NIGHT_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define ATM_NIGHT_I 1.00 //[0.01 0.03 0.05 0.07 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define LIGHT_RAIN_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define LIGHT_RAIN_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define LIGHT_RAIN_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define LIGHT_RAIN_I 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define ATM_RAIN_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define ATM_RAIN_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define ATM_RAIN_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define ATM_RAIN_I 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define LIGHT_NETHER_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define LIGHT_NETHER_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define LIGHT_NETHER_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define LIGHT_NETHER_I 1.00 //[0.01 0.03 0.05 0.07 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define ATM_NETHER_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define ATM_NETHER_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define ATM_NETHER_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define ATM_NETHER_I 1.00 //[0.01 0.03 0.05 0.07 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define LIGHT_END_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define LIGHT_END_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define LIGHT_END_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define LIGHT_END_I 1.00 //[0.01 0.03 0.05 0.07 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define ATM_END_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define ATM_END_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define ATM_END_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define ATM_END_I 1.00 //[0.01 0.03 0.05 0.07 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + + #define XLIGHT_R 1.00 //[0.01 0.03 0.05 0.07 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define XLIGHT_G 1.00 //[0.01 0.03 0.05 0.07 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define XLIGHT_B 1.00 //[0.01 0.03 0.05 0.07 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + #define XLIGHT_I 1.00 //[0.01 0.03 0.05 0.07 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00] + + //#define DREAM_TWEAKED_LIGHTING + //#define DREAM_TWEAKED_BORDERFOG + //#define FOLIAGE_ALT_SUBSURFACE + +//Internal Settings// + #define SIDE_SHADOWING + #define SHADOW_FILTERING + + #define GLASS_OPACITY 0.25 + + #define DIRECTIONAL_SHADING + + #define ATMOSPHERIC_FOG + #define BLOOM_FOG + + #define GLOWING_ENTITY_FIX + #define FLICKERING_FIX + //#define SAFER_GENERATED_NORMALS + + #define SHADOW_FRUSTUM_FIT + +//Extensions// + +//Information// + #define info0 0 //[0] + #define info1 0 //[0] + #define info2 0 //[0] + #define info3 0 //[0] + #define info4 0 //[0] + #define info5 0 //[0] + #define info6 0 //[0] + #define info7 0 //[0] + #define info8 0 //[0] + #define info9 0 //[0] + #define info10 0 //[0] + +//Visual Style and Performance Setting Handling// + #if RP_MODE == 1 + #define IPBR + #define IPBR_PARTICLE_FEATURES + //#define GENERATED_NORMALS + //#define COATED_TEXTURES + //#define FANCY_GLASS + //#define GREEN_SCREEN_LIME + #endif + #if RP_MODE >= 2 + #define CUSTOM_PBR + #define POM + #endif + + #if SHADER_STYLE == 1 + #define WATER_STYLE_DEFAULT 1 + //#define WATER_CAUSTIC_STYLE_DEFAULT 1 + #define AURORA_STYLE_DEFAULT 1 + #define SUN_MOON_STYLE_DEFAULT 1 + #define CLOUD_STYLE_DEFAULT 1 + #elif SHADER_STYLE == 4 + #define WATER_STYLE_DEFAULT 3 + //#define WATER_CAUSTIC_STYLE_DEFAULT 3 + #define AURORA_STYLE_DEFAULT 2 + #define SUN_MOON_STYLE_DEFAULT 2 + #define CLOUD_STYLE_DEFAULT 3 + #endif + #if WATER_STYLE_DEFINE == -1 + #define WATER_STYLE WATER_STYLE_DEFAULT + #else + #define WATER_STYLE WATER_STYLE_DEFINE + #endif + #if WATER_CAUSTIC_STYLE_DEFINE == -1 + #define WATER_CAUSTIC_STYLE WATER_STYLE + #else + #define WATER_CAUSTIC_STYLE WATER_CAUSTIC_STYLE_DEFINE + #endif + #if AURORA_STYLE_DEFINE == -1 + #define AURORA_STYLE AURORA_STYLE_DEFAULT + #else + #define AURORA_STYLE AURORA_STYLE_DEFINE + #endif + #if SUN_MOON_STYLE_DEFINE == -1 + #define SUN_MOON_STYLE SUN_MOON_STYLE_DEFAULT + #else + #define SUN_MOON_STYLE SUN_MOON_STYLE_DEFINE + #endif + #if CLOUD_STYLE_DEFINE == -1 + #define CLOUD_STYLE CLOUD_STYLE_DEFAULT + #else + #define CLOUD_STYLE CLOUD_STYLE_DEFINE + #endif + // Thanks to SpacEagle17 and isuewo for the sun angle handling + #ifdef END + const float sunPathRotation = 0.0; + #else + #if SUN_ANGLE == -1 + #if SHADER_STYLE == 1 + const float sunPathRotation = 0.0; + #define PERPENDICULAR_TWEAKS + #elif SHADER_STYLE == 4 + const float sunPathRotation = -40.0; + #endif + #elif SUN_ANGLE == 0 + const float sunPathRotation = 0.0; + #define PERPENDICULAR_TWEAKS + #elif SUN_ANGLE == 20 + const float sunPathRotation = 20.0; + #elif SUN_ANGLE == 30 + const float sunPathRotation = 30.0; + #elif SUN_ANGLE == 40 + const float sunPathRotation = 40.0; + #elif SUN_ANGLE == 50 + const float sunPathRotation = 50.0; + #elif SUN_ANGLE == 60 + const float sunPathRotation = 60.0; + #elif SUN_ANGLE == -20 + const float sunPathRotation = -20.0; + #elif SUN_ANGLE == -30 + const float sunPathRotation = -30.0; + #elif SUN_ANGLE == -40 + const float sunPathRotation = -40.0; + #elif SUN_ANGLE == -50 + const float sunPathRotation = -50.0; + #elif SUN_ANGLE == -60 + const float sunPathRotation = -60.0; + #endif + #endif + + #if SHADOW_QUALITY >= 1 + #if SHADOW_SMOOTHING >= 3 + const int shadowMapResolution = 2048; + #else + const int shadowMapResolution = 4096; + #endif + #else + const int shadowMapResolution = 1024; + #endif + + #if SSAO_I > 0 + #define SSAO_QUALI SSAO_QUALI_DEFINE + #else + #define SSAO_QUALI 0 + #endif + #if LIGHTSHAFT_BEHAVIOUR > 0 + #define LIGHTSHAFT_QUALI LIGHTSHAFT_QUALI_DEFINE + #else + #define LIGHTSHAFT_QUALI 0 + #endif + + #if BLOCK_REFLECT_QUALITY >= 1 + #define LIGHT_HIGHLIGHT + #endif + #if BLOCK_REFLECT_QUALITY >= 2 && RP_MODE >= 1 + #define PBR_REFLECTIONS + #endif + #if BLOCK_REFLECT_QUALITY >= 3 && RP_MODE >= 1 + #define TEMPORAL_FILTER + #endif + + #if DETAIL_QUALITY == 0 // Potato + #undef PERPENDICULAR_TWEAKS + #define LOW_QUALITY_NETHER_STORM + #define LOW_QUALITY_ENDER_NEBULA + #define WATER_MAT_QUALITY 1 + #endif + #if DETAIL_QUALITY >= 1 // not an option for now + #if TAA_MODE >= 1 + #define TAA + #endif + #define WATER_MAT_QUALITY 1 + #endif + #if DETAIL_QUALITY >= 2 // Medium + #undef WATER_MAT_QUALITY + #define WATER_MAT_QUALITY 2 + #endif + #if DETAIL_QUALITY >= 3 // High + #undef WATER_MAT_QUALITY + #define WATER_MAT_QUALITY 3 // we use DETAIL_QUALITY >= 3 when writing in gbuffers_water because optifine bad + #define HQ_NIGHT_NEBULA + #define SKY_EFFECT_REFLECTION + #define CONNECTED_GLASS_CORNER_FIX + #define ACL_CORNER_LEAK_FIX + #define DO_NETHER_VINE_WAVING_OUTSIDE_NETHER + #if defined IRIS_FEATURE_CUSTOM_IMAGES && SHADOW_QUALITY > -1 && RAIN_PUDDLES > 0 && COLORED_LIGHTING_INTERNAL > 0 + #define PUDDLE_VOXELIZATION + #endif + #if CLOUD_QUALITY >= 3 && CLOUD_STYLE > 0 && CLOUD_STYLE != 50 + #define ENTITY_TAA_NOISY_CLOUD_FIX + #endif + #endif + +//Define Handling// + #ifdef OVERWORLD + #if CLOUD_STYLE > 0 && CLOUD_STYLE != 50 && CLOUD_QUALITY > 0 + #define VL_CLOUDS_ACTIVE + #if CLOUD_STYLE == 1 + #define CLOUDS_REIMAGINED + #endif + #if CLOUD_STYLE == 3 + #define CLOUDS_UNBOUND + #endif + #endif + #else + #undef LIGHT_HIGHLIGHT + #undef CAVE_FOG + #undef CLOUD_SHADOWS + #undef SNOWY_WORLD + #undef LIGHTSHAFT_SMOKE + #endif + #ifdef NETHER + #undef ATMOSPHERIC_FOG + #undef NO_WAVING_INDOORS + #else + #undef NETHER_STORM + #endif + #ifdef END + #undef BLOOM_FOG + #endif + + #ifndef BLOOM + #undef BLOOM_FOG + #endif + + #if defined PIXELATED_SHADOWS || defined PIXELATED_BLOCKLIGHT || defined PIXELATED_AO + #if !defined GBUFFERS_BASIC && !defined DH_TERRAIN && !defined DH_WATER + #define DO_PIXELATION_EFFECTS + #endif + #endif + + #ifdef BLOOM_FOG + #if WORLD_BLUR > 0 + #define BLOOM_FOG_COMPOSITE3 + #elif defined MOTION_BLURRING + #define BLOOM_FOG_COMPOSITE2 + #else + #define BLOOM_FOG_COMPOSITE + #endif + #endif + + #if defined GBUFFERS_HAND || defined GBUFFERS_ENTITIES + #undef SNOWY_WORLD + #undef DISTANT_LIGHT_BOKEH + #endif + #if defined GBUFFERS_TEXTURED || defined GBUFFERS_BASIC + #undef LIGHT_HIGHLIGHT + #undef DIRECTIONAL_SHADING + #undef SIDE_SHADOWING + #endif + #ifdef GBUFFERS_WATER + #undef LIGHT_HIGHLIGHT + #endif + + #ifndef GLOWING_ENTITY_FIX + #undef GBUFFERS_ENTITIES_GLOWING + #endif + + #if LIGHTSHAFT_QUALI > 0 && defined OVERWORLD && SHADOW_QUALITY > -1 || defined END + #define LIGHTSHAFTS_ACTIVE + #endif + + #if defined WAVING_FOLIAGE || defined WAVING_LEAVES || defined WAVING_LAVA || defined WAVING_LILY_PAD + #define WAVING_ANYTHING_TERRAIN + #endif + + #if WATERCOLOR_R != 100 || WATERCOLOR_G != 100 || WATERCOLOR_B != 100 + #define WATERCOLOR_RM WATERCOLOR_R * 0.01 + #define WATERCOLOR_GM WATERCOLOR_G * 0.01 + #define WATERCOLOR_BM WATERCOLOR_B * 0.01 + #define WATERCOLOR_CHANGED + #endif + + #if UNDERWATERCOLOR_R != 100 || UNDERWATERCOLOR_G != 100 || UNDERWATERCOLOR_B != 100 + #define UNDERWATERCOLOR_RM UNDERWATERCOLOR_R * 0.01 + #define UNDERWATERCOLOR_GM UNDERWATERCOLOR_G * 0.01 + #define UNDERWATERCOLOR_BM UNDERWATERCOLOR_B * 0.01 + #define UNDERWATERCOLOR_CHANGED + #endif + + #if defined IS_IRIS && !defined IRIS_HAS_TRANSLUCENCY_SORTING + #undef FANCY_GLASS + #endif + + #ifdef DISTANT_HORIZONS + #undef DISTANT_LIGHT_BOKEH + #endif + + #if defined MC_GL_VENDOR_AMD || defined MC_GL_VENDOR_ATI + #ifndef DEFERRED1 + #define FIX_AMD_REFLECTION_CRASH //BFARC: Fixes a driver crashing problem on AMD GPUs + #endif + #endif + + +//Activate Settings// + #ifdef POM_ALLOW_CUTOUT + #endif + #ifdef BRIGHT_CAVE_WATER + #endif + #ifdef IPBR_PARTICLE_FEATURES + #endif + #ifdef COLORED_CANDLE_LIGHT + #endif + #ifdef PIXELATED_AO + #endif + +//Very Common Stuff// + #include "/lib/uniforms.glsl" + + #if SHADOW_QUALITY == -1 + float timeAngle = worldTime / 24000.0; + #else + float tAmin = fract(sunAngle - 0.033333333); + float tAlin = tAmin < 0.433333333 ? tAmin * 1.15384615385 : tAmin * 0.882352941176 + 0.117647058824; + float hA = tAlin > 0.5 ? 1.0 : 0.0; + float tAfrc = fract(tAlin * 2.0); + float tAfrs = tAfrc*tAfrc*(3.0-2.0*tAfrc); + float tAmix = hA < 0.5 ? 0.3 : -0.1; + float timeAngle = (tAfrc * (1.0-tAmix) + tAfrs * tAmix + hA) * 0.5; + #endif + + #include "/lib/util/commonFunctions.glsl" + + #ifdef DO_PIXELATION_EFFECTS + #include "/lib/misc/pixelation.glsl" + #endif + + #ifndef DISTANT_HORIZONS + float renderDistance = far; + #else + float renderDistance = float(dhRenderDistance); + #endif + + const float shadowMapBias = 1.0 - 25.6 / shadowDistance; + #ifndef DREAM_TWEAKED_LIGHTING + float noonFactor = sqrt(max(sin(timeAngle*6.28318530718),0.0)); + #else + float noonFactor = pow(max(sin(timeAngle*6.28318530718),0.0), 0.2); + #endif + float nightFactor = max(sin(timeAngle*(-6.28318530718)),0.0); + float invNightFactor = 1.0 - nightFactor; + float rainFactor2 = rainFactor * rainFactor; + float invRainFactor = 1.0 - rainFactor; + float invRainFactorSqrt = 1.0 - rainFactor * rainFactor; + float invNoonFactor = 1.0 - noonFactor; + float invNoonFactor2 = invNoonFactor * invNoonFactor; + + float vsBrightness = clamp(screenBrightness, 0.0, 1.0); + + int modifiedWorldDay = int(mod(worldDay, 100) + 5.0); + float syncedTime = (worldTime + modifiedWorldDay * 24000) * 0.05; + + const float pi = 3.14159265359; + const float goldenRatio = 1.61803398875; + + const float oceanAltitude = 61.9; + + #if IRIS_VERSION >= 10800 + vec3 cameraPositionBestFract = cameraPositionFract; + #else + vec3 cameraPositionBestFract = fract(cameraPosition); + #endif + + #include "/lib/colors/blocklightColors.glsl" + + const vec3 caveFogColorRaw = vec3(0.13, 0.13, 0.15); + #if MINIMUM_LIGHT_MODE <= 1 + vec3 caveFogColor = caveFogColorRaw * 0.7; + #elif MINIMUM_LIGHT_MODE == 2 + vec3 caveFogColor = caveFogColorRaw * (0.7 + 0.3 * vsBrightness); // Default + #elif MINIMUM_LIGHT_MODE >= 3 + vec3 caveFogColor = caveFogColorRaw; + #endif + + #if WATERCOLOR_MODE >= 2 + vec3 underwaterColorM1 = pow(fogColor, vec3(0.33, 0.21, 0.26)); + #else + vec3 underwaterColorM1 = vec3(0.46, 0.62, 1.0); + #endif + #ifndef UNDERWATERCOLOR_CHANGED + vec3 underwaterColorM2 = underwaterColorM1; + #else + vec3 underwaterColorM2 = underwaterColorM1 * vec3(UNDERWATERCOLOR_RM, UNDERWATERCOLOR_GM, UNDERWATERCOLOR_BM); + #endif + vec3 waterFogColor = underwaterColorM2 * vec3(0.2 + 0.1 * vsBrightness); + + #if NETHER_COLOR_MODE == 3 + float netherColorMixer = inNetherWastes + inCrimsonForest + inWarpedForest + inBasaltDeltas + inSoulValley; + vec3 netherColor = mix( + fogColor * 0.6 + 0.2 * normalize(fogColor + 0.0001), + ( + inNetherWastes * vec3(0.38, 0.15, 0.05) + inCrimsonForest * vec3(0.33, 0.07, 0.04) + + inWarpedForest * vec3(0.18, 0.1, 0.25) + inBasaltDeltas * vec3(0.25, 0.235, 0.23) + + inSoulValley * vec3(0.1, vec2(0.24)) + ), + netherColorMixer + ); + #elif NETHER_COLOR_MODE == 2 + vec3 netherColor = fogColor * 0.6 + 0.2 * normalize(fogColor + 0.0001); + #elif NETHER_COLOR_MODE == 0 + vec3 netherColor = vec3(0.7, 0.26, 0.08) * 0.6; + #endif + vec3 lavaLightColor = vec3(0.15, 0.06, 0.01); + + const vec3 endSkyColor = vec3(0.095, 0.07, 0.15) * 1.5; + + #if WEATHER_TEX_OPACITY == 100 + const float rainTexOpacity = 0.25; + const float snowTexOpacity = 0.5; + #else + #define WEATHER_TEX_OPACITY_M 100.0 / WEATHER_TEX_OPACITY + const float rainTexOpacity = pow(0.25, WEATHER_TEX_OPACITY_M); + const float snowTexOpacity = pow(0.5, WEATHER_TEX_OPACITY_M); + #endif + + #ifdef FRAGMENT_SHADER + ivec2 texelCoord = ivec2(gl_FragCoord.xy); + #endif + + const int cloudAlt1i = int(CLOUD_ALT1); // Old setting files can send float values + const int cloudAlt2i = int(CLOUD_ALT2); + + const float OSIEBCA = 1.0 / 255.0; // One Step In Eight Bit Color Attachment + /* materialMask steps + 0 to 240 - PBR Dependant: + IntegratedPBR: + 0 to 99: deferredMaterials + OSIEBCA * 0.0 = *Unused as 0.0 is the default value* + OSIEBCA * 1.0 = Intense Fresnel + OSIEBCA * 2.0 = Copper Fresnel + OSIEBCA * 3.0 = Gold Fresnel + OSIEBCA * 4.0 = + OSIEBCA * 5.0 = Redstone Fresnel + 100 to 199: Exact copy of deferredMaterials but toned down reflection handling for entities + materialMask += OSIEBCA * 100.0; // Entity Reflection Handling + 200 to 240: Random checks + OSIEBCA * 240.0 = Green Screen Lime Blocks + seuspbr: + 0 to 240: Increasing metalness + labPBR: + 0 to 229: Increasing f0 + 230 to 240: Consistent metalness with still increasing f0 + 241 to 255 - PBR Independant: + OSIEBCA * 241.0 = Water + + OSIEBCA * 252.0 = Versatile Selection Outline + OSIEBCA * 253.0 = Reduced Edge TAA + OSIEBCA * 254.0 = No SSAO, No TAA + OSIEBCA * 255.0 = *Unused as 1.0 is the clear color* + */ + +// 62 75 74 20 74 68 4F 73 65 20 77 68 6F 20 68 6F 70 65 20 69 6E 20 74 68 65 20 6C 69 6D 69 4E 61 6C 0A 77 69 6C 6C 20 72 65 6E 65 77 20 74 68 65 69 72 20 73 54 72 65 6E 67 74 48 2E 0A 74 68 65 79 20 77 69 6C 6C 20 73 6F 41 72 20 6F 6E 20 65 6C 79 54 72 61 73 20 6C 69 6B 65 20 70 68 61 6E 74 6F 6D 73 3B 0A 74 68 65 79 20 77 69 6C 6C 20 72 75 6E 20 61 6E 44 20 6E 6F 74 20 67 72 6F 77 20 77 65 41 72 79 2C 0A 74 68 65 59 20 77 69 6C 6C 20 77 61 6C 6B 20 61 6E 64 20 6E 6F 74 20 62 65 20 66 61 69 6E 74 2E \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/lighting/ggx.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/lighting/ggx.glsl new file mode 100644 index 0000000..ef64a8f --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/lighting/ggx.glsl @@ -0,0 +1,60 @@ +// GGX area light approximation from Horizon Zero Dawn +float GetNoHSquared(float radiusTan, float NoL, float NoV, float VoL) { + float radiusCos = 1.0 / sqrt(1.0 + radiusTan * radiusTan); + + float RoL = 2.0 * NoL * NoV - VoL; + if (RoL >= radiusCos) + return 1.0; + + float rOverLengthT = radiusCos * radiusTan / sqrt(1.0 - RoL * RoL); + float NoTr = rOverLengthT * (NoV - RoL * NoL); + float VoTr = rOverLengthT * (2.0 * NoV * NoV - 1.0 - RoL * VoL); + + float triple = sqrt(clamp(1.0 - NoL * NoL - NoV * NoV - VoL * VoL + 2.0 * NoL * NoV * VoL, 0.0, 1.0)); + + float NoBr = rOverLengthT * triple, VoBr = rOverLengthT * (2.0 * triple * NoV); + float NoLVTr = NoL * radiusCos + NoV + NoTr, VoLVTr = VoL * radiusCos + 1.0 + VoTr; + float p = NoBr * VoLVTr, q = NoLVTr * VoLVTr, s = VoBr * NoLVTr; + float xNum = q * (-0.5 * p + 0.25 * VoBr * NoLVTr); + float xDenom = p * p + s * ((s - 2.0 * p)) + NoLVTr * ((NoL * radiusCos + NoV) * VoLVTr * VoLVTr + + q * (-0.5 * (VoLVTr + VoL * radiusCos) - 0.5)); + float twoX1 = 2.0 * xNum / (xDenom * xDenom + xNum * xNum); + float sinTheta = twoX1 * xDenom; + float cosTheta = 1.0 - twoX1 * xNum; + NoTr = cosTheta * NoTr + sinTheta * NoBr; + VoTr = cosTheta * VoTr + sinTheta * VoBr; + + float newNoL = NoL * radiusCos + NoTr; + float newVoL = VoL * radiusCos + VoTr; + float NoH = NoV + newNoL; + float HoH = 2.0 * newVoL + 2.0; + return clamp(NoH * NoH / HoH, 0.0, 1.0); +} + +float GGX(vec3 normalM, vec3 viewPos, vec3 lightVec, float NdotLmax0, float smoothnessG) { + smoothnessG = sqrt1(smoothnessG * 0.9 + 0.1); + float roughnessP = (1.35 - smoothnessG); + float roughness = pow2(pow2(roughnessP)); + + vec3 halfVec = normalize(lightVec - viewPos); + + float dotLH = clamp(dot(halfVec, lightVec), 0.0, 1.0); + float dotNV = dot(normalM, -viewPos); + + #if WATER_REFLECT_QUALITY >= 2 + float dotNH = GetNoHSquared(0.01, NdotLmax0, dotNV, dot(-viewPos, lightVec)); + #else + float dotNH = pow2(min1(2.0 * NdotLmax0 * dotNV * length(halfVec) - dot(-viewPos, lightVec))); + #endif + + float denom = dotNH * roughness - dotNH + 1.0; + float D = roughness / (3.141592653589793 * pow2(denom)); + float f0 = 0.05; + float F = exp2((-5.55473 * dotLH - 6.98316) * dotLH) * (1.0 - f0) + f0; + + float NdotLmax0M = sqrt3(NdotLmax0 * max0(dot(normal, lightVec))); + float specular = max0(NdotLmax0M * D * F / pow2(dotLH)); + specular = specular / (0.125 * specular + 1.0); + + return specular; +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/lighting/mainLighting.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/lighting/mainLighting.glsl new file mode 100644 index 0000000..af45bfa --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/lighting/mainLighting.glsl @@ -0,0 +1,615 @@ +//Lighting Includes// +#include "/lib/colors/lightAndAmbientColors.glsl" +#include "/lib/lighting/ggx.glsl" + +#if SHADOW_QUALITY > -1 && (defined OVERWORLD || defined END) + #include "/lib/lighting/shadowSampling.glsl" +#endif + +#if defined CLOUDS_REIMAGINED && defined CLOUD_SHADOWS + #include "/lib/atmospherics/clouds/cloudCoord.glsl" +#endif + +#ifdef LIGHT_COLOR_MULTS + #include "/lib/colors/colorMultipliers.glsl" +#endif + +#if defined MOON_PHASE_INF_LIGHT || defined MOON_PHASE_INF_REFLECTION + #include "/lib/colors/moonPhaseInfluence.glsl" +#endif + +#if COLORED_LIGHTING_INTERNAL > 0 + #include "/lib/misc/voxelization.glsl" +#endif + +vec3 highlightColor = normalize(pow(lightColor, vec3(0.37))) * (0.3 + 1.5 * sunVisibility2) * (1.0 - 0.85 * rainFactor); + +//Lighting// +void DoLighting(inout vec4 color, inout vec3 shadowMult, vec3 playerPos, vec3 viewPos, float lViewPos, vec3 geoNormal, vec3 normalM, + vec3 worldGeoNormal, vec2 lightmap, bool noSmoothLighting, bool noDirectionalShading, bool noVanillaAO, + bool centerShadowBias, int subsurfaceMode, float smoothnessG, float highlightMult, float emission) { + #ifdef DO_PIXELATION_EFFECTS + vec2 pixelationOffset = ComputeTexelOffset(tex, texCoord); + + #ifdef PIXELATED_SHADOWS + vec3 playerPosPixelated = TexelSnap(playerPos, pixelationOffset); + #endif + #ifdef PIXELATED_BLOCKLIGHT + lightmap = clamp(TexelSnap(lightmap, pixelationOffset), 0.0, 1.0); + lViewPos = TexelSnap(lViewPos, pixelationOffset); + #endif + #endif + + float lightmapY2 = pow2(lightmap.y); + float lightmapYM = smoothstep1(lightmap.y); + float subsurfaceHighlight = 0.0; + float ambientMult = 1.0; + vec3 lightColorM = lightColor; + vec3 ambientColorM = ambientColor; + vec3 nViewPos = normalize(viewPos); + + #if defined LIGHT_COLOR_MULTS && !defined GBUFFERS_WATER // lightColorMult is defined early in gbuffers_water + lightColorMult = GetLightColorMult(); + #endif + + #ifdef OVERWORLD + float skyLightShadowMult = pow2(pow2(lightmapY2)); + #else + float skyLightShadowMult = 1.0; + #endif + + #if defined SIDE_SHADOWING || defined DIRECTIONAL_SHADING + float NdotN = dot(normalM, northVec); + float absNdotN = abs(NdotN); + #endif + + #if defined CUSTOM_PBR || defined GENERATED_NORMALS + float NPdotU = abs(dot(geoNormal, upVec)); + #endif + + // Shadows + #if defined OVERWORLD || defined END + float NdotL = dot(normalM, lightVec); + #ifdef GBUFFERS_WATER + //NdotL = mix(NdotL, 1.0, 1.0 - color.a); + #endif + #ifdef CUSTOM_PBR + float geoNdotL = dot(geoNormal, lightVec); + float geoNdotLM = geoNdotL > 0.0 ? geoNdotL * 10.0 : geoNdotL; + NdotL = min(geoNdotLM, NdotL); + + NdotL *= 1.0 - 0.7 * (1.0 - pow2(pow2(NdotUmax0))) * NPdotU; + #endif + #if SHADOW_QUALITY == -1 && defined GBUFFERS_TERRAIN || defined DREAM_TWEAKED_LIGHTING + if (subsurfaceMode == 1) { + NdotU = 1.0; + NdotUmax0 = 1.0; + NdotL = dot(upVec, lightVec); + } else if (subsurfaceMode == 2) { + highlightMult *= NdotL; + NdotL = mix(NdotL, 1.0, 0.35); + } + + subsurfaceMode = 0; + #endif + float NdotLmax0 = max0(NdotL); + float NdotLM = NdotLmax0 * 0.9999; + + #ifdef GBUFFERS_TEXTURED + NdotLM = 1.0; + #else + #ifdef GBUFFERS_TERRAIN + if (subsurfaceMode != 0) { + #if defined CUSTOM_PBR && defined POM && POM_QUALITY >= 128 && POM_LIGHTING_MODE == 2 + shadowMult *= max(pow2(pow2(dot(normalM, geoNormal))), sqrt2(NdotLmax0)); + #endif + NdotLM = 1.0; + } + #ifdef SIDE_SHADOWING + else + #endif + #endif + #ifdef SIDE_SHADOWING + NdotLM = max0(NdotL + 0.4) * 0.714; + + #ifdef END + NdotLM = sqrt3(NdotLM); + #endif + #endif + #endif + + #if ENTITY_SHADOWS_DEFINE == -1 && (defined GBUFFERS_ENTITIES || defined GBUFFERS_BLOCK) + lightColorM = mix(lightColorM * 0.75, ambientColorM, 0.5 * pow2(pow2(1.0 - NdotLM))); + NdotLM = NdotLM * 0.75 + 0.25; + #endif + + if (shadowMult.r > 0.00001) { + #if SHADOW_QUALITY > -1 + if (NdotLM > 0.0001) { + vec3 shadowMultBeforeLighting = shadowMult; + float shadowLength = min(shadowDistance, far) * 0.9166667 - lViewPos; //consistent08JJ622 + + if (shadowLength > 0.000001) { + #if SHADOW_SMOOTHING == 4 || SHADOW_QUALITY == 0 + float offset = 0.00098; + #elif SHADOW_SMOOTHING == 3 + float offset = 0.00075; + #elif SHADOW_SMOOTHING == 2 + float offset = 0.0005; + #elif SHADOW_SMOOTHING == 1 + float offset = 0.0003; + #endif + + vec3 playerPosM = playerPos; + + #if defined DO_PIXELATION_EFFECTS && defined PIXELATED_SHADOWS + playerPosM = playerPosPixelated; + #endif + + #ifdef GBUFFERS_TEXTURED + vec3 centerPlayerPos = floor(playerPos + cameraPosition) - cameraPosition + 0.5; + playerPosM = mix(centerPlayerPos, playerPosM + vec3(0.0, 0.02, 0.0), lightmapYM); + #else + // Shadow bias without peter-panning + float distanceBias = pow(dot(playerPos, playerPos), 0.75); + distanceBias = 0.12 + 0.0008 * distanceBias; + vec3 bias = worldGeoNormal * distanceBias * (2.0 - 0.95 * NdotLmax0); // 0.95 fixes pink petals noon shadows + + #ifdef GBUFFERS_TERRAIN + if (subsurfaceMode == 2) { + bias *= vec3(0.0, 0.0, -0.75); + } else if (subsurfaceMode == 1) { + bias = vec3(0.0); + centerShadowBias = true; + } + #endif + + // Fix light leaking in caves + if (lightmapYM < 0.999) { + #ifdef GBUFFERS_HAND + playerPosM = mix(vec3(0.0), playerPosM, 0.2 + 0.8 * lightmapYM); + #else + if (centerShadowBias) { + #ifdef OVERWORLD + vec3 centerPos = floor(playerPosM + cameraPosition) - cameraPosition + 0.5; + playerPosM = mix(centerPos, playerPosM, 0.5 + 0.5 * lightmapYM); + #endif + } else { + vec3 edgeFactor = 0.2 * (0.5 - fract(playerPosM + cameraPosition + worldGeoNormal * 0.01)); + + #ifdef GBUFFERS_WATER + bias *= 0.7; + playerPosM += (1.0 - lightmapYM) * edgeFactor; + #endif + + playerPosM += (1.0 - pow2(pow2(max(glColor.a, lightmapYM)))) * edgeFactor; + } + #endif + } + + playerPosM += bias; + #endif + + vec3 shadowPos = GetShadowPos(playerPosM); + + bool leaves = false; + #ifdef GBUFFERS_TERRAIN + if (subsurfaceMode == 0) { + #if defined PERPENDICULAR_TWEAKS && defined SIDE_SHADOWING + offset *= 1.0 + pow2(absNdotN); + #endif + } else { + float VdotL = dot(nViewPos, lightVec); + float lightFactor = pow(max(VdotL, 0.0), 10.0) * float(isEyeInWater == 0); + if (subsurfaceMode == 1) { + offset = 0.0010235 * lightmapYM + 0.0009765; + shadowPos.z -= max(NdotL * 0.0001, 0.0) * lightmapYM; + subsurfaceHighlight = lightFactor * 0.8; + #ifndef SHADOW_FILTERING + shadowPos.z -= 0.0002; + #endif + } else if (subsurfaceMode == 2) { + leaves = true; + offset = 0.0005235 * lightmapYM + 0.0009765; + shadowPos.z -= 0.000175 * lightmapYM; + subsurfaceHighlight = lightFactor * 0.6; + #ifndef SHADOW_FILTERING + NdotLM = mix(NdotL, NdotLM, 0.5); + #endif + } else { + + } + } + #endif + + shadowMult *= GetShadow(shadowPos, lViewPos, lightmap.y, offset, leaves); + } + + float shadowSmooth = 16.0; + if (shadowLength < shadowSmooth) { + float shadowMixer = max0(shadowLength / shadowSmooth); + + #ifdef GBUFFERS_TERRAIN + if (subsurfaceMode != 0) { + float shadowMixerM = pow2(shadowMixer); + + if (subsurfaceMode == 1) skyLightShadowMult *= mix(0.6 + 0.3 * pow2(noonFactor), 1.0, shadowMixerM); + else skyLightShadowMult *= mix(NdotL * 0.4999 + 0.5, 1.0, shadowMixerM); + + subsurfaceHighlight *= shadowMixer; + } + #endif + + shadowMult = mix(vec3(skyLightShadowMult * shadowMultBeforeLighting), shadowMult, shadowMixer); + } + } + #else + shadowMult *= skyLightShadowMult; + #endif + + #ifdef CLOUD_SHADOWS + vec3 worldPos = playerPos + cameraPosition; + #if defined DO_PIXELATION_EFFECTS && defined PIXELATED_SHADOWS + worldPos = playerPosPixelated + cameraPosition; + #endif + + #ifdef CLOUDS_REIMAGINED + float EdotL = dot(eastVec, lightVec); + float EdotLM = tan(acos(EdotL)); + + #if SUN_ANGLE != 0 + float NVdotLM = tan(acos(dot(northVec, lightVec))); + #endif + + float distToCloudLayer1 = cloudAlt1i - worldPos.y; + vec3 cloudOffset1 = vec3(distToCloudLayer1 / EdotLM, 0.0, 0.0); + #if SUN_ANGLE != 0 + cloudOffset1.z += distToCloudLayer1 / NVdotLM; + #endif + vec2 cloudPos1 = GetRoundedCloudCoord(ModifyTracePos(worldPos + cloudOffset1, cloudAlt1i).xz, 0.35); + float cloudSample = texture2D(gaux4, cloudPos1).b; + cloudSample *= clamp(distToCloudLayer1 * 0.1, 0.0, 1.0); + + #ifdef DOUBLE_REIM_CLOUDS + float distToCloudLayer2 = cloudAlt2i - worldPos.y; + vec3 cloudOffset2 = vec3(distToCloudLayer2 / EdotLM, 0.0, 0.0); + #if SUN_ANGLE != 0 + cloudOffset2.z += distToCloudLayer2 / NVdotLM; + #endif + vec2 cloudPos2 = GetRoundedCloudCoord(ModifyTracePos(worldPos + cloudOffset2, cloudAlt2i).xz, 0.35); + float cloudSample2 = texture2D(gaux4, cloudPos2).b; + cloudSample2 *= clamp(distToCloudLayer2 * 0.1, 0.0, 1.0); + + cloudSample = 1.0 - (1.0 - cloudSample) * (1.0 - cloudSample2); + #endif + + cloudSample *= sqrt3(1.0 - abs(EdotL)); + shadowMult *= 1.0 - 0.85 * cloudSample; + #else + vec2 csPos = worldPos.xz + worldPos.y * 0.25; + csPos.x += syncedTime; + csPos *= 0.000002 * CLOUD_UNBOUND_SIZE_MULT; + + vec2 shadowoffsets[8] = vec2[8]( + vec2( 0.0 , 1.0 ), + vec2( 0.7071, 0.7071), + vec2( 1.0 , 0.0 ), + vec2( 0.7071,-0.7071), + vec2( 0.0 ,-1.0 ), + vec2(-0.7071,-0.7071), + vec2(-1.0 , 0.0 ), + vec2(-0.7071, 0.7071)); + float cloudSample = 0.0; + for (int i = 0; i < 8; i++) { + cloudSample += texture2D(noisetex, csPos + 0.005 * shadowoffsets[i]).b; + } + + shadowMult *= smoothstep1(pow2(min1(cloudSample * 0.2))); + #endif + #endif + + shadowMult *= max(NdotLM * shadowTime, 0.0); + } + #ifdef GBUFFERS_WATER + else { // Low Quality Water + shadowMult = vec3(pow2(lightmapY2) * max(NdotLM * shadowTime, 0.0)); + } + #endif + #endif + + // Blocklight + float lightmapXM; + if (!noSmoothLighting) { + float lightmapXMSteep = pow2(pow2(lightmap.x * lightmap.x)) * (3.8 - 0.6 * vsBrightness); + float lightmapXMCalm = (lightmap.x) * (1.8 + 0.6 * vsBrightness); + lightmapXM = pow(lightmapXMSteep + lightmapXMCalm, 2.25); + } else lightmapXM = pow2(lightmap.x) * lightmap.x * 10.0; + + #if BLOCKLIGHT_FLICKERING > 0 + vec2 flickerNoise = texture2D(noisetex, vec2(frameTimeCounter * 0.06)).rb; + lightmapXM *= mix(1.0, min1(max(flickerNoise.r, flickerNoise.g) * 1.7), pow2(BLOCKLIGHT_FLICKERING * 0.1)); + #endif + + vec3 blockLighting = lightmapXM * blocklightCol; + + #if COLORED_LIGHTING_INTERNAL > 0 + // Prepare + #if defined GBUFFERS_HAND + vec3 voxelPos = SceneToVoxel(vec3(0.0)); + #elif defined GBUFFERS_TEXTURED + vec3 voxelPos = SceneToVoxel(playerPos); + #else + vec3 voxelPos = SceneToVoxel(playerPos); + voxelPos = voxelPos + worldGeoNormal * 0.55; // should be close to 0.5 for ACL_CORNER_LEAK_FIX but 0.5 makes slabs flicker + #endif + + vec3 specialLighting = vec3(0.0); + vec4 lightVolume = vec4(0.0); + if (CheckInsideVoxelVolume(voxelPos)) { + vec3 voxelPosM = clamp01(voxelPos / vec3(voxelVolumeSize)); + lightVolume = GetLightVolume(voxelPosM); + lightVolume = sqrt(lightVolume); + specialLighting = lightVolume.rgb; + } + + // Add extra articial light for blocks that request it + lightmapXM = mix(lightmapXM, 10.0, lightVolume.a); + specialLighting *= 1.0 + 50.0 * lightVolume.a; + + // Color Balance + specialLighting = lightmapXM * 0.13 * DoLuminanceCorrection(specialLighting + blocklightCol * 0.05); + + // Add some extra non-contrasty detail + AddSpecialLightDetail(specialLighting, color.rgb, emission); + + #if COLORED_LIGHT_SATURATION != 100 + specialLighting = mix(blockLighting, specialLighting, COLORED_LIGHT_SATURATION * 0.01); + #endif + + // Serve with distance fade + vec3 absPlayerPosM = abs(playerPos); + #if COLORED_LIGHTING_INTERNAL <= 512 + absPlayerPosM.y *= 2.0; + #elif COLORED_LIGHTING_INTERNAL == 768 + absPlayerPosM.y *= 3.0; + #elif COLORED_LIGHTING_INTERNAL == 1024 + absPlayerPosM.y *= 4.0; + #endif + float maxPlayerPos = max(absPlayerPosM.x, max(absPlayerPosM.y, absPlayerPosM.z)); + float blocklightDecider = pow2(min1(maxPlayerPos / effectiveACLdistance * 2.0)); + //if (heldItemId != 40000 || heldItemId2 == 40000) // Hold spider eye to see vanilla lighting + blockLighting = mix(specialLighting, blockLighting, blocklightDecider); + //if (heldItemId2 == 40000 && heldItemId != 40000) blockLighting = lightVolume.rgb; // Hold spider eye to see light volume + #endif + + #if HELD_LIGHTING_MODE >= 1 + float heldLight = heldBlockLightValue; float heldLight2 = heldBlockLightValue2; + + #ifndef IS_IRIS + if (heldLight > 15.1) heldLight = 0.0; + if (heldLight2 > 15.1) heldLight2 = 0.0; + #endif + + #if COLORED_LIGHTING_INTERNAL == 0 + vec3 heldLightCol = blocklightCol; vec3 heldLightCol2 = blocklightCol; + + if (heldItemId == 45032) heldLight = 15; if (heldItemId2 == 45032) heldLight2 = 15; // Lava Bucket + #else + vec3 heldLightCol = GetSpecialBlocklightColor(heldItemId - 44000).rgb; + vec3 heldLightCol2 = GetSpecialBlocklightColor(heldItemId2 - 44000).rgb; + + if (heldItemId == 45032) { heldLightCol = lavaSpecialLightColor; heldLight = 15; } // Lava Bucket + if (heldItemId2 == 45032) { heldLightCol2 = lavaSpecialLightColor; heldLight2 = 15; } + + #if COLORED_LIGHT_SATURATION != 100 + heldLightCol = mix(blocklightCol, heldLightCol, COLORED_LIGHT_SATURATION * 0.01); + heldLightCol2 = mix(blocklightCol, heldLightCol2, COLORED_LIGHT_SATURATION * 0.01); + #endif + #endif + + vec3 playerPosLightM = playerPos + relativeEyePosition; + playerPosLightM.y += 0.7; + float lViewPosL = length(playerPosLightM) + 6.0; + #if HELD_LIGHTING_MODE == 1 + lViewPosL *= 1.5; + #endif + + heldLight = pow2(pow2(heldLight * 0.47 / lViewPosL)); + heldLight2 = pow2(pow2(heldLight2 * 0.47 / lViewPosL)); + + vec3 heldLighting = pow2(heldLight * DoLuminanceCorrection(heldLightCol + 0.001)) + + pow2(heldLight2 * DoLuminanceCorrection(heldLightCol2 + 0.001)); + + #if COLORED_LIGHTING_INTERNAL > 0 + AddSpecialLightDetail(heldLighting, color.rgb, emission); + #endif + + #ifdef GBUFFERS_HAND + blockLighting *= 0.5; + heldLighting *= 2.0; + #endif + #endif + + // Minimum Light + #if !defined END && MINIMUM_LIGHT_MODE > 0 + #if MINIMUM_LIGHT_MODE == 1 + vec3 minLighting = vec3(0.0038); + #elif MINIMUM_LIGHT_MODE == 2 + vec3 minLighting = vec3(0.005625 + vsBrightness * 0.043); + #elif MINIMUM_LIGHT_MODE == 3 + vec3 minLighting = vec3(0.0625); + #elif MINIMUM_LIGHT_MODE >= 4 + vec3 minLighting = vec3(0.07 * pow2(MINIMUM_LIGHT_MODE - 2.5)); + #endif + minLighting *= vec3(0.45, 0.475, 0.6); + minLighting *= 1.0 - lightmapYM; + #else + vec3 minLighting = vec3(0.0); + #endif + + minLighting += nightVision * vec3(0.5, 0.5, 0.75); + + // Lighting Tweaks + #ifdef OVERWORLD + ambientMult = mix(lightmapYM, pow2(lightmapYM) * lightmapYM, rainFactor); + + #if SHADOW_QUALITY == -1 + float tweakFactor = 1.0 + 0.6 * (1.0 - pow2(pow2(pow2(noonFactor)))); + lightColorM /= tweakFactor; + ambientMult *= mix(tweakFactor, 1.0, 0.5 * NdotUmax0); + #endif + + #if AMBIENT_MULT != 100 + #define AMBIENT_MULT_M (AMBIENT_MULT - 100) * 0.006 + vec3 shadowMultP = shadowMult / (0.1 + 0.9 * sqrt2(max0(NdotLM))); + ambientMult *= 1.0 + pow2(pow2(max0(1.0 - dot(shadowMultP, shadowMultP)))) * AMBIENT_MULT_M * + (0.5 + 0.2 * sunFactor + 0.8 * noonFactor) * (1.0 - rainFactor * 0.5); + #endif + + if (isEyeInWater != 1) { + float lxFactor = (sunVisibility2 * 0.4 + (0.6 - 0.6 * pow2(invNoonFactor))) * (6.0 - 5.0 * rainFactor); + lxFactor *= lightmapY2 + lightmapY2 * 2.0 * pow2(shadowMult.r); + lxFactor = max0(lxFactor - emission * 1000000.0); + blockLighting *= pow(lightmapXM / 60.0 + 0.001, 0.09 * lxFactor); + + // Less light in the distance / more light closer to the camera during rain or night to simulate thicker fog + float rainLF = 0.1 * rainFactor; + float lightFogTweaks = 1.0 + max0(96.0 - lViewPos) * (0.002 * (1.0 - sunVisibility2) + 0.0104 * rainLF) - rainLF; + ambientMult *= lightFogTweaks; + lightColorM *= lightFogTweaks; + } + #endif + + #ifdef GBUFFERS_HAND + ambientMult *= 1.3; // To improve held map visibility + #endif + + // Directional Shading + float directionShade = 1.0; + #ifdef DIRECTIONAL_SHADING + if (!noDirectionalShading) { + float NdotE = dot(normalM, eastVec); + float absNdotE = abs(NdotE); + float absNdotE2 = pow2(absNdotE); + + #if !defined NETHER + float NdotUM = 0.75 + NdotU * 0.25; + #else + float NdotUM = 0.75 + abs(NdotU + 0.5) * 0.16666; + #endif + float NdotNM = 1.0 + 0.075 * absNdotN; + float NdotEM = 1.0 - 0.1 * absNdotE2; + directionShade = NdotUM * NdotEM * NdotNM; + + #ifdef OVERWORLD + lightColorM *= 1.0 + absNdotE2 * 0.75; + #elif defined NETHER + directionShade *= directionShade; + ambientColorM += lavaLightColor * pow2(absNdotN * 0.5 + max0(-NdotU)) * (0.7 + 0.35 * vsBrightness); + #endif + + #if defined CUSTOM_PBR || defined GENERATED_NORMALS + float cpbrAmbFactor = NdotN * NPdotU; + cpbrAmbFactor = 1.0 - 0.3 * cpbrAmbFactor; + ambientColorM *= cpbrAmbFactor; + minLighting *= cpbrAmbFactor; + #endif + + #if defined OVERWORLD && defined PERPENDICULAR_TWEAKS && defined SIDE_SHADOWING + // Fake bounced light + ambientColorM = mix(ambientColorM, lightColorM, (0.05 + 0.03 * subsurfaceMode) * absNdotN * lightmapY2); + + // Get a bit more natural looking lighting during noon + lightColorM *= 1.0 + max0(1.0 - subsurfaceMode) * pow(noonFactor, 20.0) * (pow2(absNdotN) - absNdotE2 * 0.1); + #endif + } + #endif + + #ifdef DREAM_TWEAKED_LIGHTING + ambientColorM = mix(ambientColorM, lightColorM, 0.25) * 1.5; + lightColorM = lightColorM * 0.3; + #endif + + // Scene Lighting Stuff + vec3 sceneLighting = lightColorM * shadowMult + ambientColorM * ambientMult; + float dotSceneLighting = dot(sceneLighting, sceneLighting); + + #if HELD_LIGHTING_MODE >= 1 + blockLighting = sqrt(pow2(blockLighting) + heldLighting); + #endif + + blockLighting *= XLIGHT_I; + + #ifdef LIGHT_COLOR_MULTS + sceneLighting *= lightColorMult; + #endif + #ifdef MOON_PHASE_INF_LIGHT + sceneLighting *= moonPhaseInfluence; + #endif + + // Vanilla Ambient Occlusion + float vanillaAO = 1.0; + #if VANILLAAO_I > 0 + vanillaAO = glColor.a; + + #if defined DO_PIXELATION_EFFECTS && defined PIXELATED_AO + vanillaAO = TexelSnap(vanillaAO, pixelationOffset); + #endif + + if (subsurfaceMode != 0) vanillaAO = mix(min1(vanillaAO * 1.15), 1.0, shadowMult.g); + else if (!noVanillaAO) { + #ifdef GBUFFERS_TERRAIN + vanillaAO = min1(vanillaAO + 0.08); + #ifdef OVERWORLD + vanillaAO = pow( + pow1_5(vanillaAO), + 1.0 + dotSceneLighting * 0.02 + NdotUmax0 * (0.15 + 0.25 * pow2(noonFactor * pow2(lightmapY2))) + ); + #elif defined NETHER + vanillaAO = pow( + pow1_5(vanillaAO), + 1.0 + NdotUmax0 * 0.5 + ); + #else + vanillaAO = pow( + vanillaAO, + 0.75 + NdotUmax0 * 0.25 + ); + #endif + #endif + vanillaAO = vanillaAO * 0.9 + 0.1; + + #if VANILLAAO_I != 100 + #define VANILLAAO_IM VANILLAAO_I * 0.01 + vanillaAO = pow(vanillaAO, VANILLAAO_IM); + #endif + } + #endif + + // Light Highlight + vec3 lightHighlight = vec3(0.0); + #ifdef LIGHT_HIGHLIGHT + float specularHighlight = GGX(normalM, nViewPos, lightVec, NdotLmax0, smoothnessG); + + specularHighlight *= highlightMult; + + lightHighlight = isEyeInWater != 1 ? shadowMult : pow(shadowMult, vec3(0.25)) * 0.35; + lightHighlight *= (subsurfaceHighlight + specularHighlight) * highlightColor; + + #ifdef LIGHT_COLOR_MULTS + lightHighlight *= lightColorMult; + #endif + #ifdef MOON_PHASE_INF_REFLECTION + lightHighlight *= pow2(moonPhaseInfluence); + #endif + #endif + + // Mix Colors + vec3 finalDiffuse = pow2(directionShade * vanillaAO) * (blockLighting + pow2(sceneLighting) + minLighting) + pow2(emission); + finalDiffuse = sqrt(max(finalDiffuse, vec3(0.0))); // sqrt() for a bit more realistic light mix, max() to prevent NaNs + + // Apply Lighting + color.rgb *= finalDiffuse; + color.rgb += lightHighlight; + color.rgb *= pow2(1.0 - darknessLightFactor); +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/lighting/shadowSampling.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/lighting/shadowSampling.glsl new file mode 100644 index 0000000..72223da --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/lighting/shadowSampling.glsl @@ -0,0 +1,118 @@ +vec3 GetShadowPos(vec3 playerPos) { + vec3 shadowPos = PlayerToShadow(playerPos); + float distb = sqrt(shadowPos.x * shadowPos.x + shadowPos.y * shadowPos.y); + float distortFactor = distb * shadowMapBias + (1.0 - shadowMapBias); + shadowPos.xy /= distortFactor; + shadowPos.z *= 0.2; + return shadowPos * 0.5 + 0.5; +} + +vec3 SampleShadow(vec3 shadowPos, float colorMult, float colorPow) { + float shadow0 = shadow2D(shadowtex0, vec3(shadowPos.st, shadowPos.z)).x; + + vec3 shadowcol = vec3(0.0); + if (shadow0 < 1.0) { + float shadow1 = shadow2D(shadowtex1, vec3(shadowPos.st, shadowPos.z)).x; + if (shadow1 > 0.9999) { + shadowcol = texture2D(shadowcolor0, shadowPos.st).rgb * shadow1; + + shadowcol *= colorMult; + shadowcol = pow(shadowcol, vec3(colorPow)); + } + } + + return shadowcol * (1.0 - shadow0) + shadow0; +} + +float InterleavedGradientNoiseForShadows() { + float n = 52.9829189 * fract(0.06711056 * gl_FragCoord.x + 0.00583715 * gl_FragCoord.y); + #if !defined GBUFFERS_ENTITIES && !defined GBUFFERS_HAND && !defined GBUFFERS_TEXTURED && defined TAA + return fract(n + goldenRatio * mod(float(frameCounter), 3600.0)); + #else + return fract(n); + #endif +} + +vec2 offsetDist(float x, int s) { + float n = fract(x * 2.427) * 3.1415; + return vec2(cos(n), sin(n)) * 1.4 * x / s; +} + +vec3 SampleTAAFilteredShadow(vec3 shadowPos, float lViewPos, float offset, bool leaves, float colorMult, float colorPow) { + vec3 shadow = vec3(0.0); + float gradientNoise = InterleavedGradientNoiseForShadows(); + + #if SHADOW_QUALITY == 0 + int shadowSamples = 0; // We don't use SampleTAAFilteredShadow on Shadow Quality 0 + #elif SHADOW_QUALITY == 1 + int shadowSamples = 1; + #elif SHADOW_QUALITY == 2 || SHADOW_QUALITY == 3 + int shadowSamples = 2; + #elif SHADOW_QUALITY == 4 + int shadowSamples = 2; + if (lViewPos < 10.0) shadowSamples = 6; + #elif SHADOW_QUALITY == 5 + int shadowSamples = 6; + if (lViewPos < 10.0) shadowSamples = 12; + #endif + + #if !defined GBUFFERS_ENTITIES && !defined GBUFFERS_HAND && !defined GBUFFERS_TEXTURED + offset *= 1.3875; + #else + shadowSamples *= 2; + offset *= 0.69375; + #endif + + float shadowPosZM = shadowPos.z; + for (int i = 0; i < shadowSamples; i++) { + vec2 offset2 = offsetDist(gradientNoise + i, shadowSamples) * offset; + if (leaves) shadowPosZM = shadowPos.z - 0.12 * offset * (gradientNoise + i) / shadowSamples; + shadow += SampleShadow(vec3(shadowPos.st + offset2, shadowPosZM), colorMult, colorPow); + shadow += SampleShadow(vec3(shadowPos.st - offset2, shadowPosZM), colorMult, colorPow); + } + + shadow /= shadowSamples * 2.0; + + return shadow; +} + +vec2 shadowOffsets[4] = vec2[4]( + vec2( 1.0, 0.0), + vec2( 0.0, 1.0), + vec2(-1.0, 0.0), + vec2( 0.0,-1.0)); + +vec3 SampleBasicFilteredShadow(vec3 shadowPos, float offset) { + float shadow = 0.0; + + for (int i = 0; i < 4; i++) { + shadow += shadow2D(shadowtex0, vec3(offset * shadowOffsets[i] + shadowPos.st, shadowPos.z)).x; + } + + return vec3(shadow * 0.25); +} + +vec3 GetShadow(vec3 shadowPos, float lViewPos, float lightmapY, float offset, bool leaves) { + #if SHADOW_QUALITY > 0 + #if ENTITY_SHADOWS_DEFINE == -1 && defined GBUFFERS_BLOCK + offset *= 4.0; + #else + #ifdef OVERWORLD + offset *= 1.0 + rainFactor2 * 2.0; + #else + offset *= 3.0; + #endif + #endif + #endif + + float colorMult = 1.2 + 3.8 * lightmapY; // Natural strength is 5.0 + float colorPow = 1.1 - 0.6 * pow2(pow2(pow2(lightmapY))); + + #if SHADOW_QUALITY >= 1 + vec3 shadow = SampleTAAFilteredShadow(shadowPos, lViewPos, offset, leaves, colorMult, colorPow); + #else + vec3 shadow = SampleBasicFilteredShadow(shadowPos, offset); + #endif + + return shadow; +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialHandling/blockEntityMaterials.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialHandling/blockEntityMaterials.glsl new file mode 100644 index 0000000..01ef9ca --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialHandling/blockEntityMaterials.glsl @@ -0,0 +1,107 @@ +if (blockEntityId < 60028) { + if (blockEntityId < 60012) { + if (blockEntityId < 60004) { + if (blockEntityId == 10548) { // Enchanting Table:Book + smoothnessG = pow2(color.g) * 0.35; + + if (color.b < 0.0001 && color.r > color.g) { + emission = color.g * 4.0; + } + } else if (blockEntityId == 60000) { // + + } + } else { + if (blockEntityId == 60004) { // Signs + noSmoothLighting = true; + + if (glColor.r + glColor.g + glColor.b <= 2.99 || lmCoord.x > 0.999) { // Sign Text + #include "/lib/materials/specificMaterials/others/signText.glsl" + } + + #ifdef COATED_TEXTURES + noiseFactor = 0.66; + #endif + } else /*if (blockEntityId == 60008)*/ { // Chest + noSmoothLighting = true; + + smoothnessG = pow2(color.g); + + #ifdef COATED_TEXTURES + noiseFactor = 0.66; + #endif + } + } + } else { + if (blockEntityId < 60020) { + if (blockEntityId == 60012) { // Ender Chest + noSmoothLighting = true; + + float factor = min(pow2(color.g), 0.25); + smoothnessG = factor * 2.0; + + if (color.g > color.r || color.b > color.g) + emission = pow2(factor) * 20.0; + emission += 0.35; + + #ifdef COATED_TEXTURES + noiseFactor = 0.66; + #endif + } else /*if (blockEntityId == 60016)*/ { // Shulker Box+, Banner+, Head+, Bed+ + noSmoothLighting = true; + #ifdef COATED_TEXTURES + noiseFactor = 0.2; + #endif + } + } else { + if (blockEntityId == 60020) { // Conduit + noSmoothLighting = true; + lmCoordM.x = 0.9; + + if (color.b > color.r) { // Conduit:Wind, Conduit:Blue Pixels of The Eye + emission = color.r * 16.0; + } else if (color.r > color.b * 2.5) { // Conduit:Red Pixels of The Eye + emission = 20.0; + color.rgb *= vec3(1.0, 0.25, 0.1); + } + } else /*if (blockEntityId == 60024)*/ { // End Portal, End Gateway + #ifdef SPECIAL_PORTAL_EFFECTS + #include "/lib/materials/specificMaterials/others/endPortalEffect.glsl" + #endif + } + } + } +} else { + if (blockEntityId < 60044) { + if (blockEntityId < 60036) { + if (blockEntityId == 60028) { // Bell + if (color.r + color.g > color.b + 0.5) { // Bell:Golden Part + #include "/lib/materials/specificMaterials/terrain/goldBlock.glsl" + } else { + #include "/lib/materials/specificMaterials/terrain/stone.glsl" + } + } else /*if (blockEntityId == 60032)*/ { // + + } + } else { + if (blockEntityId == 60036) { // + + } else /*if (blockEntityId == 60040)*/ { // + + } + } + } else { + if (blockEntityId < 60052) { + if (blockEntityId == 60044) { // + + } else /*if (blockEntityId == 60048)*/ { // + + } + } else { + if (blockEntityId == 60052) { // + + } else if (blockEntityId == 60056) { // + + } + } + } +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialHandling/customMaterials.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialHandling/customMaterials.glsl new file mode 100644 index 0000000..b480b24 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialHandling/customMaterials.glsl @@ -0,0 +1,157 @@ +#ifdef POM + #include "/lib/materials/materialMethods/pomEffects.glsl" +#endif + +#include "/lib/materials/materialMethods/customEmission.glsl" + +void GetCustomMaterials(inout vec4 color, inout vec3 normalM, inout vec2 lmCoordM, inout float NdotU, inout vec3 shadowMult, inout float smoothnessG, inout float smoothnessD, inout float highlightMult, inout float emission, inout float materialMask, vec3 viewPos, float lViewPos) { + vec2 texCoordM = texCoord; + + #ifdef POM + float parallaxFade, parallaxTexDepth; + vec2 parallaxLocalCoord; + vec3 parallaxTraceCoordDepth; + vec4 normalMap; + + #if defined GBUFFERS_TERRAIN + bool skipPom = (mat == 20000); + #elif defined GBUFFERS_BLOCK + bool skipPom = (blockEntityId == 20000); + #else + bool skipPom = false; + #endif + + if (!skipPom) { + texCoordM = vTexCoord.xy * vTexCoordAM.zw + vTexCoordAM.xy; + + parallaxFade = pow2(lViewPos / POM_DISTANCE); // Still enabled to test: Lava, Painting + #ifdef GBUFFERS_ENTITIES + if (entityId == 50008) parallaxFade = 1.1; // Item Frame, Glow Item Frame + #endif + #ifdef GBUFFERS_BLOCK + if (blockEntityId == 60004) parallaxFade = 1.1; // Signs + #endif + #ifdef GBUFFERS_HAND + if (heldItemId == 40004 || heldItemId2 == 40004) parallaxFade = 1.1; // Filled Map + #endif + + parallaxTraceCoordDepth = vec3(texCoordM, 1.0); + parallaxLocalCoord = vTexCoord.st; + + normalMap = ReadNormal(vTexCoord.st); + parallaxFade += pow(normalMap.a, 64.0); + + if (parallaxFade < 1.0) { + float dither = Bayer64(gl_FragCoord.xy); + #ifdef TAA + dither = fract(dither + goldenRatio * mod(float(frameCounter), 3600.0)); + #endif + + parallaxLocalCoord = GetParallaxCoord(parallaxFade, dither, texCoordM, parallaxTexDepth, parallaxTraceCoordDepth); + + normalMap = textureGrad(normals, texCoordM, dcdx, dcdy); + color = textureGrad(tex, texCoordM, dcdx, dcdy); + #if !defined GBUFFERS_ENTITIES && !defined GBUFFERS_BLOCK + color.rgb *= glColor.rgb; + #else + color *= glColor; + #endif + + shadowMult *= GetParallaxShadow(parallaxFade, dither, normalMap.a, parallaxLocalCoord, lightVec, tbnMatrix); + } + } + #endif + + // Normal Map + #if NORMAL_MAP_STRENGTH != 0 + #ifdef POM + else normalMap = texture2D(normals, texCoordM); + #else + vec4 normalMap = texture2D(normals, texCoordM); + #endif + + normalM = normalMap.xyz; + normalM += vec3(0.5, 0.5, 0.0); + normalM = pow(normalM, vec3(NORMAL_MAP_STRENGTH * 0.007)); // 70% strength by default + normalM -= vec3(0.5, 0.5, 0.0); + normalM = normalM * 2.0 - 1.0; + + #if RP_MODE == 3 // labPBR + if (normalM.x + normalM.y > -1.999) { + if (length(normalM.xy) > 1.0) normalM.xy = normalize(normalM.xy); + normalM.z = sqrt(1.0 - dot(normalM.xy, normalM.xy)); + normalM.xyz = normalize(clamp(normalM.xyz, vec3(-1.0), vec3(1.0))); + } else normalM = vec3(0.0, 0.0, 1.0); + #endif + + #if defined POM && POM_QUALITY >= 128 && POM_LIGHTING_MODE == 2 + if (!skipPom) { + float slopeThreshold = max(1.0 / POM_QUALITY, 1.0/255.0); + if (parallaxTexDepth - parallaxTraceCoordDepth.z > slopeThreshold) { + vec3 slopeNormal = GetParallaxSlopeNormal(parallaxLocalCoord, parallaxTraceCoordDepth.z, viewVector); + normalM = mix(normalM, slopeNormal, 0.5 * pow2(max0(1.0 - parallaxFade * 2.0))); + } + } + #endif + + normalM = clamp(normalize(normalM * tbnMatrix), vec3(-1.0), vec3(1.0)); + + NdotU = dot(normalM, upVec); + NdotUmax0 = max0(NdotU); + #endif + + #if DIRECTIONAL_BLOCKLIGHT > 0 + mat3 lightmapTBN = mat3(normalize(dFdx(viewPos)), normalize(dFdy(viewPos)), vec3(0.0)); + lightmapTBN[2] = cross(lightmapTBN[0], lightmapTBN[1]); + + float lmCoordXDir = lmCoordM.x; + vec2 deriv = vec2(dFdx(lmCoordXDir), dFdy(lmCoordXDir)) * 256.0; + vec3 dir = normalize(vec3(deriv.x * lightmapTBN[0] + + 0.0005 * lightmapTBN[2] + + deriv.y * lightmapTBN[1])); + + float pwr = clamp(dot(normalM, dir), -1.0, 1.0); + float absPwr = abs(pwr); + if (absPwr > 0.0) pwr = pow(absPwr, 9.0 / DIRECTIONAL_BLOCKLIGHT) * sign(pwr) * lmCoordXDir; + if (length(deriv) > 0.001) lmCoordXDir = pow(max(lmCoordXDir, 0.00001), 1.0 - pwr); + + lmCoordM.x = mix(lmCoordM.x, lmCoordXDir, 0.01 * max0(100.0 - pow2(lViewPos))); + #endif + + // Specular Map + vec4 specularMap = texture2D(specular, texCoordM); + + float smoothnessM = pow2(specularMap.r); + smoothnessG = smoothnessM; + smoothnessD = smoothnessM; + highlightMult = 1.0 + 2.5 * specularMap.r; + + #if RP_MODE == 3 // labPBR + highlightMult *= 0.5 + 0.5 * specularMap.g; + #endif + + emission = GetCustomEmission(specularMap, texCoordM); + + #ifndef GBUFFERS_WATER + #if defined GBUFFERS_ENTITIES || defined GBUFFERS_HAND + if ( + materialMask > OSIEBCA * 240.1 + && specularMap.g < 0.01 + ) return; + #endif + + #if RP_MODE == 2 // seuspbr + materialMask = specularMap.g * OSIEBCA * 240.0; + + color.rgb *= 1.0 - 0.25 * specularMap.g; + #elif RP_MODE == 3 // labPBR + if (specularMap.g < OSIEBCA * 229.1) { + materialMask = specularMap.g * OSIEBCA * 214.0; + } else { + materialMask = specularMap.g - OSIEBCA * 15.0; + + color.rgb *= 0.75; + } + #endif + #endif +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialHandling/deferredMaterials.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialHandling/deferredMaterials.glsl new file mode 100644 index 0000000..6aae0f2 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialHandling/deferredMaterials.glsl @@ -0,0 +1,72 @@ +if (abs(materialMaskInt - 149.5) < 50.0) { // Entity Reflection Handling (see common.glsl for details) + materialMaskInt -= 100; + entityOrHand = true; +} + +if (materialMaskInt != 0) { + if (materialMaskInt < 9) { + if (materialMaskInt < 5) { + if (materialMaskInt < 3) { + if (materialMaskInt == 1) { // Intense Fresnel + intenseFresnel = 1.0; + } else /*if (materialMaskInt == 2)*/ { // Copper Fresnel + intenseFresnel = 1.0; + reflectColor = mix(vec3(0.5, 0.75, 0.5), vec3(1.0, 0.45, 0.3), sqrt1(smoothnessD)); + } + } else { + if (materialMaskInt == 3) { // Gold Fresnel + intenseFresnel = 1.0; + reflectColor = vec3(1.0, 0.8, 0.5); + } else /*if (materialMaskInt == 4)*/ { // End Portal + + } + } + } else { + if (materialMaskInt < 7) { + if (materialMaskInt == 5) { // Redstone Fresnel + intenseFresnel = 1.0; + reflectColor = vec3(1.0, 0.3, 0.2); + } else /*if (materialMaskInt == 6)*/ { // + + } + } else { + if (materialMaskInt == 7) { // + + } else /*if (materialMaskInt == 8)*/ { // + + } + } + } + } else { + if (materialMaskInt < 13) { + if (materialMaskInt < 11) { + if (materialMaskInt == 9) { // + + } else /*if (materialMaskInt == 10)*/ { // + + } + } else { + if (materialMaskInt == 11) { // + + } else /*if (materialMaskInt == 12)*/ { // + + } + } + } else { + if (materialMaskInt < 15) { + if (materialMaskInt == 13) { // + + } else /*if (materialMaskInt == 14)*/ { // + + } + } else { + if (materialMaskInt == 254) { // No SSAO, No TAA + ssao = 1.0; + entityOrHand = true; + } else /*if (materialMaskInt == "15 to 255 except 254")*/ { // + + } + } + } + } +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialHandling/entityMaterials.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialHandling/entityMaterials.glsl new file mode 100644 index 0000000..09dc65d --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialHandling/entityMaterials.glsl @@ -0,0 +1,209 @@ +if (entityId < 50064) { + if (entityId < 50032) { + if (entityId < 50016) { + if (entityId < 50008) { + if (entityId == 50000) { // End Crystal + lmCoordM.x *= 0.7; + + if (color.g * 1.2 < color.r) { + emission = 12.0 * color.g; + color.r *= 1.1; + } + } else if (entityId == 50004) { // Lightning Bolt + #include "/lib/materials/specificMaterials/entities/lightningBolt.glsl" + } + } else { + if (entityId == 50008) { // Item Frame, Glow Item Frame + noSmoothLighting = true; + } else /*if (entityId == 50012)*/ { // Iron Golem + #include "/lib/materials/specificMaterials/terrain/ironBlock.glsl" + + smoothnessD *= 0.4; + } + } + } else { + if (entityId < 50024) { + if (entityId == 50016) { // Player + if (entityColor.a < 0.001) { + #ifdef COATED_TEXTURES + noiseFactor = 0.5; + #endif + + if (CheckForColor(texelFetch(tex, ivec2(0, 0), 0).rgb, vec3(23, 46, 92))) { + for (int i = 63; i >= 56; i--) { + vec3 dif = color.rgb - texelFetch(tex, ivec2(i, 0), 0).rgb; + if (dif == clamp(dif, vec3(-0.001), vec3(0.001))) { + emission = 2.0 * texelFetch(tex, ivec2(i, 1), 0).r; + } + } + } + } + } else /*if (entityId == 50020)*/ { // Blaze + lmCoordM = vec2(0.9, 0.0); + emission = min(color.r, 0.7) * 1.4; + + float dotColor = dot(color.rgb, color.rgb); + if (abs(dotColor - 1.5) > 1.4) { + emission = 5.0; + } + } + } else { + if (entityId == 50024) { // Creeper + emission = max0(color.b - color.g - color.r) * 10.0; + } else /*if (entityId == 50028)*/ { // Drowned + if (atlasSize.x < 900) { + if (CheckForColor(color.rgb, vec3(143, 241, 215)) || + CheckForColor(color.rgb, vec3( 49, 173, 183)) || + CheckForColor(color.rgb, vec3(101, 224, 221))) emission = 2.5; + } + } + } + } + } else { + if (entityId < 50048) { + if (entityId < 50040) { + if (entityId == 50032) { // Guardian + vec3 absDif = abs(vec3(color.r - color.g, color.g - color.b, color.r - color.b)); + float maxDif = max(absDif.r, max(absDif.g, absDif.b)); + if (maxDif < 0.1 && color.b > 0.5 && color.b < 0.88) { + emission = pow2(pow1_5(color.b)) * 5.0; + color.rgb *= color.rgb; + } + } else /*if (entityId == 50036)*/ { // Elder Guardian + if (CheckForColor(color.rgb, vec3(203, 177, 165)) || + CheckForColor(color.rgb, vec3(214, 155, 126))) { + emission = pow2(pow1_5(color.b)) * 10.0; + color.r *= 1.2; + } + } + } else { + if (entityId == 50040) { // Endermite + if (CheckForColor(color.rgb, vec3(87, 23, 50))) { + emission = 8.0; + color.rgb *= color.rgb; + } + } else /*if (entityId == 50044)*/ { // Ghast + if (entityColor.a < 0.001) + emission = max0(color.r - color.g - color.b) * 6.0; + } + } + } else { + if (entityId < 50056) { + if (entityId == 50048) { // Glow Squid + lmCoordM.x = 0.0; + float dotColor = dot(color.rgb, color.rgb); + emission = pow2(pow2(min(dotColor * 0.65, 1.5))) + 0.45; + } else /*if (entityId == 50052)*/ { // Magma Cube + emission = color.g * 6.0; + } + } else { + if (entityId == 50056) { // Stray + if (CheckForColor(color.rgb, vec3(230, 242, 246)) && texCoord.y > 0.35) + emission = 2.5; + } else /*if (entityId == 50060)*/ { // Vex + lmCoordM = vec2(0.0); + emission = pow2(pow2(color.r)) * 3.5 + 0.5; + color.a *= color.a; + } + } + } + } +} else { + if (entityId < 50096) { + if (entityId < 50080) { + if (entityId < 50072) { + if (entityId == 50064) { // Witch + emission = 2.0 * color.g * float(color.g * 1.5 > color.b + color.r); + } else /*if (entityId == 50068)*/ { // Wither, Wither Skull + lmCoordM.x = 0.9; + emission = 3.0 * float(dot(color.rgb, color.rgb) > 1.0); + } + } else { + if (entityId == 50072) { // Experience Orb + emission = 7.5; + + color.rgb *= color.rgb; + } else /*if (entityId == 50076)*/ { // Boats + playerPos.y += 0.38; // to avoid water shadow and the black inner shadow bug + } + } + } else { + if (entityId < 50088) { + if (entityId == 50080) { // Allay + if (atlasSize.x < 900) { + lmCoordM = vec2(0.0); + emission = float(color.r > 0.9 && color.b > 0.9) * 5.0 + color.g; + } else { + lmCoordM.x = 0.8; + } + } else /*if (entityId == 50084)*/ { // Slime, Chicken + //only code is in Vertex Shader for now + } + } else { + if (entityId == 50088) { // Entity Flame (Iris Feature) + emission = 1.3; + } else /*if (entityId == 50092)*/ { // Trident Entity + #ifdef IS_IRIS + // Only on Iris, because otherwise it would be inconsistent with the Trident item + #include "/lib/materials/specificMaterials/others/trident.glsl" + #endif + } + } + } + } else { + if (entityId < 50112) { + if (entityId < 50104) { + if (entityId == 50096) { // Minecart++ + if (atlasSize.x < 900 && color.r * color.g * color.b + color.b > 0.3) { + #include "/lib/materials/specificMaterials/terrain/ironBlock.glsl" + + smoothnessD *= 0.6; + } + } else /*if (entityId == 50100)*/ { // Bogged + if (CheckForColor(color.rgb, vec3(239, 254, 194))) + emission = 2.5; + } + } else { + if (entityId == 50104) { // Piglin++, Hoglin+ + if (atlasSize.x < 900) { + if (CheckForColor(color.rgb, vec3(255)) || CheckForColor(color.rgb, vec3(255, 242, 246))) { + vec2 tSize = textureSize(tex, 0); + vec4 checkRightmostColor = texelFetch(tex, ivec2(texCoord * tSize) + ivec2(1, 0), 0); + if ( + CheckForColor(checkRightmostColor.rgb, vec3(201, 130, 101)) || + CheckForColor(checkRightmostColor.rgb, vec3(241, 158, 152)) || + CheckForColor(checkRightmostColor.rgb, vec3(223, 127, 119)) || + CheckForColor(checkRightmostColor.rgb, vec3(241, 158, 152)) || + CheckForColor(checkRightmostColor.rgb, vec3(165, 99, 80)) || + CheckForColor(checkRightmostColor.rgb, vec3(213, 149, 122)) || + CheckForColor(checkRightmostColor.rgb, vec3(255)) + ) { + emission = 1.0; + } + } + } + } else /*if (entityId == 50108)*/ { // Creaking + if (color.r > 0.7 && color.r > color.g * 1.2 && color.g > color.b * 2.0) { // Eyes + lmCoordM.x = 0.5; + emission = 5.0 * color.g; + color.rgb *= color.rgb; + } + } + } + } else { + if (entityId < 50120) { + if (entityId == 50112) { // + + } else /*if (entityId == 50116)*/ { // + + } + } else { + if (entityId == 50120) { // + + } else /*if (entityId == 50124)*/ { // + + } + } + } + } +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialHandling/irisMaterials.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialHandling/irisMaterials.glsl new file mode 100644 index 0000000..4c284c4 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialHandling/irisMaterials.glsl @@ -0,0 +1,226 @@ +int mat = currentRenderedItemId; + +#ifdef GBUFFERS_HAND + float lViewPos = 0.0; +#endif + +int subsurfaceMode; +bool noDirectionalShading, noVanillaAO, centerShadowBias; +float noPuddles; + +if (currentRenderedItemId < 45000) { + #include "/lib/materials/materialHandling/terrainMaterials.glsl" +} else + +if (currentRenderedItemId < 45064) { + if (currentRenderedItemId < 45032) { + if (currentRenderedItemId < 45016) { + if (currentRenderedItemId < 45008) { + if (currentRenderedItemId == 45000) { // Armor Trims + smoothnessG = 0.5; + highlightMult = 2.0; + smoothnessD = 0.5; + + #ifdef GLOWING_ARMOR_TRIM + emission = 1.0; + #endif + } else if (currentRenderedItemId == 45004) { // Wooden Tools, Bow, Fishing Rod + #include "/lib/materials/specificMaterials/planks/sprucePlanks.glsl" + smoothnessG = min(smoothnessG, 0.4); + smoothnessD = smoothnessG; + } + } else { + if (currentRenderedItemId == 45008) { // Stone Tools + if (CheckForStick(color.rgb)) { + #include "/lib/materials/specificMaterials/planks/sprucePlanks.glsl" + } else { + #include "/lib/materials/specificMaterials/terrain/stone.glsl" + } + } else /*if (currentRenderedItemId == 45012)*/ { // Iron Tools, Iron Armor, Iron Ingot, Iron Nugget, Iron Horse Armor, Flint and Steel, Flint, Spyglass, Shears, Chainmail Armor + if (CheckForStick(color.rgb)) { + #include "/lib/materials/specificMaterials/planks/sprucePlanks.glsl" + } else { + #include "/lib/materials/specificMaterials/terrain/ironBlock.glsl" + } + } + } + } else { + if (currentRenderedItemId < 45024) { + if (currentRenderedItemId == 45016) { // Golden Tools, Golden Armor, Gold Ingot, Gold Nugget, Golden Apple, Enchanted Golden Apple, Golden Carrot, Golden Horse Armor, Copper Ingot + if (CheckForStick(color.rgb)) { + #include "/lib/materials/specificMaterials/planks/sprucePlanks.glsl" + } else { + #include "/lib/materials/specificMaterials/terrain/goldBlock.glsl" + } + } else /*if (currentRenderedItemId == 45020)*/ { // Diamond Tools, Diamond Armor, Diamond, Diamond Horse Armor, Emerald + if (CheckForStick(color.rgb)) { + #include "/lib/materials/specificMaterials/planks/sprucePlanks.glsl" + } else { + #include "/lib/materials/specificMaterials/terrain/diamondBlock.glsl" + } + } + } else { + if (currentRenderedItemId == 45024) { // Netherite Tools, Netherite Armor, Netherite Ingot + materialMask = OSIEBCA; // Intense Fresnel + smoothnessG = color.r * 1.5; + smoothnessG = min1(smoothnessG); + highlightMult = smoothnessG * 2.0; + smoothnessD = smoothnessG * smoothnessG * 0.5; + + #ifdef COATED_TEXTURES + noiseFactor = 0.33; + #endif + } else /*if (currentRenderedItemId == 45028)*/ { // Trident Item + #include "/lib/materials/specificMaterials/others/trident.glsl" + } + } + } + } else { + if (currentRenderedItemId < 45048) { + if (currentRenderedItemId < 45040) { + if (currentRenderedItemId == 45032) { // Lava Bucket + if (color.r + color.g > color.b * 2.0) { + emission = color.r + color.g - color.b * 1.5; + emission *= 1.8; + color.rg += color.b * vec2(0.4, 0.15); + color.b *= 0.8; + } else { + #include "/lib/materials/specificMaterials/terrain/ironBlock.glsl" + } + } else /*if (currentRenderedItemId == 45036)*/ { // Bucket++ + if (GetMaxColorDif(color.rgb) < 0.01) { + #include "/lib/materials/specificMaterials/terrain/ironBlock.glsl" + } else { + float factor = color.b; + smoothnessG = factor; + highlightMult = factor * 2.0; + smoothnessD = factor; + } + } + } else { + if (currentRenderedItemId == 45040) { // Blaze Rod, Blaze Powder + noSmoothLighting = false; + lmCoordM.x = 0.85; + emission = color.g; + color.rgb = sqrt1(color.rgb); + } else /*if (currentRenderedItemId == 45044)*/ { // Bottle o' Enchanting, Glow Inc Sac + emission = color.b * 2.0; + } + } + } else { + if (currentRenderedItemId < 45056) { + if (currentRenderedItemId == 45048) { // Fire Charge + emission = max0(color.r + color.g - color.b * 0.5); + } else /*if (currentRenderedItemId == 45052)*/ { // Chorus Fruit + emission = max0(color.b * 2.0 - color.r) * 1.5; + } + } else { + if (currentRenderedItemId == 45056) { // Amethyst Shard + materialMask = OSIEBCA; // Intense Fresnel + float factor = pow2(color.r); + smoothnessG = 0.8 - factor * 0.3; + highlightMult = factor * 3.0; + smoothnessD = factor; + } else /*if (currentRenderedItemId == 45060)*/ { // Shield + float factor = min(color.r * color.g * color.b * 4.0, 0.7) * 0.7; + smoothnessG = factor; + highlightMult = factor * 3.0; + smoothnessD = factor; + } + } + } + } +} else { + if (currentRenderedItemId < 45096) { + if (currentRenderedItemId < 45080) { + if (currentRenderedItemId < 45072) { + if (currentRenderedItemId == 45064) { // Turtle Shell + float factor = color.g * 0.7; + smoothnessG = factor; + highlightMult = factor * 3.0; + smoothnessD = factor; + } else /*if (currentRenderedItemId == 45068)*/ { // Ender Pearl + smoothnessG = 1.0; + highlightMult = 2.0; + smoothnessD = 1.0; + } + } else { + if (currentRenderedItemId == 45072) { // Eye of Ender + smoothnessG = 1.0; + highlightMult = 2.0; + smoothnessD = 1.0; + emission = max0(color.g - color.b * 0.25); + color.rgb = pow(color.rgb, vec3(1.0 - 0.75 * emission)); + } else /*if (currentRenderedItemId == 45076)*/ { // Clock + if ( + CheckForColor(color.rgb, vec3(255, 255, 0)) || + CheckForColor(color.rgb, vec3(204, 204, 0)) || + CheckForColor(color.rgb, vec3(73, 104, 216)) || + CheckForColor(color.rgb, vec3(58, 83, 172)) || + CheckForColor(color.rgb, vec3(108, 108, 137)) || + CheckForColor(color.rgb, vec3(86, 86, 109)) + ) { + emission = 1.0; + color.rgb += vec3(0.1); + } + + #include "/lib/materials/specificMaterials/terrain/goldBlock.glsl" + } + } + } else { + if (currentRenderedItemId < 45088) { + if (currentRenderedItemId == 45080) { // Compass + if (color.r - 0.1 > color.b + color.g) { + emission = color.r * 1.5; + } + + #include "/lib/materials/specificMaterials/terrain/ironBlock.glsl" + } else /*if (currentRenderedItemId == 45084)*/ { // Echo Shard, Recovery Compass, Music Disc 5 + emission = max0(color.b + color.g - color.r * 2.0); + + #include "/lib/materials/specificMaterials/terrain/ironBlock.glsl" + } + } else { + if (currentRenderedItemId == 45088) { // Nether Star + emission = pow2(color.r + color.g) * 0.5; + } else /*if (currentRenderedItemId == 45092)*/ { // End Crystal + if (color.g < color.r) { + emission = 3.0; + color.r *= 1.1; + } + } + } + } + } else { + if (currentRenderedItemId < 45112) { + if (currentRenderedItemId < 45104) { + if (currentRenderedItemId == 45096) { // Glow Berries + // iris needs to add support + } else /*if (currentRenderedItemId == 45100)*/ { // Glowstone Dust + emission = dot(color.rgb, color.rgb) * 0.5 + 1.0; + } + } else { + if (currentRenderedItemId == 45104) { // Prismarine Crystals + emission = pow1_5(color.r) * 2.5 + 0.2; + } else /*if (currentRenderedItemId == 45108)*/ { // Totem of Undying + #include "/lib/materials/specificMaterials/terrain/goldBlock.glsl" + } + } + } else { + if (currentRenderedItemId < 45120) { + if (currentRenderedItemId == 45112) { // Trial Key + emission = max0(color.r - color.b) * 3.0; + color.rgb = pow(color.rgb, vec3(1.0 + 0.5 * sqrt(emission))); + } else /*if (currentRenderedItemId == 45116)*/ { // + + } + } else { + if (currentRenderedItemId == 45120) { // + + } else /*if (currentRenderedItemId == 45124)*/ { // + + } + } + } + } +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialHandling/terrainMaterials.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialHandling/terrainMaterials.glsl new file mode 100644 index 0000000..e63957f --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialHandling/terrainMaterials.glsl @@ -0,0 +1,2625 @@ +if (mat >= 10000) { +if (mat < 11024) { + if (mat < 10512) { + if (mat < 10256) { + if (mat < 10128) { + if (mat < 10064) { + if (mat < 10032) { + if (mat < 10016) { + if (mat < 10008) { + if (mat < 10004) { // No directional shading + noDirectionalShading = true; + } + else /*if (mat < 10008)*/ { // Grounded Waving Foliage + subsurfaceMode = 1, noSmoothLighting = true, noDirectionalShading = true; + + #ifdef GBUFFERS_TERRAIN + DoFoliageColorTweaks(color.rgb, shadowMult, snowMinNdotU, viewPos, nViewPos, lViewPos, dither); + + #ifdef COATED_TEXTURES + doTileRandomisation = false; + #endif + #endif + + #if SHADOW_QUALITY == -1 + shadowMult *= 1.0 - 0.3 * (signMidCoordPos.y + 1.0) * (1.0 - abs(signMidCoordPos.x)) + + 0.5 * (1.0 - signMidCoordPos.y) * invNoonFactor; // consistency357381 + #endif + } + } else { + if (mat < 10012) { // Leaves + #include "/lib/materials/specificMaterials/terrain/leaves.glsl" + } + else /*if (mat < 10016)*/ { // Vine + subsurfaceMode = 3, centerShadowBias = true; noSmoothLighting = true; + + #if defined COATED_TEXTURES && defined GBUFFERS_TERRAIN + doTileRandomisation = false; + #endif + + float factor = color.g; + smoothnessG = factor * 0.5; + highlightMult = factor * 4.0 + 2.0; + float fresnel = clamp(1.0 + dot(normalM, normalize(viewPos)), 0.0, 1.0); + highlightMult *= 1.0 - pow2(pow2(fresnel)); + } + } + } else { + if (mat < 10024) { + if (mat < 10020) { // Non-waving Foliage + subsurfaceMode = 1, noSmoothLighting = true, noDirectionalShading = true; + } + else /*if (mat < 10024)*/ { // Upper Waving Foliage + subsurfaceMode = 1, noSmoothLighting = true, noDirectionalShading = true; + + #ifdef GBUFFERS_TERRAIN + DoFoliageColorTweaks(color.rgb, shadowMult, snowMinNdotU, viewPos, nViewPos, lViewPos, dither); + + #ifdef COATED_TEXTURES + doTileRandomisation = false; + #endif + #endif + + #if SHADOW_QUALITY == -1 + shadowMult *= 1.0 + invNoonFactor; // consistency357381 + #endif + } + } else { + if (mat < 10028) { // Modded Ores + #ifdef GLOWING_ORE_MODDED + float epsilon = 0.00001; + vec2 absMidCoordPosM = absMidCoordPos - epsilon; + vec3 avgBorderColor = vec3(0.0); + + avgBorderColor += texture2D(tex, midCoord + vec2( absMidCoordPosM.x, absMidCoordPosM.y)).rgb; + avgBorderColor += texture2D(tex, midCoord + vec2(-absMidCoordPosM.x, absMidCoordPosM.y)).rgb; + avgBorderColor += texture2D(tex, midCoord + vec2( absMidCoordPosM.x,-absMidCoordPosM.y)).rgb; + avgBorderColor += texture2D(tex, midCoord + vec2(-absMidCoordPosM.x,-absMidCoordPosM.y)).rgb; + avgBorderColor += texture2D(tex, midCoord + vec2(epsilon, absMidCoordPosM.y)).rgb; + avgBorderColor += texture2D(tex, midCoord + vec2(epsilon,-absMidCoordPosM.y)).rgb; + avgBorderColor += texture2D(tex, midCoord + vec2( absMidCoordPosM.x, epsilon)).rgb; + avgBorderColor += texture2D(tex, midCoord + vec2(-absMidCoordPosM.x, epsilon)).rgb; + avgBorderColor *= 0.125; + + vec3 colorDif = abs(avgBorderColor - color.rgb); + emission = max(colorDif.r, max(colorDif.g, colorDif.b)); + emission = pow2(emission * 2.5 - 0.15); + + emission *= GLOWING_ORE_MULT; + //color.rgb = avgBorderColor; + #endif + } + else /*if (mat < 10032)*/ { // Modded Light Sources + noSmoothLighting = true; noDirectionalShading = true; + emission = GetLuminance(color.rgb) * 2.5; + } + } + } + } else { + if (mat < 10048) { + if (mat < 10040) { + if (mat < 10036) { // Stone Bricks++ + smoothnessG = pow2(pow2(color.g)) * 2.0; + smoothnessG = min1(smoothnessG); + smoothnessD = smoothnessG; + + #ifdef COATED_TEXTURES + noiseFactor = 0.66; + #endif + } + else /*if (mat < 10040)*/ { // Anvil+ + #include "/lib/materials/specificMaterials/terrain/anvil.glsl" + } + } else { + if (mat < 10044) { // Rails + #if ANISOTROPIC_FILTER == 0 + color = texture2DLod(tex, texCoord, 0); + #endif + + noSmoothLighting = true; + if (color.r > 0.1 && color.g + color.b < 0.1) { // Redstone Parts + noSmoothLighting = true; noDirectionalShading = true; + lmCoordM.x = min(lmCoordM.x * 0.9, 0.77); + + if (color.r > 0.5) { + color.rgb *= color.rgb; + emission = 8.0 * color.r; + } else if (color.r > color.g * 2.0) { + materialMask = OSIEBCA * 5.0; // Redstone Fresnel + + float factor = pow2(color.r); + smoothnessG = 0.4; + highlightMult = factor + 0.4; + + smoothnessD = factor * 0.7 + 0.3; + } + } else if (abs(color.r - color.b) < 0.15) { // Iron Parts + #include "/lib/materials/specificMaterials/terrain/ironBlock.glsl" + } else if (color.g > color.b * 2.0) { // Gold Parts + #include "/lib/materials/specificMaterials/terrain/goldBlock.glsl" + } else { // Wood Parts + #include "/lib/materials/specificMaterials/planks/oakPlanks.glsl" + } + } + else /*if (mat < 10048)*/ { // Empty Cauldron, Hopper + noSmoothLighting = true; + lmCoordM.x = min(lmCoordM.x, 0.9333); + + #include "/lib/materials/specificMaterials/terrain/anvil.glsl" + } + } + } else { + if (mat < 10056) { + if (mat < 10052) { // Water Cauldron + noSmoothLighting = true; + lmCoordM.x = min(lmCoordM.x, 0.9333); + + vec3 worldPos = playerPos + cameraPosition; + vec3 fractPos = fract(worldPos.xyz); + vec2 coordM = abs(fractPos.xz - 0.5); + if (max(coordM.x, coordM.y) < 0.375 && fractPos.y > 0.3 && NdotU > 0.9) { + #if WATER_STYLE < 3 + vec3 colorP = color.rgb / glColor.rgb; + smoothnessG = min(pow2(pow2(dot(colorP.rgb, colorP.rgb) * 0.4)), 1.0); + highlightMult = 3.25; + smoothnessD = 0.8; + #else + smoothnessG = 0.3; + smoothnessD = 1.0; + #endif + + #include "/lib/materials/specificMaterials/translucents/water.glsl" + + #ifdef COATED_TEXTURES + noiseFactor = 0.0; + #endif + } else { + #include "/lib/materials/specificMaterials/terrain/anvil.glsl" + } + } + else /*if (mat < 10056)*/ { // Powder Snow Cauldron + noSmoothLighting = true; + lmCoordM.x = min(lmCoordM.x, 0.9333); + + vec3 worldPos = playerPos + cameraPosition; + vec3 fractPos = fract(worldPos.xyz); + vec2 coordM = abs(fractPos.xz - 0.5); + if (max(coordM.x, coordM.y) < 0.375 && + fractPos.y > 0.3 && + NdotU > 0.9) { + + #include "/lib/materials/specificMaterials/terrain/snow.glsl" + } else { + #include "/lib/materials/specificMaterials/terrain/anvil.glsl" + } + } + } else { + if (mat < 10060) { // Lava Cauldron + noSmoothLighting = true; + lmCoordM.x = min(lmCoordM.x, 0.9333); + + vec3 worldPos = playerPos + cameraPosition; + vec3 fractPos = fract(worldPos.xyz); + vec2 coordM = abs(fractPos.xz - 0.5); + if (max(coordM.x, coordM.y) < 0.375 && + fractPos.y > 0.3 && + NdotU > 0.9) { + + #include "/lib/materials/specificMaterials/terrain/lava.glsl" + } else { + #include "/lib/materials/specificMaterials/terrain/anvil.glsl" + } + } + else /*if (mat < 10064)*/ { // Lever + if (color.r > color.g + color.b) { + color.rgb *= color.rgb; + emission = 4.0; + } else { + #include "/lib/materials/specificMaterials/terrain/cobblestone.glsl" + } + } + } + } + } + } else { + if (mat < 10096) { + if (mat < 10080) { + if (mat < 10072) { + if (mat < 10068) { // Lectern + #include "/lib/materials/specificMaterials/planks/oakPlanks.glsl" + } + else /*if (mat < 10072)*/ { // Lava + #include "/lib/materials/specificMaterials/terrain/lava.glsl" + + #if defined COATED_TEXTURES && defined GBUFFERS_TERRAIN + doTileRandomisation = false; + #endif + + #ifdef DISTANT_LIGHT_BOKEH + DoDistantLightBokehMaterial(emission, 4.5, lViewPos); + #endif + } + } else { + if (mat < 10076) { // Fire + noSmoothLighting = true, noDirectionalShading = true; + emission = 2.35; + color.rgb *= sqrt1(GetLuminance(color.rgb)); + } + else /*if (mat < 10080)*/ { // Soul Fire + noSmoothLighting = true, noDirectionalShading = true; + emission = 1.5; + color.rgb = pow1_5(color.rgb); + } + } + } else { + if (mat < 10088) { + if (mat < 10084) { // Stone+, Coal Ore, Smooth Stone+, Grindstone, Stonecutter + #include "/lib/materials/specificMaterials/terrain/stone.glsl" + } + else /*if (mat < 10088)*/ { // Granite+ + smoothnessG = pow2(pow2(color.r)) * 0.5; + smoothnessD = smoothnessG; + } + } else { + if (mat < 10092) { // Diorite+ + smoothnessG = pow2(color.g) * 0.5; + smoothnessD = smoothnessG; + + #ifdef GBUFFERS_TERRAIN + DoBrightBlockTweaks(color.rgb, 0.75, shadowMult, highlightMult); + #endif + } + else /*if (mat < 10096)*/ { // Andesite+ + smoothnessG = pow2(pow2(color.g)); + smoothnessD = smoothnessG; + } + } + } + } else { + if (mat < 10112) { + if (mat < 10104) { + if (mat < 10100) { // Polished Granite+ + smoothnessG = 0.1 + color.r * 0.4; + smoothnessD = smoothnessG; + + #ifdef COATED_TEXTURES + noiseFactor = 0.77; + #endif + } + else /*if (mat < 10104)*/ { // Polished Diorite+ + smoothnessG = pow2(color.g) * 0.7; + smoothnessD = smoothnessG; + + #ifdef GBUFFERS_TERRAIN + DoBrightBlockTweaks(color.rgb, 0.75, shadowMult, highlightMult); + #endif + + #ifdef COATED_TEXTURES + noiseFactor = 0.77; + #endif + } + } else { + if (mat < 10108) { // Polished Andesite+, Packed Mud, Mud Bricks+, Bricks+ + smoothnessG = pow2(color.g); + smoothnessD = smoothnessG; + + #ifdef COATED_TEXTURES + noiseFactor = 0.77; + #endif + } + else /*if (mat < 10112)*/ { // Deepslate:Non-polished Variants, Deepslate Coal Ore + #include "/lib/materials/specificMaterials/terrain/deepslate.glsl" + } + } + } else { + if (mat < 10120) { + if (mat < 10116) { // Deepslate:Polished Variants, Mud, Mangrove Roots, Muddy Mangrove Roots + smoothnessG = pow2(color.g) * 2.0; + smoothnessG = min1(smoothnessG); + smoothnessD = smoothnessG; + + #ifdef COATED_TEXTURES + noiseFactor = 0.77; + #endif + } + else /*if (mat < 10120)*/ { // Calcite + highlightMult = pow2(color.g) + 1.0; + smoothnessG = 1.0 - color.g * 0.5; + smoothnessD = smoothnessG; + + #ifdef GBUFFERS_TERRAIN + DoBrightBlockTweaks(color.rgb, 0.75, shadowMult, highlightMult); + #endif + } + } else { + if (mat < 10124) { // Dripstone+, Daylight Detector + smoothnessG = color.r * 0.35 + 0.2; + smoothnessD = smoothnessG; + + #ifdef COATED_TEXTURES + noiseFactor = 0.66; + #endif + } + else /*if (mat < 10128)*/ { // Snowy Variants of Grass Block, Podzol, Mycelium + float dotColor = dot(color.rgb, color.rgb); + if (dotColor > 1.5) { // Snowy Variants:Snowy Part + #include "/lib/materials/specificMaterials/terrain/snow.glsl" + } else { // Snowy Variants:Dirt Part + #include "/lib/materials/specificMaterials/terrain/dirt.glsl" + } + } + } + } + } + } + } else { + if (mat < 10192) { + if (mat < 10160) { + if (mat < 10144) { + if (mat < 10136) { + if (mat < 10132) { // Dirt, Coarse Dirt, Rooted Dirt, Podzol:Normal, Mycelium:Normal, Farmland:Dry + #include "/lib/materials/specificMaterials/terrain/dirt.glsl" + } + else /*if (mat < 10136)*/ { // Grass Block:Normal + if (glColor.b < 0.999) { // Grass Block:Normal:Grass Part + smoothnessG = pow2(color.g); + + #ifdef SNOWY_WORLD + snowMinNdotU = min(pow2(pow2(color.g)) * 1.9, 0.1); + color.rgb = color.rgb * 0.5 + 0.5 * (color.rgb / glColor.rgb); + #endif + } else { //Grass Block:Normal:Dirt Part + #include "/lib/materials/specificMaterials/terrain/dirt.glsl" + } + } + } else { + if (mat < 10140) { // Farmland:Wet + if (NdotU > 0.99) { // Farmland:Wet:Top Part + #if MC_VERSION >= 11300 + smoothnessG = clamp(pow2(pow2(1.0 - color.r)) * 2.5, 0.5, 1.0); + highlightMult = 0.5 + smoothnessG * smoothnessG * 2.0; + smoothnessD = smoothnessG * 0.75; + #else + smoothnessG = 0.5 * (1.0 + abs(color.r - color.b) + color.b); + smoothnessD = smoothnessG * 0.5; + #endif + } else { // Farmland:Wet:Dirt Part + #include "/lib/materials/specificMaterials/terrain/dirt.glsl" + } + } + else /*if (mat < 10144)*/ { // Netherrack + #include "/lib/materials/specificMaterials/terrain/netherrack.glsl" + } + } + } else { + if (mat < 10152) { + if (mat < 10148) { // Warped Nylium, Warped Wart Block + if (color.g == color.b && color.g > 0.0001) { // Warped Nylium:Netherrack Part + #include "/lib/materials/specificMaterials/terrain/netherrack.glsl" + } else { // Warped Nylium:Nylium Part, Warped Wart Block + smoothnessG = color.g * 0.5; + smoothnessD = smoothnessG; + + #ifdef COATED_TEXTURES + noiseFactor = 0.77; + #endif + } + } + else /*if (mat < 10152)*/ { // Crimson Nylium, Nether Wart Block + if (color.g == color.b && color.g > 0.0001 && color.r < 0.522) { // Crimson Nylium:Netherrack Part + #include "/lib/materials/specificMaterials/terrain/netherrack.glsl" + } else { // Crimson Nylium:Nylium Part, Nether Wart Block + smoothnessG = color.r * 0.5; + smoothnessD = smoothnessG; + + #ifdef COATED_TEXTURES + noiseFactor = 0.77; + #endif + } + } + } else { + if (mat < 10156) { // Cobblestone+, Mossy Cobblestone+, Furnace:Unlit, Smoker:Unlit, Blast Furnace:Unlit, Moss Block+, Lodestone, Piston, Sticky Piston, Dispenser, Dropper + #include "/lib/materials/specificMaterials/terrain/cobblestone.glsl" + } + else /*if (mat < 10160)*/ { // Oak Planks++:Clean Variants, Bookshelf, Crafting Table, Tripwire Hook + #include "/lib/materials/specificMaterials/planks/oakPlanks.glsl" + } + } + } + } else { + if (mat < 10176) { + if (mat < 10168) { + if (mat < 10164) { // Oak Log, Oak Wood + if (color.g > 0.48 || + CheckForColor(color.rgb, vec3(126, 98, 55)) || + CheckForColor(color.rgb, vec3(150, 116, 65))) { // Oak Log:Clean Part + #include "/lib/materials/specificMaterials/planks/oakPlanks.glsl" + } else { // Oak Log:Wood Part, Oak Wood + #include "/lib/materials/specificMaterials/terrain/oakWood.glsl" + } + } + else /*if (mat < 10168)*/ { // Spruce Planks++:Clean Variants + #include "/lib/materials/specificMaterials/planks/sprucePlanks.glsl" + } + } else { + if (mat < 10172) { // Spruce Log, Spruce Wood + if (color.g > 0.25) { // Spruce Log:Clean Part + #include "/lib/materials/specificMaterials/planks/sprucePlanks.glsl" + } else { // Spruce Log:Wood Part, Spruce Wood + smoothnessG = pow2(color.g) * 2.5; + smoothnessG = min1(smoothnessG); + smoothnessD = smoothnessG; + } + } + else /*if (mat < 10176)*/ { // Birch Planks++:Clean Variants, Scaffolding, Loom + #include "/lib/materials/specificMaterials/planks/birchPlanks.glsl" + } + } + } else { + if (mat < 10184) { + if (mat < 10180) { // Birch Log, Birch Wood + if (color.r - color.b > 0.15) { // Birch Log:Clean Part + #include "/lib/materials/specificMaterials/planks/birchPlanks.glsl" + } else { // Birch Log:Wood Part, Birch Wood + smoothnessG = pow2(color.g) * 0.25; + smoothnessD = smoothnessG; + + #ifdef COATED_TEXTURES + noiseFactor = 1.25; + #endif + } + } + else /*if (mat < 10184)*/ { // Jungle Planks++:Clean Variants, Composter + #include "/lib/materials/specificMaterials/planks/junglePlanks.glsl" + } + } else { + if (mat < 10188) { // Jungle Log, Jungle Wood + if (color.g > 0.405) { // Jungle Log:Clean Part + #include "/lib/materials/specificMaterials/planks/junglePlanks.glsl" + } else { // Jungle Log:Wood Part, Jungle Wood + smoothnessG = pow2(pow2(color.g)) * 5.0; + smoothnessG = min1(smoothnessG); + smoothnessD = smoothnessG; + + #ifdef COATED_TEXTURES + noiseFactor = 0.77; + #endif + } + } + else /*if (mat < 10192)*/ { // Acacia Planks++:Clean Variants + #include "/lib/materials/specificMaterials/planks/acaciaPlanks.glsl" + } + } + } + } + } else { + if (mat < 10224) { + if (mat < 10208) { + if (mat < 10200) { + if (mat < 10196) { // Acacia Log, Acacia Wood + if (color.r - color.b > 0.2) { // Acacia Log:Clean Part + #include "/lib/materials/specificMaterials/planks/acaciaPlanks.glsl" + } else { // Acacia Log:Wood Part, Acacia Wood + smoothnessG = pow2(color.b) * 1.3; + smoothnessG = min1(smoothnessG); + smoothnessD = smoothnessG; + + #ifdef COATED_TEXTURES + noiseFactor = 0.66; + #endif + } + } + else /*if (mat < 10200)*/ { // Dark Oak Planks++:Clean Variants + #include "/lib/materials/specificMaterials/planks/darkOakPlanks.glsl" + } + } else { + if (mat < 10204) { // Dark Oak Log, Dark Oak Wood + if (color.r - color.g > 0.08 || + CheckForColor(color.rgb, vec3(48, 30, 14))) { // Dark Oak Log:Clean Part + #include "/lib/materials/specificMaterials/planks/darkOakPlanks.glsl" + } else { // Dark Oak Log:Wood Part, Dark Oak Wood + smoothnessG = color.r * 0.4; + smoothnessD = smoothnessG; + } + } + else /*if (mat < 10208)*/ { // Mangrove Planks++:Clean Variants + #include "/lib/materials/specificMaterials/planks/mangrovePlanks.glsl" + } + } + } else { + if (mat < 10216) { + if (mat < 10212) { // Mangrove Log, Mangrove Wood + if (color.r - color.g > 0.2) { // Mangrove Log:Clean Part + #include "/lib/materials/specificMaterials/planks/mangrovePlanks.glsl" + } else { // Mangrove Log:Wood Part, Mangrove Wood + smoothnessG = pow2(color.r) * 0.6; + smoothnessD = smoothnessG; + } + } + else /*if (mat < 10216)*/ { // Crimson Planks++:Clean Variants + #include "/lib/materials/specificMaterials/planks/crimsonPlanks.glsl" + } + } else { + if (mat < 10220) { // Crimson Stem, Crimson Hyphae + if (color.r / color.b > 2.5) { // Emissive Part + emission = pow2(color.r) * 6.5; + color.gb *= 0.5; + } else { // Flat Part + #include "/lib/materials/specificMaterials/planks/crimsonPlanks.glsl" + } + } + else /*if (mat < 10224)*/ { // Warped Planks++:Clean Variants + #include "/lib/materials/specificMaterials/planks/warpedPlanks.glsl" + } + } + } + } else { + if (mat < 10240) { + if (mat < 10232) { + if (mat < 10228) { // Warped Stem, Warped Hyphae + //if (color.r < 0.12 || color.r + color.g * 3.0 < 3.4 * color.b) { // Emissive Part + if (color.r < 0.37 * color.b || color.r + color.g * 3.0 < 3.4 * color.b) { // Emissive Part + emission = pow2(color.g + 0.2 * color.b) * 4.5 + 0.15; + } else { // Flat Part + #include "/lib/materials/specificMaterials/planks/warpedPlanks.glsl" + } + } + else /*if (mat < 10232)*/ { // Bedrock + smoothnessG = color.b * 0.2 + 0.1; + smoothnessD = smoothnessG; + + #ifdef COATED_TEXTURES + noiseFactor = 1.5; + #endif + } + } else { + if (mat < 10236) { // Sand, Suspicious Sand + smoothnessG = pow(color.g, 16.0) * 2.0; + smoothnessG = min1(smoothnessG); + smoothnessD = smoothnessG * 0.7; + highlightMult = 2.0; + + #ifdef GBUFFERS_TERRAIN + DoBrightBlockTweaks(color.rgb, 0.5, shadowMult, highlightMult); + + DoOceanBlockTweaks(smoothnessD); + #endif + + #if RAIN_PUDDLES >= 1 + noPuddles = 1.0; + #endif + } + else /*if (mat < 10240)*/ { // Red Sand + smoothnessG = pow(color.r * 1.08, 16.0) * 2.0; + smoothnessG = min1(smoothnessG); + smoothnessD = smoothnessG * 0.7; + highlightMult = 2.0; + + #ifdef COATED_TEXTURES + noiseFactor = 0.77; + #endif + + #if RAIN_PUDDLES >= 1 + noPuddles = 1.0; + #endif + } + } + } else { + if (mat < 10248) { + if (mat < 10244) { // Sandstone+ + highlightMult = 2.0; + smoothnessG = pow2(pow2(color.g)) * 0.5; + smoothnessG = min1(smoothnessG); + smoothnessD = smoothnessG * 0.7; + + #ifdef GBUFFERS_TERRAIN + DoBrightBlockTweaks(color.rgb, 0.5, shadowMult, highlightMult); + #endif + + #ifdef COATED_TEXTURES + noiseFactor = 0.77; + #endif + } + else /*if (mat < 10248)*/ { // Red Sandstone+ + highlightMult = 2.0; + smoothnessG = pow2(pow2(color.r * 1.05)) * 0.5; + smoothnessG = min1(smoothnessG); + smoothnessD = smoothnessG * 0.7; + + #ifdef COATED_TEXTURES + noiseFactor = 0.5; + #endif + } + } else { + if (mat < 10252) { // Netherite Block + #include "/lib/materials/specificMaterials/terrain/netheriteBlock.glsl" + } + else /*if (mat < 10256)*/ { // Ancient Debris + smoothnessG = pow2(color.r); + smoothnessG = min1(smoothnessG); + smoothnessD = smoothnessG; + + #ifdef COATED_TEXTURES + noiseFactor = 1.5; + #endif + + #ifdef GLOWING_ORE_ANCIENTDEBRIS + emission = min(pow2(color.g * 6.0), 8.0); + color.rgb *= pow(color.rgb, vec3(min1(GLOWING_ORE_MULT))); + emission *= GLOWING_ORE_MULT; + #endif + } + } + } + } + } + } + } else { + if (mat < 10384) { + if (mat < 10320) { + if (mat < 10288) { + if (mat < 10272) { + if (mat < 10264) { + if (mat < 10260) { // Iron Bars + noSmoothLighting = true; + #include "/lib/materials/specificMaterials/terrain/ironBlock.glsl" + } + else /*if (mat < 10264)*/ { // + + } + } else { + if (mat < 10268) { // Iron Block, Heavy Weighted Pressure Plate + #include "/lib/materials/specificMaterials/terrain/ironBlock.glsl" + color.rgb *= max(color.r, 0.85) * 0.9; + } + else /*if (mat < 10272)*/ { // Raw Iron Block + #include "/lib/materials/specificMaterials/terrain/rawIronBlock.glsl" + } + } + } else { + if (mat < 10280) { + if (mat < 10276) { // Iron Ore + if (color.r != color.g) { // Iron Ore:Raw Iron Part + #include "/lib/materials/specificMaterials/terrain/rawIronBlock.glsl" + #ifdef GLOWING_ORE_IRON + if (color.r - color.b > 0.15) { + emission = pow1_5(color.r) * 1.5; + color.rgb *= pow(color.rgb, vec3(0.5 * min1(GLOWING_ORE_MULT))); + emission *= GLOWING_ORE_MULT; + } + #endif + } else { // Iron Ore:Stone Part + #include "/lib/materials/specificMaterials/terrain/stone.glsl" + } + } + else /*if (mat < 10280)*/ { // Deepslate Iron Ore + if (color.r != color.g) { // Deepslate Iron Ore:Raw Iron Part + #include "/lib/materials/specificMaterials/terrain/rawIronBlock.glsl" + #ifdef GLOWING_ORE_IRON + if (color.r - color.b > 0.15) { + emission = pow1_5(color.r) * 1.5; + color.rgb *= pow(color.rgb, vec3(0.5 * min1(GLOWING_ORE_MULT))); + emission *= GLOWING_ORE_MULT; + } + #endif + } else { // Deepslate Iron Ore:Deepslate Part + #include "/lib/materials/specificMaterials/terrain/deepslate.glsl" + } + } + } else { + if (mat < 10284) { // Raw Copper Block + #include "/lib/materials/specificMaterials/terrain/rawCopperBlock.glsl" + } + else /*if (mat < 10288)*/ { // Copper Ore + if (color.r != color.g) { // Copper Ore:Raw Copper Part + #include "/lib/materials/specificMaterials/terrain/rawCopperBlock.glsl" + #ifdef GLOWING_ORE_COPPER + if (max(color.r * 0.5, color.g) - color.b > 0.05) { + emission = color.r * 2.0 + 0.7; + color.rgb *= pow(color.rgb, vec3(min1(GLOWING_ORE_MULT))); + emission *= GLOWING_ORE_MULT; + } + #endif + } else { // Copper Ore:Stone Part + #include "/lib/materials/specificMaterials/terrain/stone.glsl" + } + } + } + } + } else { + if (mat < 10304) { + if (mat < 10296) { + if (mat < 10292) { // Deepslate Copper Ore + if (color.r != color.g) { // Deepslate Copper Ore:Raw Copper Part + #include "/lib/materials/specificMaterials/terrain/rawCopperBlock.glsl" + #ifdef GLOWING_ORE_COPPER + if (max(color.r * 0.5, color.g) - color.b > 0.05) { + emission = color.r * 2.0 + 0.7; + color.rgb *= pow(color.rgb, vec3(min1(GLOWING_ORE_MULT))); + emission *= GLOWING_ORE_MULT; + } + #endif + } else { // Deepslate Copper Ore:Deepslate Part + #include "/lib/materials/specificMaterials/terrain/deepslate.glsl" + } + } + else /*if (mat < 10296)*/ { // Copper Block++:All Non-raw Variants + #include "/lib/materials/specificMaterials/terrain/copperBlock.glsl" + } + } else { + if (mat < 10300) { // Raw Gold Block + #include "/lib/materials/specificMaterials/terrain/rawGoldBlock.glsl" + } + else /*if (mat < 10304)*/ { // Gold Ore + if (color.r != color.g || color.r > 0.99) { // Gold Ore:Raw Gold Part + #include "/lib/materials/specificMaterials/terrain/rawGoldBlock.glsl" + #ifdef GLOWING_ORE_GOLD + if (color.g - color.b > 0.15 || color.r > 0.99) { + emission = color.r + 1.0; + color.rgb *= pow(color.rgb, vec3(min1(GLOWING_ORE_MULT))); + emission *= GLOWING_ORE_MULT; + } + #endif + } else { // Gold Ore:Stone Part + #include "/lib/materials/specificMaterials/terrain/stone.glsl" + } + } + } + } else { + if (mat < 10312) { + if (mat < 10308) { // Deepslate Gold Ore + if (color.r != color.g || color.r > 0.99) { // Deepslate Gold Ore:Raw Gold Part + #include "/lib/materials/specificMaterials/terrain/rawGoldBlock.glsl" + #ifdef GLOWING_ORE_GOLD + if (color.g - color.b > 0.15 || color.r > 0.99) { + emission = color.r + 1.0; + color.rgb *= pow(color.rgb, vec3(min1(GLOWING_ORE_MULT))); + emission *= GLOWING_ORE_MULT; + } + #endif + } else { // Deepslate Gold Ore:Deepslate Part + #include "/lib/materials/specificMaterials/terrain/deepslate.glsl" + } + } + else /*if (mat < 10312)*/ { // Nether Gold Ore + if (color.g != color.b) { // Nether Gold Ore:Raw Gold Part + #include "/lib/materials/specificMaterials/terrain/rawGoldBlock.glsl" + #ifdef GLOWING_ORE_NETHERGOLD + emission = color.g * 1.5; + emission *= GLOWING_ORE_MULT; + #endif + } else { // Nether Gold Ore:Netherrack Part + #include "/lib/materials/specificMaterials/terrain/netherrack.glsl" + } + } + } else { + if (mat < 10316) { // Gold Block, Light Weighted Pressure Plate + #include "/lib/materials/specificMaterials/terrain/goldBlock.glsl" + } + else /*if (mat < 10320)*/ { // Diamond Block + #include "/lib/materials/specificMaterials/terrain/diamondBlock.glsl" + } + } + } + } + } else { + if (mat < 10352) { + if (mat < 10336) { + if (mat < 10328) { + if (mat < 10324) { // Diamond Ore + if (color.b / color.r > 1.5 || color.b > 0.8) { // Diamond Ore:Diamond Part + #include "/lib/materials/specificMaterials/terrain/diamondBlock.glsl" + #ifdef GLOWING_ORE_DIAMOND + emission = color.g + 1.5; + color.rgb *= pow(color.rgb, vec3(min1(GLOWING_ORE_MULT))); + emission *= GLOWING_ORE_MULT; + #endif + } else { // Diamond Ore:Stone Part, Diamond Ore:StoneToDiamond part + #include "/lib/materials/specificMaterials/terrain/stone.glsl" + } + } + else /*if (mat < 10328)*/ { // Deepslate Diamond Ore + if (color.b / color.r > 1.5 || color.b > 0.8) { // Deepslate Diamond Ore:Diamond Part + #include "/lib/materials/specificMaterials/terrain/diamondBlock.glsl" + #ifdef GLOWING_ORE_DIAMOND + emission = color.g + 1.5; + color.rgb *= pow(color.rgb, vec3(min1(GLOWING_ORE_MULT))); + emission *= GLOWING_ORE_MULT; + #endif + } else { // Deepslate Diamond Ore:Deepslate Part, Deepslate Diamond Ore:DeepslateToDiamond part + #include "/lib/materials/specificMaterials/terrain/deepslate.glsl" + } + } + } else { + if (mat < 10332) { // Amethyst Block, Budding Amethyst + materialMask = OSIEBCA; // Intense Fresnel + float factor = pow2(color.r); + smoothnessG = 0.8 - factor * 0.3; + highlightMult = factor * 3.0; + smoothnessD = factor; + + #if GLOWING_AMETHYST >= 2 + emission = dot(color.rgb, color.rgb) * 0.3; + #endif + + color.rgb *= 0.7 + 0.3 * GetLuminance(color.rgb); + + #ifdef COATED_TEXTURES + noiseFactor = 0.66; + #endif + } + else /*if (mat < 10336)*/ { // Amethyst Cluster, Amethyst Buds + materialMask = OSIEBCA; // Intense Fresnel + float factor = pow2(color.r); + smoothnessG = 0.8 - factor * 0.3; + highlightMult = factor * 3.0; + smoothnessD = factor; + + noSmoothLighting = true; + lmCoordM.x *= 0.85; + + #if GLOWING_AMETHYST >= 1 && defined GBUFFERS_TERRAIN + vec3 worldPos = playerPos.xyz + cameraPosition.xyz; + vec3 blockPos = abs(fract(worldPos) - vec3(0.5)); + float maxBlockPos = max(blockPos.x, max(blockPos.y, blockPos.z)); + emission = pow2(max0(1.0 - maxBlockPos * 1.85) * color.g) * 7.0; + + if (CheckForColor(color.rgb, vec3(254, 203, 230))) + emission = pow(emission, max0(1.0 - 0.2 * max0(emission - 1.0))); + + color.g *= 1.0 - emission * 0.07; + + emission *= 1.3; + #endif + + #ifdef COATED_TEXTURES + noiseFactor = 0.66; + #endif + } + } + } else { + if (mat < 10344) { + if (mat < 10340) { // Emerald Block + #include "/lib/materials/specificMaterials/terrain/emeraldBlock.glsl" + } + else /*if (mat < 10344)*/ { // Emerald Ore + float dif = GetMaxColorDif(color.rgb); + if (dif > 0.4 || color.b > 0.85) { // Emerald Ore:Emerald Part + #include "/lib/materials/specificMaterials/terrain/emeraldBlock.glsl" + #ifdef GLOWING_ORE_EMERALD + emission = 2.0; + color.rgb *= pow(color.rgb, vec3(min1(GLOWING_ORE_MULT))); + emission *= GLOWING_ORE_MULT; + #endif + } else { // Emerald Ore:Stone Part + #include "/lib/materials/specificMaterials/terrain/stone.glsl" + } + } + } else { + if (mat < 10348) { // Deepslate Emerald Ore + float dif = GetMaxColorDif(color.rgb); + if (dif > 0.4 || color.b > 0.85) { // Deepslate Emerald Ore:Emerald Part + #include "/lib/materials/specificMaterials/terrain/emeraldBlock.glsl" + #ifdef GLOWING_ORE_EMERALD + emission = 2.0; + color.rgb *= pow(color.rgb, vec3(min1(GLOWING_ORE_MULT))); + emission *= GLOWING_ORE_MULT; + #endif + } else { // Deepslate Emerald Ore:Deepslate Part + #include "/lib/materials/specificMaterials/terrain/deepslate.glsl" + } + } + else /*if (mat < 10352)*/ { // Azalea, Flowering Azalea + #include "/lib/materials/specificMaterials/terrain/cobblestone.glsl" + } + } + } + } else { + if (mat < 10368) { + if (mat < 10360) { + if (mat < 10356) { // Lapis Block + #include "/lib/materials/specificMaterials/terrain/lapisBlock.glsl" + + #ifdef EMISSIVE_LAPIS_BLOCK + emission = pow2(dot(color.rgb, color.rgb)) * 10.0; + #endif + } + else /*if (mat < 10360)*/ { // Lapis Ore + if (color.r != color.g) { // Lapis Ore:Lapis Part + #include "/lib/materials/specificMaterials/terrain/lapisBlock.glsl" + smoothnessG *= 0.5; + smoothnessD *= 0.5; + #ifdef GLOWING_ORE_LAPIS + if (color.b - color.r > 0.2) { + emission = 2.0; + color.rgb *= pow(color.rgb, vec3(min1(GLOWING_ORE_MULT))); + emission *= GLOWING_ORE_MULT; + } + #endif + } else { // Lapis Ore:Stone Part + #include "/lib/materials/specificMaterials/terrain/stone.glsl" + } + } + } else { + if (mat < 10364) { // Deepslate Lapis Ore + if (color.r != color.g) { // Deepslate Lapis Ore:Lapis Part + #include "/lib/materials/specificMaterials/terrain/lapisBlock.glsl" + smoothnessG *= 0.5; + smoothnessD *= 0.5; + #ifdef GLOWING_ORE_LAPIS + if (color.b - color.r > 0.2) { + emission = 2.0; + color.rgb *= pow(color.rgb, vec3(min1(GLOWING_ORE_MULT))); + emission *= GLOWING_ORE_MULT; + } + #endif + } else { // Deepslate Lapis Ore:Deepslate Part + #include "/lib/materials/specificMaterials/terrain/deepslate.glsl" + } + } + else /*if (mat < 10368)*/ { // Quartz Block++ + #include "/lib/materials/specificMaterials/terrain/quartzBlock.glsl" + } + } + } else { + if (mat < 10376) { + if (mat < 10372) { // Nether Quartz Ore + if (color.g != color.b) { // Nether Quartz Ore:Quartz Part + #include "/lib/materials/specificMaterials/terrain/quartzBlock.glsl" + #ifdef GLOWING_ORE_NETHERQUARTZ + emission = pow2(color.b * 1.6); + emission *= GLOWING_ORE_MULT; + #endif + } else { // Nether Quartz Ore:Netherrack Part + #include "/lib/materials/specificMaterials/terrain/netherrack.glsl" + } + } + else /*if (mat < 10376)*/ { // Obsidian + #include "/lib/materials/specificMaterials/terrain/obsidian.glsl" + } + } else { + if (mat < 10380) { // Purpur Block+ + highlightMult = 2.0; + smoothnessG = pow2(color.r) * 0.6; + smoothnessG = min1(smoothnessG); + smoothnessD = smoothnessG; + + #ifdef COATED_TEXTURES + noiseFactor = 0.5; + #endif + } + else /*if (mat < 10384)*/ { // 8 Layer Snow, Snow Block, Powder Snow + #include "/lib/materials/specificMaterials/terrain/snow.glsl" + } + } + } + } + } + } else { + if (mat < 10448) { + if (mat < 10416) { + if (mat < 10400) { + if (mat < 10392) { + if (mat < 10388) { // Packed Ice + materialMask = OSIEBCA; // Intense Fresnel + float factor = pow2(color.g); + float factor2 = pow2(factor); + smoothnessG = 1.0 - 0.5 * factor; + highlightMult = factor2 * 3.5; + smoothnessD = factor; + + #ifdef COATED_TEXTURES + noiseFactor = 0.33; + #endif + } + else /*if (mat < 10392)*/ { // Blue Ice + materialMask = OSIEBCA; // Intense Fresnel + float factor = min1(pow2(color.g) * 1.38); + float factor2 = pow2(factor); + smoothnessG = 1.0 - 0.5 * factor; + highlightMult = factor2 * 3.5; + smoothnessD = pow1_5(color.g); + + #ifdef COATED_TEXTURES + noiseFactor = 0.33; + #endif + } + } else { + if (mat < 10396) { // Pumpkin, Carved Pumpkin + #include "/lib/materials/specificMaterials/terrain/pumpkin.glsl" + } + else /*if (mat < 10400)*/ { // Jack o'Lantern + #include "/lib/materials/specificMaterials/terrain/pumpkin.glsl" + noSmoothLighting = true, noDirectionalShading = true; + lmCoordM.y = 0.0; + lmCoordM.x = 1.0; + + #if MC_VERSION >= 11300 + if (color.b > 0.28 && color.r > 0.9) { + float factor = pow2(color.g); + emission = pow2(factor) * factor * 5.0; + } + #else + if (color.b < 0.4) + emission = clamp01(color.g * 1.3 - color.r) * 5.0; + #endif + } + } + } else { + if (mat < 10408) { + if (mat < 10404) { // Sea Pickle:Not Waterlogged + noSmoothLighting = true; + } + else /*if (mat < 10408)*/ { // Sea Pickle:Waterlogged + noSmoothLighting = true; + if (color.b > 0.5) { // Sea Pickle:Emissive Part + #ifdef GBUFFERS_TERRAIN + color.g *= 1.1; + emission = 5.0; + #endif + } + } + } else { + if (mat < 10412) { // Basalt+ + smoothnessG = color.r * 0.35; + smoothnessD = smoothnessG; + + #ifdef COATED_TEXTURES + noiseFactor = 0.77; + #endif + } + else /*if (mat < 10416)*/ { // Glowstone + noSmoothLighting = true; noDirectionalShading = true; + lmCoordM = vec2(0.9, 0.0); + + emission = max0(color.g - 0.3) * 4.6; + color.rg += emission * vec2(0.15, 0.05); + + #ifdef DISTANT_LIGHT_BOKEH + DoDistantLightBokehMaterial(emission, 2.0, lViewPos); + #endif + } + } + } + } else { + if (mat < 10432) { + if (mat < 10424) { + if (mat < 10420) { // Nether Bricks+ + float factor = smoothstep1(min1(color.r * 1.5)); + factor = factor > 0.12 ? factor : factor * 0.5; + smoothnessG = factor; + smoothnessD = factor; + } + else /*if (mat < 10424)*/ { // Red Nether Bricks+ + float factor = color.r * 0.9; + factor = color.r > 0.215 ? factor : factor * 0.25; + smoothnessG = factor; + smoothnessD = factor; + + #ifdef COATED_TEXTURES + noiseFactor = 0.77; + #endif + } + } else { + if (mat < 10428) { // Melon + smoothnessG = color.r * 0.75; + smoothnessD = color.r * 0.5; + + #ifdef COATED_TEXTURES + noiseFactor = 0.66; + #endif + } + else /*if (mat < 10432)*/ { // End Stone++, + #include "/lib/materials/specificMaterials/terrain/endStone.glsl" + } + } + } else { + if (mat < 10440) { + if (mat < 10436) { // Terracotta+ + smoothnessG = 0.25; + highlightMult = 1.5; + smoothnessD = 0.17; + + #ifdef COATED_TEXTURES + noiseFactor = 0.33; + #endif + } + else /*if (mat < 10440)*/ { // Glazed Terracotta+ + smoothnessG = 0.75; + smoothnessD = 0.35; + + #ifdef COATED_TEXTURES + noiseFactor = 0.5; + #endif + } + } else { + if (mat < 10444) { // Prismarine+, Prismarine Bricks+ + smoothnessG = pow2(color.g) * 0.8; + highlightMult = 1.5; + smoothnessD = smoothnessG; + + #ifdef COATED_TEXTURES + noiseFactor = 0.66; + #endif + } + else /*if (mat < 10448)*/ { // Dark Prismarine+ + smoothnessG = min1(pow2(color.g) * 2.0); + highlightMult = 1.5; + smoothnessD = smoothnessG; + + #ifdef COATED_TEXTURES + noiseFactor = 0.77; + #endif + } + } + } + } + } else { + if (mat < 10480) { + if (mat < 10464) { + if (mat < 10456) { + if (mat < 10452) { // Sea Lantern + noSmoothLighting = true; noDirectionalShading = true; + lmCoordM.x = 0.85; + + smoothnessD = min1(max0(0.5 - color.r) * 2.0); + smoothnessG = color.g; + + float blockRes = absMidCoordPos.x * atlasSize.x; + vec2 signMidCoordPosM = (floor((signMidCoordPos + 1.0) * blockRes) + 0.5) / blockRes - 1.0; + float dotsignMidCoordPos = dot(signMidCoordPosM, signMidCoordPosM); + float lBlockPosM = pow2(max0(1.0 - 1.7 * pow2(pow2(dotsignMidCoordPos)))); + emission = pow2(color.b) * 1.6 + 2.2 * lBlockPosM; + + emission *= 0.4 + max0(0.6 - 0.006 * lViewPos); + + color.rb *= vec2(1.13, 1.1); + + #ifdef DISTANT_LIGHT_BOKEH + DoDistantLightBokehMaterial(emission, 2.0, lViewPos); + #endif + + #ifdef COATED_TEXTURES + noiseFactor = 0.5; + #endif + } + else /*if (mat < 10456)*/ { // Magma Block + noSmoothLighting = true; noDirectionalShading = true; + lmCoordM = vec2(0.75, 0.0); + + if (color.g > 0.22) { // Emissive Part + emission = pow2(pow2(color.r)) * 4.0; + + #if RAIN_PUDDLES >= 1 + noPuddles = color.g * 4.0; + #endif + + color.gb *= max(2.0 - 11.0 * pow2(color.g), 0.5); + + maRecolor = vec3(emission * 0.075); + } else { // Netherrack Part + #include "/lib/materials/specificMaterials/terrain/netherrack.glsl" + + emission = 0.2; + } + + } + } else { + if (mat < 10460) { // Command Block+ + color = texture2DLod(tex, texCoord, 0); + + vec2 coord = signMidCoordPos; + float blockRes = absMidCoordPos.x * atlasSize.x; + vec2 absCoord = abs(coord); + float maxCoord = max(absCoord.x, absCoord.y); + + float dif = GetMaxColorDif(color.rgb); + + if ( // This mess exists because Iris' midCoord is slightly inaccurate + dif > 0.1 && maxCoord < 0.375 && + !CheckForColor(color.rgb, vec3(111, 73, 43)) && + !CheckForColor(color.rgb, vec3(207, 166, 139)) && + !CheckForColor(color.rgb, vec3(155, 139, 207)) && + !CheckForColor(color.rgb, vec3(161, 195, 180)) && + !CheckForColor(color.rgb, vec3(201, 143, 107)) && + !CheckForColor(color.rgb, vec3(135, 121, 181)) && + !CheckForColor(color.rgb, vec3(131, 181, 145)) + ) { + emission = 6.0; + color.rgb *= color.rgb; + highlightMult = 2.0; + maRecolor = vec3(0.5); + } else { + smoothnessG = dot(color.rgb, color.rgb) * 0.33; + smoothnessD = smoothnessG; + } + } + else /*if (mat < 10464)*/ { // Concrete+ except Lime + smoothnessG = 0.4; + highlightMult = 1.5; + smoothnessD = 0.3; + + #ifdef COATED_TEXTURES + noiseFactor = 0.2; + #endif + } + } + } else { + if (mat < 10472) { + if (mat < 10468) { // Concrete Powder+ + smoothnessG = 0.2; + smoothnessD = 0.1; + + #ifdef COATED_TEXTURES + noiseFactor = 0.5; + #endif + } + else /*if (mat < 10472)*/ { // Coral Block+ + #include "/lib/materials/specificMaterials/terrain/coral.glsl" + } + } else { + if (mat < 10476) { // Coral Fan+, Coral+ + noSmoothLighting = true; + #include "/lib/materials/specificMaterials/terrain/coral.glsl" + } + else /*if (mat < 10480)*/ { // Crying Obsidian + #include "/lib/materials/specificMaterials/terrain/cryingObsidian.glsl" + + #ifdef SNOWY_WORLD + snowFactor = 0.0; + #endif + } + } + } + } else { + if (mat < 10496) { + if (mat < 10488) { + if (mat < 10484) { // Blackstone++ + #include "/lib/materials/specificMaterials/terrain/blackstone.glsl" + } + else /*if (mat < 10488)*/ { // Gilded Blackstone + if (color.r > color.b * 3.0) { // Gilded Blackstone:Gilded Part + #include "/lib/materials/specificMaterials/terrain/rawGoldBlock.glsl" + #ifdef GLOWING_ORE_GILDEDBLACKSTONE + emission = color.g * 1.5; + emission *= GLOWING_ORE_MULT; + #endif + } else { // Gilded Blackstone:Blackstone Part + #include "/lib/materials/specificMaterials/terrain/blackstone.glsl" + } + + } + } else { + if (mat < 10492) { // Lily Pad + noSmoothLighting = true; + subsurfaceMode = 2; + + #if defined COATED_TEXTURES && defined GBUFFERS_TERRAIN + doTileRandomisation = false; + #endif + + #ifdef IPBR + float factor = min1(color.g * 2.0); + smoothnessG = factor * 0.5; + highlightMult = factor; + #endif + } + else /*if (mat < 10496)*/ { // Dirt Path + #include "/lib/materials/specificMaterials/terrain/dirt.glsl" + #ifdef GBUFFERS_TERRAIN + glColor.a = sqrt(glColor.a); + #endif + } + } + } else { + if (mat < 10504) { + if (mat < 10500) { // Torch + noDirectionalShading = true; + + if (color.r > 0.95) { + noSmoothLighting = true; + lmCoordM.x = 1.0; + emission = GetLuminance(color.rgb) * 4.1; + #ifndef GBUFFERS_TERRAIN + emission *= 0.65; + #endif + color.r *= 1.4; + color.b *= 0.5; + } + + #ifdef GBUFFERS_TERRAIN + else if (abs(NdotU) < 0.5) { + #if MC_VERSION >= 12102 // torch model got changed in 1.21.2 + lmCoordM.x = min1(0.7 + 0.3 * smoothstep1(max0(0.4 - signMidCoordPos.y))); + #else + lmCoordM.x = min1(0.7 + 0.3 * pow2(1.0 - signMidCoordPos.y)); + #endif + } + #else + else { + color.rgb *= 1.5; + } + #endif + + #ifdef DISTANT_LIGHT_BOKEH + DoDistantLightBokehMaterial(color, vec4(1.0, 0.6, 0.2, 1.0), emission, 5.0, lViewPos); + #endif + + emission += 0.0001; // No light reducing during noon + } + else /*if (mat < 10504)*/ { // End Rod + noDirectionalShading = true; + + #ifdef GBUFFERS_TERRAIN + vec3 fractPos = abs(fract(playerPos + cameraPosition) - 0.5); + float maxCoord = max(fractPos.x, max(fractPos.y, fractPos.z)); + lmCoordM.x = maxCoord < 0.4376 ? 0.97 : 0.8; + #else + lmCoordM.x = 0.9; + #endif + + float dotColor = dot(color.rgb, color.rgb); + if (dotColor > 2.0) { + emission = 2.8; + emission *= 0.4 + max0(0.6 - 0.006 * lViewPos); + + color.rgb = pow2(color.rgb); + color.g *= 0.95; + } + + #ifdef DISTANT_LIGHT_BOKEH + DoDistantLightBokehMaterial(emission, 4.0, lViewPos); + #endif + } + } else { + if (mat < 10508) { // Chorus Plant + + } + else /*if (mat < 10512)*/ { // Chorus Flower:Alive + float dotColor = dot(color.rgb, color.rgb); + if (dotColor > 1.0) + emission = pow2(pow2(pow2(dotColor * 0.33))) + 0.2 * dotColor; + } + } + } + } + } + } + } + } else { + if (mat < 10768) { + if (mat < 10640) { + if (mat < 10576) { + if (mat < 10544) { + if (mat < 10528) { + if (mat < 10520) { + if (mat < 10516) { // Chorus Flower:Dead + vec3 checkColor = texture2DLod(tex, texCoord, 0).rgb; + if (CheckForColor(checkColor, vec3(164, 157, 126)) || + CheckForColor(checkColor, vec3(201, 197, 176)) || + CheckForColor(checkColor, vec3(226, 221, 188)) || + CheckForColor(checkColor, vec3(153, 142, 95)) + ) { + emission = min(GetLuminance(color.rgb), 0.75) / 0.75; + emission = pow2(pow2(emission)) * 6.5; + color.gb *= 0.85; + } else emission = max0(GetLuminance(color.rgb) - 0.5) * 3.0; + } + else /*if (mat < 10520)*/ { // Furnace:Lit + lmCoordM.x *= 0.95; + + #include "/lib/materials/specificMaterials/terrain/cobblestone.glsl" + + float dotColor = dot(color.rgb, color.rgb); + emission = 2.5 * dotColor * max0(pow2(pow2(pow2(color.r))) - color.b) + pow(dotColor * 0.35, 32.0); + color.r *= 1.0 + 0.1 * emission; + } + } else { + if (mat < 10524) { // Cactus + float factor = sqrt1(color.r); + smoothnessG = factor * 0.5; + highlightMult = factor; + } + else /*if (mat < 10528)*/ { // Note Block, Jukebox + float factor = color.r * 0.5; + smoothnessG = factor; + smoothnessD = factor; + + #ifdef COATED_TEXTURES + noiseFactor = 0.66; + #endif + } + } + } else { + if (mat < 10536) { + if (mat < 10532) { // Soul Torch + noSmoothLighting = true; noDirectionalShading = true; + lmCoordM.x = min(lmCoordM.x * 0.9, 0.77); + + if (color.b > 0.6) { + emission = 2.7; + color.rgb = pow1_5(color.rgb); + color.r = min1(color.r + 0.1); + } + emission += 0.0001; // No light reducing during noon + + #ifdef DISTANT_LIGHT_BOKEH + DoDistantLightBokehMaterial(color, vec4(0.5, 1.0, 1.0, 1.0), emission, 3.0, lViewPos); + #endif + + #ifdef SNOWY_WORLD + snowFactor = 0.0; + #endif + } + else /*if (mat < 10536)*/ { // Brown Mushroom Block + if (color.r > color.g && color.g > color.b && color.b > 0.37) { + #include "/lib/materials/specificMaterials/terrain/cobblestone.glsl" + } else { + float factor = pow2(color.r) * color.r * 0.8; + highlightMult = 1.5; + smoothnessG = factor; + smoothnessD = factor * 0.9; + + #ifdef COATED_TEXTURES + noiseFactor = 0.33; + #endif + } + } + } else { + if (mat < 10540) { // Red Mushroom Block + if (color.r > color.g && color.g > color.b && color.b > 0.37) { + #include "/lib/materials/specificMaterials/terrain/cobblestone.glsl" + } else { + float factor = min1(pow2(color.g) + 0.25); + highlightMult = 1.5; + smoothnessG = factor; + smoothnessD = factor * 0.7; + + #ifdef COATED_TEXTURES + noiseFactor = 0.33; + #endif + } + } + else /*if (mat < 10544)*/ { // Mushroom Stem, + if (color.r > color.g && color.g > color.b && color.b < 0.6) { + #include "/lib/materials/specificMaterials/terrain/cobblestone.glsl" + } else { + float factor = pow2(pow2(color.g)); + highlightMult = 1.5; + smoothnessG = factor; + smoothnessD = factor * 0.5; + + #ifdef COATED_TEXTURES + noiseFactor = 0.33; + #endif + } + } + } + } + } else { + if (mat < 10560) { + if (mat < 10552) { + if (mat < 10548) { // Glow Lichen + noSmoothLighting = true; + + #if GLOWING_LICHEN > 0 + float dotColor = dot(color.rgb, color.rgb); + emission = min(pow2(pow2(dotColor) * dotColor) * 1.4 + dotColor * 0.9, 6.0); + emission = mix(emission, dotColor * 1.5, min1(lViewPos / 96.0)); // Less noise in the distance + + #if GLOWING_LICHEN == 1 + float skyLightFactor = pow2(1.0 - min1(lmCoord.y * 2.9)); + emission *= skyLightFactor; + + color.r *= 1.0 + 0.15 * skyLightFactor; + #else + color.r *= 1.15; + #endif + #endif + } + else /*if (mat < 10552)*/ { // Enchanting Table:Base + float dotColor = dot(color.rgb, color.rgb); + if (dotColor < 0.19 && color.r < color.b) { + #include "/lib/materials/specificMaterials/terrain/obsidian.glsl" + } else if (color.g >= color.r) { + #include "/lib/materials/specificMaterials/terrain/diamondBlock.glsl" + } else { + smoothnessG = color.r * 0.3 + 0.1; + } + + #ifdef SNOWY_WORLD + snowFactor = 0.0; + #endif + } + } else { + if (mat < 10556) { // End Portal Frame:Inactive + noSmoothLighting = true; + + if (abs(color.r - color.g - 0.05) < 0.10) { + #include "/lib/materials/specificMaterials/terrain/endStone.glsl" + } else { + #include "/lib/materials/specificMaterials/terrain/endPortalFrame.glsl" + } + + #ifdef SNOWY_WORLD + snowFactor = 0.0; + #endif + } + else /*if (mat < 10560)*/ { // End Portal Frame:Active + noSmoothLighting = true; + + if (abs(color.r - color.g - 0.05) < 0.10) { + #include "/lib/materials/specificMaterials/terrain/endStone.glsl" + } else { + #include "/lib/materials/specificMaterials/terrain/endPortalFrame.glsl" + + vec2 absCoord = abs(fract(playerPos.xz + cameraPosition.xz) - 0.5); + float maxCoord = max(absCoord.x, absCoord.y); + if (maxCoord < 0.2505) { // End Portal Frame:Eye of Ender + smoothnessG = 0.5; + smoothnessD = 0.5; + emission = pow2(min(color.g, 0.25)) * 170.0 * (0.28 - maxCoord); + } else { + float minCoord = min(absCoord.x, absCoord.y); + if (CheckForColor(color.rgb, vec3(153, 198, 147)) + && minCoord > 0.25) { // End Portal Frame:Emissive Corner Bits + emission = 1.4; + color.rgb = vec3(0.45, 1.0, 0.6); + } + } + } + + #ifdef SNOWY_WORLD + snowFactor = 0.0; + #endif + } + } + } else { + if (mat < 10568) { + if (mat < 10564) { // Lantern + noSmoothLighting = true; + lmCoordM.x = 0.77; + + #include "/lib/materials/specificMaterials/terrain/lanternMetal.glsl" + + emission = 4.3 * max0(color.r - color.b); + emission += min(pow2(pow2(0.75 * dot(color.rgb, color.rgb))), 5.0); + color.gb *= pow(vec2(0.8, 0.7), vec2(sqrt(emission) * 0.5)); + + #ifdef DISTANT_LIGHT_BOKEH + DoDistantLightBokehMaterial(color, vec4(1.0, 0.6, 0.2, 1.0), emission, 5.0, lViewPos); + #endif + + #ifdef SNOWY_WORLD + snowFactor = 0.0; + #endif + } + else /*if (mat < 10568)*/ { // Soul Lantern + noSmoothLighting = true; + lmCoordM.x = min(lmCoordM.x, 0.77); // consistency748523 + + #include "/lib/materials/specificMaterials/terrain/lanternMetal.glsl" + + emission = 1.45 * max0(color.g - color.r * 2.0); + emission += 1.17 * min(pow2(pow2(0.55 * dot(color.rgb, color.rgb))), 3.5); + + #ifdef DISTANT_LIGHT_BOKEH + DoDistantLightBokehMaterial(color, vec4(0.5, 1.0, 1.0, 1.0), emission, 3.0, lViewPos); + #endif + + #ifdef SNOWY_WORLD + snowFactor = 0.0; + #endif + } + } else { + if (mat < 10572) { // Turtle Egg, Sniffer Egg + smoothnessG = (color.r + color.g) * 0.35; + smoothnessD = (color.r + color.g) * 0.25; + } + else /*if (mat < 10576)*/ { // Dragon Egg + emission = float(color.b > 0.1) * 10.0 + 1.25; + } + } + } + } + } else { + if (mat < 10608) { + if (mat < 10592) { + if (mat < 10584) { + if (mat < 10580) { // Smoker:Lit + lmCoordM.x *= 0.95; + + float dotColor = dot(color.rgb, color.rgb); + if (color.r > color.b * 2.0 && dotColor > 0.7) { + emission = 2.5 * dotColor; + color.r *= 1.5; + } else { + #include "/lib/materials/specificMaterials/terrain/cobblestone.glsl" + } + } + else /*if (mat < 10584)*/ { // Blast Furnace:Lit + lmCoordM.x *= 0.95; + + float dotColor = dot(color.rgb, color.rgb); + if (color.r > color.b * 2.0 && dotColor > 0.7) { + emission = pow2(color.g) * (20.0 - 13.7 * float(color.b > 0.25)); + color.r *= 1.5; + } else { + #include "/lib/materials/specificMaterials/terrain/cobblestone.glsl" + } + } + } else { + if (mat < 10588) { // + + } + else /*if (mat < 10592)*/ { // Respawn Anchor:Unlit + noSmoothLighting = true; + + #include "/lib/materials/specificMaterials/terrain/cryingObsidian.glsl" + emission += 0.2; + + #ifdef SNOWY_WORLD + snowFactor = 0.0; + #endif + } + } + } else { + if (mat < 10600) { + if (mat < 10596) { // Respawn Anchor:Lit + noSmoothLighting = true; + + #include "/lib/materials/specificMaterials/terrain/cryingObsidian.glsl" + + vec2 absCoord = abs(signMidCoordPos); + if (NdotU > 0.9 && max(absCoord.x, absCoord.y) < 0.754) { // Portal + highlightMult = 0.0; + smoothnessD = 0.0; + emission = pow2(color.r) * color.r * 16.0; + maRecolor = vec3(0.0); + } else if (color.r + color.g > 1.3) { // Respawn Anchor:Glowstone Part + emission = 4.5 * sqrt3(max0(color.r + color.g - 1.3)); + } + + emission += 0.3; + + #ifdef SNOWY_WORLD + snowFactor = 0.0; + #endif + } + else /*if (mat < 10600)*/ { // Redstone Wire:Lit + #include "/lib/materials/specificMaterials/terrain/redstoneBlock.glsl" + + #if COLORED_LIGHTING_INTERNAL == 0 + emission = pow2(min(color.r, 0.9)) * 4.0; + #else + vec3 colorP = color.rgb / glColor.rgb; + emission = pow2((colorP.r + color.r) * 0.5) * 3.5; + #endif + + color.gb *= 0.25; + } + } else { + if (mat < 10604) { // Redstone Wire:Unlit + #include "/lib/materials/specificMaterials/terrain/redstoneBlock.glsl" + } + else /*if (mat < 10608)*/ { // Redstone Torch + #include "/lib/materials/specificMaterials/terrain/redstoneTorch.glsl" + emission += 0.0001; // No light reducing during noon + + #ifdef DISTANT_LIGHT_BOKEH + DoDistantLightBokehMaterial(color, vec4(1.0, 0.0, 0.0, 1.0), emission, 5.0, lViewPos); + #endif + } + } + } + } else { + if (mat < 10624) { + if (mat < 10616) { + if (mat < 10612) { // Redstone Block + #include "/lib/materials/specificMaterials/terrain/redstoneBlock.glsl" + #ifdef EMISSIVE_REDSTONE_BLOCK + emission = 0.75 + 3.0 * pow2(pow2(color.r)); + color.gb *= 0.65; + + #ifdef SNOWY_WORLD + snowFactor = 0.0; + #endif + #endif + } + else /*if (mat < 10616)*/ { // Redstone Ore:Unlit + if (color.r - color.g > 0.2) { // Redstone Ore:Unlit:Redstone Part + #include "/lib/materials/specificMaterials/terrain/redstoneBlock.glsl" + #ifdef GLOWING_ORE_REDSTONE + emission = color.r * pow1_5(color.r) * 4.0; + color.gb *= 1.0 - 0.9 * min1(GLOWING_ORE_MULT); + emission *= GLOWING_ORE_MULT; + #endif + } else { // Redstone Ore:Unlit:Stone Part + #include "/lib/materials/specificMaterials/terrain/stone.glsl" + } + } + } else { + if (mat < 10620) { // Redstone Ore:Lit + if (color.r - color.g > 0.2) { // Redstone Ore:Lit:Redstone Part + #include "/lib/materials/specificMaterials/terrain/redstoneBlock.glsl" + emission = pow2(color.r) * color.r * 5.5; + color.gb *= 0.1; + } else { // Redstone Ore:Lit:Stone Part + #include "/lib/materials/specificMaterials/terrain/stone.glsl" + } + noSmoothLighting = true; + } + else /*if (mat < 10624)*/ { // Deepslate Redstone Ore:Unlit + if (color.r - color.g > 0.2) { // Deepslate Redstone Ore:Unlit:Redstone Part + #include "/lib/materials/specificMaterials/terrain/redstoneBlock.glsl" + #ifdef GLOWING_ORE_REDSTONE + emission = color.r * pow1_5(color.r) * 4.0; + color.gb *= 1.0 - 0.9 * min1(GLOWING_ORE_MULT); + emission *= GLOWING_ORE_MULT; + #endif + } else { // Deepslate Redstone Ore:Unlit:Deepslate Part + #include "/lib/materials/specificMaterials/terrain/deepslate.glsl" + } + } + } + } else { + if (mat < 10632) { + if (mat < 10628) { // Deepslate Redstone Ore:Lit + if (color.r - color.g > 0.2) { // Deepslate Redstone Ore:Lit:Redstone Part + #include "/lib/materials/specificMaterials/terrain/redstoneBlock.glsl" + emission = pow2(color.r) * color.r * 6.0; + color.gb *= 0.05; + } else { // Deepslate Redstone Ore:Lit:Deepslate Part + #include "/lib/materials/specificMaterials/terrain/deepslate.glsl" + } + noSmoothLighting = true; + } + else /*if (mat < 10632)*/ { // Cave Vines:No Glow Berries + subsurfaceMode = 1; + lmCoordM.x *= 0.875; + } + } else { + if (mat < 10636) { // Cave Vines:With Glow Berries + subsurfaceMode = 1; + lmCoordM.x *= 0.875; + + if (color.r > 0.64) { + emission = color.r < 0.75 ? 2.5 : 8.0; + color.rgb = color.rgb * vec3(1.0, 0.8, 0.6); + } + } + else /*if (mat < 10640)*/ { // Redstone Lamp:Unlit + materialMask = OSIEBCA; // Intense Fresnel + smoothnessG = color.r * 0.5 + 0.2; + float factor = pow2(smoothnessG); + highlightMult = factor * 2.0 + 1.0; + smoothnessD = min1(factor * 2.0); + } + } + } + } + } + } else { + if (mat < 10704) { + if (mat < 10672) { + if (mat < 10656) { + if (mat < 10648) { + if (mat < 10644) { // Redstone Lamp:Lit + noDirectionalShading = true; + lmCoordM.x = 0.89; + + materialMask = OSIEBCA; // Intense Fresnel + smoothnessG = color.r * 0.35 + 0.2; + float factor = pow2(smoothnessG); + highlightMult = factor * 2.0 + 1.0; + smoothnessD = min1(factor * 2.0); + + if (color.b > 0.1) { + float dotColor = dot(color.rgb, color.rgb); + #if MC_VERSION >= 11300 + emission = pow2(dotColor) * 1.0; + #else + emission = dotColor * 1.2; + #endif + color.rgb = pow1_5(color.rgb); + maRecolor = vec3(emission * 0.2); + } + + #ifdef DISTANT_LIGHT_BOKEH + DoDistantLightBokehMaterial(emission, 5.0, lViewPos); + #endif + } + else /*if (mat < 10648)*/ { // Repeater, Comparator + #if ANISOTROPIC_FILTER > 0 + color = texture2D(tex, texCoord); // Fixes artifacts + color.rgb *= glColor.rgb; + #endif + + vec3 absDif = abs(vec3(color.r - color.g, color.g - color.b, color.r - color.b)); + float maxDif = max(absDif.r, max(absDif.g, absDif.b)); + if (maxDif > 0.125 || color.b > 0.99) { // Redstone Parts + if (color.r < 0.999 && color.b > 0.4) color.gb *= 0.5; // Comparator:Emissive Wire + + #include "/lib/materials/specificMaterials/terrain/redstoneTorch.glsl" + } else { // Quartz Base + float factor = pow2(color.g) * 0.6; + + smoothnessG = factor; + highlightMult = 1.0 + 2.5 * factor; + smoothnessD = factor; + } + } + } else { + if (mat < 10652) { // Shroomlight + noSmoothLighting = true; noDirectionalShading = true; + lmCoordM = vec2(1.0, 0.0); + + float dotColor = dot(color.rgb, color.rgb); + emission = min(pow2(pow2(pow2(dotColor * 0.6))), 6.0) * 0.8 + 0.5; + + #ifdef DISTANT_LIGHT_BOKEH + DoDistantLightBokehMaterial(emission, 2.5, lViewPos); + #endif + } + else /*if (mat < 10656)*/ { // Campfire:Lit + #ifdef GBUFFERS_TERRAIN + vec3 fractPos = fract(playerPos + cameraPosition) - 0.5; + lmCoordM.x = pow2(pow2(smoothstep1(1.0 - 0.4 * dot(fractPos.xz, fractPos.xz)))); + #endif + + float dotColor = dot(color.rgb, color.rgb); + if (color.r > color.b && color.r - color.g < 0.15 && dotColor < 1.4) { + #include "/lib/materials/specificMaterials/terrain/oakWood.glsl" + } else if (color.r > color.b || dotColor > 2.9) { + noDirectionalShading = true; + emission = 3.5; + color.rgb *= sqrt1(GetLuminance(color.rgb)); + } + } + } + } else { + if (mat < 10664) { + if (mat < 10660) { // Soul Campfire:Lit + noSmoothLighting = true; + + float dotColor = dot(color.rgb, color.rgb); + if (color.r > color.b) { + #include "/lib/materials/specificMaterials/terrain/oakWood.glsl" + } else if (color.g - color.r > 0.1 || dotColor > 2.9) { + noDirectionalShading = true; + emission = 2.1; + color.rgb *= sqrt1(GetLuminance(color.rgb)); + } + + #ifdef SNOWY_WORLD + snowFactor = 0.0; + #endif + } + else /*if (mat < 10664)*/ { // Campfire:Unlit, Soul Campfire:Unlit + noSmoothLighting = true; + + if (color.r > color.b) { + #include "/lib/materials/specificMaterials/terrain/oakWood.glsl" + } + } + } else { + if (mat < 10668) { // Observer + if (color.r > 0.1 && color.g + color.b < 0.1) { + #include "/lib/materials/specificMaterials/terrain/redstoneTorch.glsl" + } else { + #include "/lib/materials/specificMaterials/terrain/cobblestone.glsl" + } + } + else /*if (mat < 10672)*/ { // Wool+, Carpet+ except Lime + #ifdef COATED_TEXTURES + noiseFactor = 0.77; + #endif + } + } + } + } else { + if (mat < 10688) { + if (mat < 10680) { + if (mat < 10676) { // Bone Block + smoothnessG = color.r * 0.2; + smoothnessD = smoothnessG; + + #ifdef GBUFFERS_TERRAIN + DoBrightBlockTweaks(color.rgb, 0.5, shadowMult, highlightMult); + #endif + + #ifdef COATED_TEXTURES + noiseFactor = 0.33; + #endif + } + else /*if (mat < 10680)*/ { // Barrel, Beehive, Bee Nest, Honeycomb Block + #include "/lib/materials/specificMaterials/terrain/cobblestone.glsl" + + #ifdef COATED_TEXTURES + noiseFactor = 0.66; + #endif + } + } else { + if (mat < 10684) { // Ochre Froglight + float frogPow = 8.0; + #include "/lib/materials/specificMaterials/terrain/froglights.glsl" + } + else /*if (mat < 10688)*/ { // Verdant Froglight + float frogPow = 16.0; + #include "/lib/materials/specificMaterials/terrain/froglights.glsl" + } + } + } else { + if (mat < 10696) { + if (mat < 10692) { // Pearlescent Froglight + float frogPow = 24.0; + #include "/lib/materials/specificMaterials/terrain/froglights.glsl" + } + else /*if (mat < 10696)*/ { // Reinforced Deepslate + if (abs(color.r - color.g) < 0.01) { // Reinforced Deepslate:Deepslate Part + #include "/lib/materials/specificMaterials/terrain/deepslate.glsl" + } else { // Reinforced Deepslate:Sculk + float boneFactor = max0(color.r * 1.25 - color.b); + + if (boneFactor < 0.0001) emission = 0.15; + + smoothnessG = min1(boneFactor * 1.7); + smoothnessD = smoothnessG; + } + } + } else { + if (mat < 10700) { // Sculk, Sculk Catalyst, Sculk Vein, Sculk Sensor:Unlit + float boneFactor = max0(color.r * 1.25 - color.b); + + if (boneFactor < 0.0001) { + emission = pow2(max0(color.g - color.r)) * 1.7; + + #ifdef GBUFFERS_TERRAIN + vec2 bpos = floor(playerPos.xz + cameraPosition.xz + 0.501) + + floor(playerPos.y + cameraPosition.y + 0.501); + bpos = bpos * 0.01 + 0.003 * frameTimeCounter; + emission *= pow2(texture2D(noisetex, bpos).r * pow1_5(texture2D(noisetex, bpos * 0.5).r)); + emission *= 6.0; + #endif + } + + smoothnessG = min1(boneFactor * 1.7); + smoothnessD = smoothnessG; + + #ifdef SNOWY_WORLD + snowFactor = 0.0; + #endif + } + else /*if (mat < 10704)*/ { // Sculk Shrieker + float boneFactor = max0(color.r * 1.25 - color.b); + + if (boneFactor < 0.0001) { + emission = pow2(max0(color.g - color.r)) * 2.0; + + #ifdef GBUFFERS_TERRAIN + vec2 coordFactor = abs(fract(playerPos.xz + cameraPosition.xz) - 0.5); + float coordFactorM = max(coordFactor.x, coordFactor.y); + if (coordFactorM < 0.43) emission += color.g * 7.0; + #endif + } + + smoothnessG = min1(boneFactor * 1.7); + smoothnessD = smoothnessG; + + #ifdef SNOWY_WORLD + snowFactor = 0.0; + #endif + } + } + } + } + } else { + if (mat < 10736) { + if (mat < 10720) { + if (mat < 10712) { + if (mat < 10708) { // Sculk Sensor:Lit + lmCoordM = vec2(0.0, 0.0); + emission = pow2(max0(color.g - color.r)) * 7.0 + 0.7; + } + else /*if (mat < 10712)*/ { // Spawner + smoothnessG = color.b + 0.2; + smoothnessD = smoothnessG; + + emission = 7.0 * float(CheckForColor(color.rgb, vec3(110, 4, 83))); + } + } else { + if (mat < 10716) { // Tuff++ + smoothnessG = color.r * 0.3; + smoothnessD = smoothnessG; + } + else /*if (mat < 10720)*/ { // Clay + highlightMult = 2.0; + smoothnessG = pow2(pow2(color.g)) * 0.5; + smoothnessG = min1(smoothnessG); + smoothnessD = smoothnessG * 0.7; + + #ifdef GBUFFERS_TERRAIN + DoOceanBlockTweaks(smoothnessD); + #endif + + #ifdef COATED_TEXTURES + noiseFactor = 0.77; + #endif + } + } + } else { + if (mat < 10728) { + if (mat < 10724) { // Ladder + noSmoothLighting = true; + } + else /*if (mat < 10728)*/ { // Gravel, Suspicious Gravel + #include "/lib/materials/specificMaterials/terrain/stone.glsl" + + #ifdef GBUFFERS_TERRAIN + DoOceanBlockTweaks(smoothnessD); + #endif + + #ifdef COATED_TEXTURES + noiseFactor = 1.25; + #endif + } + } else { + if (mat < 10732) { // Flower Pot, Potted Stuff:Without Subsurface + noSmoothLighting = true; + } + else /*if (mat < 10736)*/ { // Potted Stuff:With Subsurface + noSmoothLighting = true; + + float NdotE = dot(normalM, eastVec); + if (abs(abs(NdotE) - 0.5) < 0.4) { + subsurfaceMode = 1, noDirectionalShading = true; + } + } + } + } + } else { + if (mat < 10752) { + if (mat < 10744) { + if (mat < 10740) { // Structure Block, Jigsaw Block + float blockRes = absMidCoordPos.x * atlasSize.x; + vec2 signMidCoordPosM = (floor((signMidCoordPos + 1.0) * blockRes) + 0.5) / blockRes - 1.0; + float dotsignMidCoordPos = dot(signMidCoordPosM, signMidCoordPosM); + float lBlockPosM = pow2(max0(1.0 - 1.125 * pow2(dotsignMidCoordPos))); + + emission = 4.5 * lBlockPosM; + color.rgb = pow2(color.rgb); + } + else /*if (mat < 10744)*/ { // Chain + noSmoothLighting = true; + lmCoordM.x = min(lmCoordM.x, 0.77); // consistency748523 + + #include "/lib/materials/specificMaterials/terrain/lanternMetal.glsl" + } + } else { + if (mat < 10748) { // Soul Sand, Soul Soil + smoothnessG = color.r * 0.4; + smoothnessD = color.r * 0.25; + } + else /*if (mat < 10752)*/ { // Dried Kelp Block + smoothnessG = pow2(color.b) * 0.8; + smoothnessD = smoothnessG; + + #ifdef COATED_TEXTURES + noiseFactor = 0.5; + #endif + } + } + } else { + if (mat < 10760) { + if (mat < 10756) { // Bamboo + if (absMidCoordPos.x > 0.005) + subsurfaceMode = 1, noSmoothLighting = true, noDirectionalShading = true; + // No further material properties as bamboo jungles are already slow + } + else /*if (mat < 10760)*/ { // Block of Bamboo, Bamboo Planks++ + #include "/lib/materials/specificMaterials/planks/bambooPlanks.glsl" + } + } else { + if (mat < 10764) { // Cherry Planks++ + #include "/lib/materials/specificMaterials/planks/cherryPlanks.glsl" + } + else /*if (mat < 10768)*/ { // Cherry Log, Cherry Wood + if (color.g > 0.33) { // Cherry Log:Clean Part + #include "/lib/materials/specificMaterials/planks/cherryPlanks.glsl" + } else { // Cherry Log:Wood Part, Cherry Wood + smoothnessG = pow2(color.r); + smoothnessD = smoothnessG; + } + } + } + } + } + } + } + } else { + if (mat < 10896) { + if (mat < 10832) { + if (mat < 10800) { + if (mat < 10784) { + if (mat < 10776) { + if (mat < 10772) { // Torchflower + subsurfaceMode = 1, noSmoothLighting = true, noDirectionalShading = true; + + #ifdef GBUFFERS_TERRAIN + DoFoliageColorTweaks(color.rgb, shadowMult, snowMinNdotU, viewPos, nViewPos, lViewPos, dither); + + emission = (1.0 - abs(signMidCoordPos.x)) * max0(0.7 - abs(signMidCoordPos.y + 0.7)); + emission = pow1_5(emission) * 2.5; + #endif + + #if SHADOW_QUALITY == -1 + shadowMult *= 1.0 - 0.3 * (signMidCoordPos.y + 1.0) * (1.0 - abs(signMidCoordPos.x)) + + 0.5 * (1.0 - signMidCoordPos.y) * invNoonFactor; // consistency357381 + #endif + } + else /*if (mat < 10776)*/ { // Potted Torchflower + noSmoothLighting = true; + + float NdotE = dot(normalM, eastVec); + if (abs(abs(NdotE) - 0.5) < 0.4) { + subsurfaceMode = 1, noDirectionalShading = true; + + #ifdef GBUFFERS_TERRAIN + emission = (1.0 - abs(signMidCoordPos.x)) * max0(0.7 - abs(signMidCoordPos.y + 0.7)); + emission = pow1_5(emission) * 2.5; + #endif + } + } + } else { + if (mat < 10780) { // Crimson Fungus, Warped Fungus + noSmoothLighting = true; + + if (color.r > 0.91) { + emission = 3.0 * color.g; + color.r *= 1.2; + maRecolor = vec3(0.1); + } + } + else /*if (mat < 10784)*/ { // Potted Crimson Fungus, Potted Warped Fungus + noSmoothLighting = true; + + float NdotE = dot(normalM, eastVec); + if (abs(abs(NdotE) - 0.5) < 0.4) { + if (color.r > 0.91) { + emission = 3.0 * color.g; + color.r *= 1.2; + maRecolor = vec3(0.1); + } + } + } + } + } else { + if (mat < 10792) { + if (mat < 10788) { // Calibrated Sculk Sensor:Unlit + #if ANISOTROPIC_FILTER == 0 + vec4 checkColor = color; + #else + vec4 checkColor = texture2D(tex, texCoord); // Fixes artifacts + #endif + if (checkColor.r + checkColor.b > checkColor.g * 2.2 || checkColor.r > 0.99) { // Amethyst Part + #if GLOWING_AMETHYST >= 1 && defined GBUFFERS_TERRAIN + vec2 absCoord = abs(signMidCoordPos); + float maxBlockPos = max(absCoord.x, absCoord.y); + emission = pow2(max0(1.0 - maxBlockPos) * color.g) * 5.4 + 1.2 * color.g; + + color.g *= 1.0 - emission * 0.07; + color.rgb *= color.g; + #endif + + #ifdef COATED_TEXTURES + noiseFactor = 0.66; + #endif + } else { // Sculk Part + float boneFactor = max0(color.r * 1.25 - color.b); + + if (boneFactor < 0.0001) emission = pow2(max0(color.g - color.r)); + + smoothnessG = min1(boneFactor * 1.7); + smoothnessD = smoothnessG; + } + + #ifdef SNOWY_WORLD + snowFactor = 0.0; + #endif + } + else /*if (mat < 10792)*/ { // Calibrated Sculk Sensor:Lit + lmCoordM = vec2(0.0, 0.0); + + #if ANISOTROPIC_FILTER == 0 + vec4 checkColor = color; + #else + vec4 checkColor = texture2D(tex, texCoord); // Fixes artifacts + #endif + if (checkColor.r + checkColor.b > checkColor.g * 2.2 || checkColor.r > 0.99) { // Amethyst Part + lmCoordM.x = 1.0; + + #if GLOWING_AMETHYST >= 1 && defined GBUFFERS_TERRAIN + vec2 absCoord = abs(signMidCoordPos); + float maxBlockPos = max(absCoord.x, absCoord.y); + emission = pow2(max0(1.0 - maxBlockPos) * color.g) * 5.4 + 1.2 * color.g; + + color.g *= 1.0 - emission * 0.07; + color.rgb *= color.g; + #endif + + #ifdef COATED_TEXTURES + noiseFactor = 0.66; + #endif + } else { // Sculk Part + emission = pow2(max0(color.g - color.r)) * 7.0 + 0.7; + } + } + } else { + if (mat < 10796) { // Oak Door + noSmoothLighting = true; + #include "/lib/materials/specificMaterials/planks/oakPlanks.glsl" + } + else /*if (mat < 10800)*/ { // Spruce Door + noSmoothLighting = true; + #include "/lib/materials/specificMaterials/planks/sprucePlanks.glsl" + } + } + } + } else { + if (mat < 10816) { + if (mat < 10808) { + if (mat < 10804) { // Birch Door + noSmoothLighting = true; + #include "/lib/materials/specificMaterials/planks/birchPlanks.glsl" + } + else /*if (mat < 10808)*/ { // Jungle Door + noSmoothLighting = true; + #include "/lib/materials/specificMaterials/planks/junglePlanks.glsl" + } + } else { + if (mat < 10812) { // Acacia Door + noSmoothLighting = true; + #include "/lib/materials/specificMaterials/planks/acaciaPlanks.glsl" + } + else /*if (mat < 10816)*/ { // Dark Oak Door + noSmoothLighting = true; + #include "/lib/materials/specificMaterials/planks/darkOakPlanks.glsl" + } + } + } else { + if (mat < 10824) { + if (mat < 10820) { // Mangrove Door + noSmoothLighting = true; + #include "/lib/materials/specificMaterials/planks/mangrovePlanks.glsl" + } + else /*if (mat < 10824)*/ { // Crimson Door + noSmoothLighting = true; + #include "/lib/materials/specificMaterials/planks/crimsonPlanks.glsl" + } + } else { + if (mat < 10828) { // Warped Door + noSmoothLighting = true; + #include "/lib/materials/specificMaterials/planks/warpedPlanks.glsl" + } + else /*if (mat < 10832)*/ { // Bamboo Door + noSmoothLighting = true; + #include "/lib/materials/specificMaterials/planks/bambooPlanks.glsl" + } + } + } + } + } else { + if (mat < 10864) { + if (mat < 10848) { + if (mat < 10840) { + if (mat < 10836) { // Cherry Door + noSmoothLighting = true; + #include "/lib/materials/specificMaterials/planks/cherryPlanks.glsl" + } + else /*if (mat < 10840)*/ { // Brewing Stand + #ifdef GBUFFERS_TERRAIN + vec3 worldPos = playerPos + cameraPosition; + vec3 fractPos = fract(worldPos.xyz); + vec3 coordM = abs(fractPos.xyz - 0.5); + float cLength = dot(coordM, coordM) * 1.3333333; + cLength = pow2(1.0 - cLength); + + if (color.r + color.g > color.b * 3.0 && max(coordM.x, coordM.z) < 0.07) { + emission = 2.5 * pow1_5(cLength); + } else { + lmCoordM.x = max(lmCoordM.x * 0.9, cLength); + + #include "/lib/materials/specificMaterials/terrain/cobblestone.glsl" + } + #else + emission = max0(color.r + color.g - color.b * 1.8 - 0.3) * 2.2; + #endif + } + } else { + if (mat < 10844) { // Lime Concrete + smoothnessG = 0.4; + highlightMult = 1.5; + smoothnessD = 0.3; + + #ifdef COATED_TEXTURES + noiseFactor = 0.2; + #endif + + #ifdef GREEN_SCREEN_LIME + materialMask = OSIEBCA * 240.0; // Green Screen Lime Blocks + #endif + } + else /*if (mat < 10848)*/ { // Lime Carpet, Lime Wool + #ifdef COATED_TEXTURES + noiseFactor = 0.77; + #endif + + #ifdef GREEN_SCREEN_LIME + materialMask = OSIEBCA * 240.0; // Green Screen Lime Blocks + #endif + } + } + } else { + if (mat < 10856) { + if (mat < 10852) { // Crafter + smoothnessG = pow2(color.b); + smoothnessD = max(smoothnessG, 0.2); + + if (color.r > 2.5 * (color.g + color.b)) { + emission = 4.0; + color.rgb *= color.rgb; + } + } + else /*if (mat < 10856)*/ { // Copper Bulb:BrighterOnes + #include "/lib/materials/specificMaterials/terrain/copperBulb.glsl" + } + } else { + if (mat < 10860) { // Copper Bulb:DimmerOnes + #include "/lib/materials/specificMaterials/terrain/copperBulb.glsl" + emission *= 0.85; + } + else /*if (mat < 10864)*/ { // Copper Door+ + noSmoothLighting = true; + #include "/lib/materials/specificMaterials/terrain/copperBlock.glsl" + } + } + } + } else { + if (mat < 10880) { + if (mat < 10872) { + if (mat < 10868) { // Copper Trapdoor+ + #include "/lib/materials/specificMaterials/terrain/copperBlock.glsl" + } + else /*if (mat < 10872)*/ { // Trial Spawner:NotOminous:Active, Vault:NotOminous:Active + smoothnessG = max0(color.b - color.r * 0.5); + smoothnessD = smoothnessG; + + emission = max0(color.r - color.b) * 3.0; + color.rgb = pow(color.rgb, vec3(1.0 + 0.5 * sqrt(emission))); + } + } else { + if (mat < 10876) { // Trial Spawner:Inactive, Vault:Inactive + smoothnessG = max0(color.b - color.r * 0.5); + smoothnessD = smoothnessG; + } + else /*if (mat < 10880)*/ { // Trial Spawner:Ominous:Active, Vault:Ominous:Active + float maxComponent = max(max(color.r, color.g), color.b); + float minComponent = min(min(color.r, color.g), color.b); + float saturation = (maxComponent - minComponent) / (1.0 - abs(maxComponent + minComponent - 1.0)); + + smoothnessG = max0(color.b - pow2(saturation) * 0.5) * 0.5 + 0.1; + smoothnessD = smoothnessG; + + emission = saturation > 0.5 ? 4.0 : 0.0; + color.rgb = pow(color.rgb, vec3(1.0 + (0.3 + 0.5 * color.r) * emission)); + } + } + } else { + if (mat < 10888) { + if (mat < 10884) { // Several Non-solid Blocks + + } + else /*if (mat < 10888)*/ { // Weeping Vines, Twisting Vines + noSmoothLighting = true; + + #if defined COATED_TEXTURES && defined GBUFFERS_TERRAIN + doTileRandomisation = false; + #endif + + if (color.r > 0.91) { + emission = 3.0 * color.g; + color.r *= 1.2; + maRecolor = vec3(0.1); + } + } + } else { + if (mat < 10892) { // Hay Block + smoothnessG = pow2(color.r) * 0.5; + highlightMult *= 1.5; + smoothnessD = float(color.r > color.g * 2.0) * 0.3; + } + else /*if (mat < 10896)*/ { // Iron Door + noSmoothLighting = true; + #include "/lib/materials/specificMaterials/terrain/ironBlock.glsl" + color.rgb *= 0.9; + } + } + } + } + } + } else { + if (mat < 10960) { + if (mat < 10928) { + if (mat < 10900) { // Iron Trapdoor + #include "/lib/materials/specificMaterials/terrain/ironBlock.glsl" + color.rgb *= 0.9; + } + else if (mat < 10924) { // Candles:Lit, Candle Cakes:Lit + #include "/lib/materials/specificMaterials/terrain/candle.glsl" + } + else /*if (mat < 10928)*/ { // Open Eyeblossom + subsurfaceMode = 1, noSmoothLighting = true, noDirectionalShading = true; + + #ifdef GBUFFERS_TERRAIN + DoFoliageColorTweaks(color.rgb, shadowMult, snowMinNdotU, viewPos, nViewPos, lViewPos, dither); + + #ifdef COATED_TEXTURES + doTileRandomisation = false; + #endif + #endif + + #if SHADOW_QUALITY == -1 + shadowMult *= 1.0 - 0.3 * (signMidCoordPos.y + 1.0) * (1.0 - abs(signMidCoordPos.x)) + + 0.5 * (1.0 - signMidCoordPos.y) * invNoonFactor; // consistency357381 + #endif + + if (color.r > 0.7 && color.r > color.g * 1.2 && color.g > color.b * 2.0) { // Emissive Part + lmCoordM.x = 0.5; + emission = 5.0 * color.g; + color.rgb *= color.rgb; + } + } + } else { + if (mat < 10944) { + if (mat < 10936) { + if (mat < 10932) { // Pale Oak Planks++ + #include "/lib/materials/specificMaterials/planks/paleOakPlanks.glsl" + } + else /*if (mat < 10936)*/ { // // Pale Oak Log, Pale Oak Wood + if (color.g > 0.45) { // Pale Oak Log:Clean Part + #include "/lib/materials/specificMaterials/planks/paleOakPlanks.glsl" + } else { // Pale Oak Log:Wood Part, Pale Oak Wood + #include "/lib/materials/specificMaterials/terrain/paleOakWood.glsl" + } + } + } else { + if (mat < 10940) { // Pale Oak Door + noSmoothLighting = true; + #include "/lib/materials/specificMaterials/planks/paleOakPlanks.glsl" + } + else /*if (mat < 10944)*/ { // Resin++ + smoothnessG = color.r * 0.25; + smoothnessD = smoothnessG; + } + } + } else { + if (mat < 10952) { + if (mat < 10948) { // Creaking Heart: Inactive + #include "/lib/materials/specificMaterials/terrain/paleOakWood.glsl" + } + else /*if (mat < 10952)*/ { // Creaking Heart: Active + #include "/lib/materials/specificMaterials/terrain/paleOakWood.glsl" + + if (color.r + color.g > color.b * 4.0) { + emission = pow2(color.r) * 2.5 + 0.2; + } + } + } else { + if (mat < 10956) { // Snow: Layers 1 to 7 + #include "/lib/materials/specificMaterials/terrain/snow.glsl" + + #if defined GBUFFERS_TERRAIN && defined TAA + float snowFadeOut = 0.0; + snowFadeOut = clamp01((playerPos.y) * 0.1); + snowFadeOut *= clamp01((lViewPos - 64.0) * 0.01); + + if (dither + 0.25 < snowFadeOut) discard; + #endif + } + else /*if (mat < 10960)*/ { // Target Block: Inactive + smoothnessG = pow2(color.r) * 0.5; + smoothnessD = smoothnessG * 0.5; + } + } + } + } + } else { + if (mat < 10992) { + if (mat < 10976) { + if (mat < 10968) { + if (mat < 10964) { // Target Block: Active + smoothnessG = pow2(color.r) * 0.5; + smoothnessD = smoothnessG * 0.5; + + if (color.r > color.g + color.b) { + if (CheckForColor(color.rgb, vec3(220, 74, 74))) { + emission = 5.0; + color.rgb *= mix(vec3(1.0), pow2(color.rgb), 0.9); + } else { + emission = 3.0; + color.rgb *= pow2(color.rgb); + } + } + } + else /*if (mat < 10968)*/ { // Sponge + smoothnessG = pow2(color.g) * 0.2; + smoothnessD = smoothnessG * 0.5; + } + } else { + if (mat < 10972) { // Wet Sponge + smoothnessG = color.g * 0.75; + highlightMult = 0.3; + smoothnessD = smoothnessG * 0.25; + } + else /*if (mat < 10976)*/ { // + + } + } + } else { + if (mat < 10984) { + if (mat < 10980) { // + + } + else /*if (mat < 10984)*/ { // + + } + } else { + if (mat < 10988) { // + + } + else /*if (mat < 10992)*/ { // + + } + } + } + } else { + if (mat < 11008) { + if (mat < 11000) { + if (mat < 10996) { // + + } + else /*if (mat < 11000)*/ { // + + } + } else { + if (mat < 11004) { // + + } + else /*if (mat < 11008)*/ { // + + } + } + } else { + if (mat < 11016) { + if (mat < 11012) { // + + } + else /*if (mat < 11016)*/ { // + + } + } else { + if (mat < 11020) { // + + } + else /*if (mat < 11024)*/ { // + + } + } + } + } + } + } + } + } +} +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialHandling/translucentMaterials.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialHandling/translucentMaterials.glsl new file mode 100644 index 0000000..8338098 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialHandling/translucentMaterials.glsl @@ -0,0 +1,140 @@ +if (mat < 32008) { + if (mat < 30016) { + if (mat < 30008) { + if (mat == 30000) { // + + } else if (mat == 30004) { // + + } + } else { + if (mat == 30008) { // Tinted Glass + #ifdef CONNECTED_GLASS_EFFECT + uint voxelID = uint(254); + bool isPane = false; + DoConnectedGlass(colorP, color, noGeneratedNormals, playerPos, worldGeoNormal, voxelID, isPane); + #endif + color.a = pow(color.a, 1.0 - fresnel * 0.65); + reflectMult = 0.75; + } else /*if (mat == 30012)*/ { // Slime Block + translucentMultCalculated = true; + reflectMult = 0.7; + translucentMult.rgb = pow2(color.rgb) * 0.2; + + smoothnessG = color.g * 0.7; + highlightMult = 2.5; + } + } + } else { + if (mat < 32000) { + if (mat < 31000) { + if (mat == 30016) { // Honey Block + translucentMultCalculated = true; + reflectMult = 1.0; + translucentMult.rgb = pow2(color.rgb) * 0.2; + + smoothnessG = color.r * 0.7; + highlightMult = 2.5; + } else /*if (mat == 30020)*/ { // Nether Portal + #ifdef SPECIAL_PORTAL_EFFECTS + #include "/lib/materials/specificMaterials/translucents/netherPortal.glsl" + #endif + } + } else { // (31XXX) + if (mat % 2 == 0) { // Stained Glass + #ifdef CONNECTED_GLASS_EFFECT + uint voxelID = uint(200 + (mat - 31000) / 2); + bool isPane = false; + DoConnectedGlass(colorP, color, noGeneratedNormals, playerPos, worldGeoNormal, voxelID, isPane); + #endif + #include "/lib/materials/specificMaterials/translucents/stainedGlass.glsl" + } else /*if (mat % 2 == 1)*/ { // Stained Glass Pane + #ifdef CONNECTED_GLASS_EFFECT + uint voxelID = uint(200 + (mat - 31000) / 2); + bool isPane = true; + DoConnectedGlass(colorP, color, noGeneratedNormals, playerPos, worldGeoNormal, voxelID, isPane); + #endif + #include "/lib/materials/specificMaterials/translucents/stainedGlass.glsl" + noSmoothLighting = true; + } + } + } else { + if (mat == 32000) { // Water + #include "/lib/materials/specificMaterials/translucents/water.glsl" + } else /*if (mat == 32004)*/ { // Ice + smoothnessG = pow2(color.g) * color.g; + highlightMult = pow2(min1(pow2(color.g) * 1.5)) * 3.5; + + reflectMult = 0.7; + } + } + } +} else { + if (mat < 32024) { + if (mat < 32016) { + if (mat == 32008) { // Glass + #ifdef CONNECTED_GLASS_EFFECT + uint voxelID = uint(217); + bool isPane = false; + DoConnectedGlass(colorP, color, noGeneratedNormals, playerPos, worldGeoNormal, voxelID, isPane); + #endif + #include "/lib/materials/specificMaterials/translucents/glass.glsl" + } else /*if (mat == 32012)*/ { // Glass Pane + #ifdef CONNECTED_GLASS_EFFECT + uint voxelID = uint(218); + bool isPane = true; + DoConnectedGlass(colorP, color, noGeneratedNormals, playerPos, worldGeoNormal, voxelID, isPane); + #endif + if (color.a < 0.001 && abs(NdotU) > 0.95) discard; // Fixing artifacts on CTM/Opti connected glass panes + #include "/lib/materials/specificMaterials/translucents/glass.glsl" + noSmoothLighting = true; + } + } else { + if (mat == 32016) { // Beacon + lmCoordM.x = 0.88; + + translucentMultCalculated = true; + translucentMult = vec4(0.0, 0.0, 0.0, 1.0); + + if (color.b > 0.5) { + if (color.g - color.b < 0.01 && color.g < 0.99) { + #include "/lib/materials/specificMaterials/translucents/glass.glsl" + } else { // Beacon:Center + lmCoordM = vec2(0.0); + noDirectionalShading = true; + + float lColor = length(color.rgb); + vec3 baseColor = vec3(0.1, 1.0, 0.92); + if (lColor > 1.5) color.rgb = baseColor + 0.22; + else if (lColor > 1.3) color.rgb = baseColor + 0.15; + else if (lColor > 1.15) color.rgb = baseColor + 0.09; + else color.rgb = baseColor + 0.05; + emission = 4.0; + } + } else { // Beacon:Obsidian + float factor = color.r * 1.5; + + smoothnessG = factor; + highlightMult = 2.0 + min1(smoothnessG * 2.0) * 1.5; + smoothnessG = min1(smoothnessG); + } + + } else /*if (mat == 32020)*/ { // + + } + } + } else { + if (mat < 32032) { + if (mat == 32024) { // + + } else /*if (mat == 32028)*/ { // + + } + } else { + if (mat == 32032) { // + + } else /*if (mat == 32036)*/ { // + + } + } + } +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/anisotropicFiltering.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/anisotropicFiltering.glsl new file mode 100644 index 0000000..3e51599 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/anisotropicFiltering.glsl @@ -0,0 +1,60 @@ +/* + This file is specifically licensed with Mozilla Public License Version 2.0. + You can get a copy from https://www.mozilla.org/MPL/2.0/ +*/ + +float manualDeterminant(mat2 matrix) { + return matrix[0].x * matrix[1].y - matrix[0].y * matrix[1].x; +} + +mat2 inverseM(mat2 m) { + #if MC_VERSION >= 11700 + return inverse(m); + #else + mat2 adj; + adj[0][0] = m[1][1]; + adj[0][1] = -m[0][1]; + adj[1][0] = -m[1][0]; + adj[1][1] = m[0][0]; + return adj / manualDeterminant(m); + #endif +} + +vec4 textureAF(sampler2D texSampler, vec2 uv) { + vec2 spriteDimensions = vec2(spriteBounds.z - spriteBounds.x, spriteBounds.w - spriteBounds.y); + + mat2 J = inverseM(mat2(dFdx(uv), dFdy(uv))); + J = transpose(J)*J; + float d = manualDeterminant(J), t = J[0][0]+J[1][1], + D = sqrt(abs(t*t-4.001*d)), // using 4.001 instead of 4.0 fixes a rare texture glitch with square texture atlas + V = (t-D)/2.0, v = (t+D)/2.0, + M = 1.0/sqrt(V), m = 1./sqrt(v); + vec2 A = M * normalize(vec2(-J[0][1], J[0][0]-V)); + + float lod = 0.0; + #if ANISOTROPIC_FILTER >= 8 && defined GBUFFERS_TERRAIN + // Fix257062 - Checking if absMidCoordPos is fine or else miplevel will be broken. This can be an issue for flowing lava. + if (absMidCoordPos.x > 0.0001) + // Excluding cutout blocks for better looks + if (texture2DLod(texSampler, uv, 10000.0).a == 1.0) + lod = miplevel * 0.4; + #endif + + float samplesDiv2 = ANISOTROPIC_FILTER / 2.0; + vec2 ADivSamples = A / ANISOTROPIC_FILTER; + + vec4 filteredColor = vec4(0.0); + vec4 spriteBoundsM = mix(spriteBounds, vec4(midCoord, midCoord), 0.0001); // Fixes some mods causing issues with cutout blocks + for (float i = -samplesDiv2 + 0.5; i < samplesDiv2; i++) { + vec2 sampleUV = uv + ADivSamples * i; + sampleUV = clamp(sampleUV, spriteBoundsM.xy, spriteBoundsM.zw); + vec4 colorSample = texture2DLod(texSampler, sampleUV, lod); + + filteredColor.rgb += colorSample.rgb * colorSample.a; + filteredColor.a += colorSample.a; + } + filteredColor.rgb /= filteredColor.a; + filteredColor.a /= ANISOTROPIC_FILTER; + + return filteredColor; +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/coatedTextures.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/coatedTextures.glsl new file mode 100644 index 0000000..41591f1 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/coatedTextures.glsl @@ -0,0 +1,30 @@ +const float packSizeNT = 64.0; + +void CoatTextures(inout vec3 color, float noiseFactor, vec3 playerPos, bool doTileRandomisation) { + #ifndef ENTITY_GN_AND_CT + #if defined GBUFFERS_ENTITIES || defined GBUFFERS_HAND + return; + #endif + #endif + + #ifndef SAFER_GENERATED_NORMALS + vec2 noiseCoord = floor(midCoordPos / 16.0 * packSizeNT * atlasSizeM) / packSizeNT / 3.0; + #else + vec2 offsetR = max(absMidCoordPos.x, absMidCoordPos.y) * vec2(float(atlasSizeM.y) / float(atlasSizeM.x), 1.0); + vec2 noiseCoord = floor(midCoordPos / 2.0 * packSizeNT / offsetR) / packSizeNT / 3.0; + #endif + + if (doTileRandomisation) { + vec3 floorWorldPos = floor(playerPos + cameraPosition + 0.001); + noiseCoord += 0.84 * (floorWorldPos.xz + floorWorldPos.y); + } + + float noiseTexture = texture2D(noisetex, noiseCoord).r; + noiseTexture = noiseTexture + 0.6; + float colorBrightness = dot(color, color) * 0.3; + #define COATED_TEXTURE_MULT_M COATED_TEXTURE_MULT * 0.0027 + noiseFactor *= COATED_TEXTURE_MULT_M * max0(1.0 - colorBrightness); + noiseFactor *= max(1.0 - miplevel * 0.25, 0.0); + noiseTexture = pow(noiseTexture, noiseFactor); + color *= noiseTexture; +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/connectedGlass.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/connectedGlass.glsl new file mode 100644 index 0000000..f6b3f7d --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/connectedGlass.glsl @@ -0,0 +1,117 @@ +ivec3[6] glassOffsets = ivec3[]( + ivec3( 1, 0, 0), + ivec3(-1, 0, 0), + ivec3( 0, 1, 0), + ivec3( 0,-1, 0), + ivec3( 0, 0, 1), + ivec3( 0, 0,-1) +); + +ivec3[12] glassCornerOffsets = ivec3[]( + ivec3( 1, 1, 0), + ivec3( 1,-1, 0), + ivec3(-1, 1, 0), + ivec3(-1,-1, 0), + ivec3( 0, 1, 1), + ivec3( 0, 1,-1), + ivec3( 0,-1, 1), + ivec3( 0,-1,-1), + ivec3( 1, 0, 1), + ivec3( 1, 0,-1), + ivec3(-1, 0, 1), + ivec3(-1, 0,-1) +); + +vec2 GetModifiedMidCoord() { + float epsilon1 = 0.00001; + vec2 midCoord = texCoord - signMidCoordPos * absMidCoordPos; + return midCoord - epsilon1; +} + +void DoSimpleConnectedGlass(inout vec4 color) { + color = texture2DLod(tex, GetModifiedMidCoord(), 0); +} + +#ifdef GBUFFERS_WATER + void DoConnectedGlass(inout vec4 colorP, inout vec4 color, inout bool noGeneratedNormals, vec3 playerPos, vec3 worldGeoNormal, uint voxelID, bool isPane) { + vec3 worldGeoNormalM = vec3( // Fixes Iris 1.8 normal precision issues causing the coordinates to be imperfect + round(worldGeoNormal.x), + round(worldGeoNormal.y), + round(worldGeoNormal.z) + ); + vec3 playerPosM = playerPos - worldGeoNormalM * 0.25; + vec3 voxelPos = SceneToVoxel(playerPosM); + + if (CheckInsideVoxelVolume(voxelPos)) { + #if IRIS_VERSION >= 10800 + float epsilon2 = 0.0; + #else + float epsilon2 = 0.001; + #endif + float pixelOffset = 0.5 / (absMidCoordPos.y * atlasSize.y); + float pixelOffsetPlus = pixelOffset + epsilon2; + float pixelOffsetMinus = pixelOffset - epsilon2; + + colorP = texture2DLod(tex, texCoord, 0); + vec4 colorPvanilla = colorP; + + vec2 midCoordM = GetModifiedMidCoord(); + vec3 worldPos = playerPosM + cameraPositionBestFract; + vec3 floorWorldPos = floor(worldPos); + + // Remove edges + for (int i = 0; i < 6; i++) { + uint voxel = texelFetch(voxel_sampler, ivec3(voxelPos) + glassOffsets[i], 0).r; + if (voxel == voxelID) { + if (floor(worldPos + glassOffsets[i] * pixelOffsetPlus) != floorWorldPos) { + colorP = texture2DLod(tex, midCoordM, 0); + } + #ifdef GENERATED_NORMALS + if (floor(worldPos + glassOffsets[i] * pixelOffsetPlus * 1.25) != floorWorldPos) { + noGeneratedNormals = true; + } + #endif + } + } + + // Fixes the connections by restoring the edges that aren't connected + for (int i = 0; i < 6; i++) { + uint voxel = texelFetch(voxel_sampler, ivec3(voxelPos) + glassOffsets[i], 0).r; + if (voxel != voxelID) { + //if (floor(worldPos + glassOffsets[i] * 0.0625) != floorWorldPos) { + if (floor(worldPos + glassOffsets[i] * pixelOffsetMinus) != floorWorldPos) { + colorP = colorPvanilla; + } + } + } + + if (isPane) { + // Fixes lines between layers of glass panes + if (NdotU > 0.9) { + uint voxel = texelFetch(voxel_sampler, ivec3(voxelPos) + ivec3(0, 1, 0), 0).r; + if (voxel == voxelID) discard; + } + if (NdotU < -0.9) { + uint voxel = texelFetch(voxel_sampler, ivec3(voxelPos) - ivec3(0, 1, 0), 0).r; + if (voxel == voxelID) discard; + } + } + + #ifdef CONNECTED_GLASS_CORNER_FIX + else { + // Restores corners + for (int i = 0; i < 12; i++) { + uint voxel = texelFetch(voxel_sampler, ivec3(voxelPos) + glassCornerOffsets[i], 0).r; + if (voxel != voxelID) { + if (floor((worldPos - glassCornerOffsets[i] * (1.0 - pixelOffsetMinus))) == floorWorldPos) { + colorP = colorPvanilla; + } + } + } + } + #endif + + color = colorP * vec4(glColor.rgb, 1.0); + } + } +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/customEmission.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/customEmission.glsl new file mode 100644 index 0000000..eb7465d --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/customEmission.glsl @@ -0,0 +1,35 @@ +#ifndef INCLUDE_CUSTOM_EMISSION +#define INCLUDE_CUSTOM_EMISSION + +float GetCustomEmission(vec4 specularMap, vec2 texCoordM) { + #if CUSTOM_EMISSION_INTENSITY > 0 + #if RP_MODE == 2 || RP_MODE == 1 && IPBR_EMISSIVE_MODE == 2 // seuspbr + float emission = specularMap.b; + #elif RP_MODE == 3 || RP_MODE == 1 && IPBR_EMISSIVE_MODE == 3 // labPBR + float emission = specularMap.a < 1.0 ? specularMap.a : 0.0; + + vec4 specularMapL0 = texture2DLod(specular, texCoordM, 0); + float emissionL0 = specularMapL0.a < 1.0 ? specularMapL0.a : 0.0; + emission = min(emission, emissionL0); // Fixes issues caused by mipmaps + #endif + + return emission * 0.03 * CUSTOM_EMISSION_INTENSITY; + #else + return 0.0; + #endif +} + +#ifdef IPBR + float GetCustomEmissionForIPBR(inout vec4 color, float emission) { + vec4 specularMapCheck = texture2DLod(specular, texCoord, 1000.0); + if (specularMapCheck.a == 0.0) return emission; + + color = texture2D(tex, texCoord); + + vec4 specularMap = texture2D(specular, texCoord); + float customEmission = GetCustomEmission(specularMap, texCoord); + return customEmission; + } +#endif + +#endif //INCLUDE_CUSTOM_EMISSION \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/generatedNormals.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/generatedNormals.glsl new file mode 100644 index 0000000..e8de8de --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/generatedNormals.glsl @@ -0,0 +1,85 @@ +const float normalThreshold = 0.05; +const float normalClamp = 0.2; +const float packSizeGN = 128.0; + +#ifndef GBUFFERS_HAND + const float normalMult = GENERATED_NORMAL_MULT * 0.025; +#else + const float normalMult = GENERATED_NORMAL_MULT * 0.015; +#endif + +float GetDif(float lOriginalAlbedo, vec2 offsetCoord) { + #ifndef GBUFFERS_WATER + float lNearbyAlbedo = length(texture2D(tex, offsetCoord).rgb); + #else + vec4 textureSample = texture2D(tex, offsetCoord); + float lNearbyAlbedo = length(textureSample.rgb * textureSample.a * 1.5); + #endif + + #ifdef GBUFFERS_ENTITIES + lOriginalAlbedo = abs(lOriginalAlbedo - 1.0); + lNearbyAlbedo = abs(lNearbyAlbedo - 1.0); + #endif + + float dif = lOriginalAlbedo - lNearbyAlbedo; + + #ifdef GBUFFERS_ENTITIES + dif = -dif; + #endif + + #ifndef GBUFFERS_WATER + if (dif > 0.0) dif = max(dif - normalThreshold, 0.0); + else dif = min(dif + normalThreshold, 0.0); + #endif + + return clamp(dif, -normalClamp, normalClamp); +} + +void GenerateNormals(inout vec3 normalM, vec3 color) { + #ifndef ENTITY_GN_AND_CT + #if defined GBUFFERS_ENTITIES || defined GBUFFERS_HAND + return; + #endif + #endif + + vec2 absMidCoordPos2 = absMidCoordPos * 2.0; + float lOriginalAlbedo = length(color.rgb); + + float normalMult = max0(1.0 - mipDelta) * normalMult; + + #ifndef SAFER_GENERATED_NORMALS + vec2 offsetR = 16.0 / atlasSizeM; + #else + vec2 offsetR = max(absMidCoordPos2.x, absMidCoordPos2.y) * vec2(float(atlasSizeM.y) / float(atlasSizeM.x), 1.0); + #endif + offsetR /= packSizeGN; + + vec2 midCoord = texCoord - midCoordPos; + vec2 maxOffsetCoord = midCoord + absMidCoordPos; + vec2 minOffsetCoord = midCoord - absMidCoordPos; + if (normalMult > 0.0) { + vec3 normalMap = vec3(0.0, 0.0, 1.0); + + vec2 offsetCoord = texCoord + vec2( 0.0, offsetR.y); + if (offsetCoord.y < maxOffsetCoord.y) + normalMap.y += GetDif(lOriginalAlbedo, offsetCoord); + + offsetCoord = texCoord + vec2( offsetR.x, 0.0); + if (offsetCoord.x < maxOffsetCoord.x) + normalMap.x += GetDif(lOriginalAlbedo, offsetCoord); + + offsetCoord = texCoord + vec2( 0.0,-offsetR.y); + if (offsetCoord.y > minOffsetCoord.y) + normalMap.y -= GetDif(lOriginalAlbedo, offsetCoord); + + offsetCoord = texCoord + vec2(-offsetR.x, 0.0); + if (offsetCoord.x > minOffsetCoord.x) + normalMap.x -= GetDif(lOriginalAlbedo, offsetCoord); + + normalMap.xy *= normalMult; + normalMap.xy = clamp(normalMap.xy, vec2(-1.0), vec2(1.0)); + + if (normalMap.xy != vec2(0.0, 0.0)) + normalM = clamp(normalize(normalMap * tbnMatrix), vec3(-1.0), vec3(1.0)); + } +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/pomEffects.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/pomEffects.glsl new file mode 100644 index 0000000..e51c336 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/pomEffects.glsl @@ -0,0 +1,121 @@ +#include "/lib/util/dither.glsl" + +vec2 vTexCoord = signMidCoordPos * 0.5 + 0.5; + +#include "/lib/util/dFdxdFdy.glsl" + +vec4 ReadNormal(vec2 coord) { + coord = fract(coord) * vTexCoordAM.pq + vTexCoordAM.st; + return textureGrad(normals, coord, dcdx, dcdy); +} + +vec2 GetParallaxCoord(float parallaxFade, float dither, inout vec2 newCoord, inout float texDepth, inout vec3 traceCoordDepth) { + float invParallaxQuality = 1.0 / POM_QUALITY; + vec4 normalMap = ReadNormal(vTexCoord.st); + vec2 normalMapM = normalMap.xy * 2.0 - 1.0; + float normalCheck = normalMapM.x + normalMapM.y; + float minHeight = 1.0 - invParallaxQuality; + + if (viewVector.z >= 0.0 || normalMap.a >= minHeight || normalCheck <= -1.999) return vTexCoord.st; + + vec2 interval = viewVector.xy * 0.25 * (1.0 - parallaxFade) * POM_DEPTH / (-viewVector.z * POM_QUALITY); + + float i = 0.0; + vec2 localCoord; + #if defined GBUFFERS_TERRAIN || defined GBUFFERS_BLOCK + if (texDepth <= 1.0 - i * invParallaxQuality) { + localCoord = vTexCoord.st + i * interval; + texDepth = ReadNormal(localCoord).a; + i = dither; + } + #endif + + for (; i < POM_QUALITY && texDepth <= 1.0 - i * invParallaxQuality; i++) { + localCoord = vTexCoord.st + i * interval; + texDepth = ReadNormal(localCoord).a; + } + + float pI = float(max(i - 1, 0)); + traceCoordDepth.xy -= pI * interval; + traceCoordDepth.z -= pI * invParallaxQuality; + + localCoord = fract(vTexCoord.st + pI * interval); + newCoord = localCoord * vTexCoordAM.pq + vTexCoordAM.st; + return localCoord; +} + +float GetParallaxShadow(float parallaxFade, float dither, float height, vec2 coord, vec3 lightVec, mat3 tbn) { + float parallaxshadow = 1.0; + + vec3 parallaxdir = tbn * lightVec; + parallaxdir.xy *= 1.0 * POM_DEPTH; // Angle + + for (int i = 0; i < 4 && parallaxshadow >= 0.01; i++) { + float stepLC = 0.025 * (i + dither); + + float currentHeight = height + parallaxdir.z * stepLC; + + vec2 parallaxCoord = fract(coord + parallaxdir.xy * stepLC) * vTexCoordAM.pq + vTexCoordAM.st; + float offsetHeight = textureGrad(normals, parallaxCoord, dcdx, dcdy).a; + + parallaxshadow *= clamp(1.0 - (offsetHeight - currentHeight) * 4.0, 0.0, 1.0); + } + + return mix(parallaxshadow, 1.0, parallaxFade); +} + +// Big thanks to null511 for slope normals +vec3 GetParallaxSlopeNormal(vec2 texCoord, float traceDepth, vec3 viewDir) { + vec2 atlasPixelSize = 1.0 / atlasSize; + float atlasAspect = atlasSize.x / atlasSize.y; + vec2 atlasCoord = fract(texCoord) * vTexCoordAM.pq + vTexCoordAM.st; + + vec2 tileSize = atlasSize * vTexCoordAM.pq; + vec2 tilePixelSize = 1.0 / tileSize; + + vec2 tex_snapped = floor(atlasCoord * atlasSize) * atlasPixelSize; + vec2 tex_offset = atlasCoord - (tex_snapped + 0.5 * atlasPixelSize); + + vec2 stepSign = sign(tex_offset); + vec2 viewSign = sign(viewDir.xy); + + bool dir = abs(tex_offset.x * atlasAspect) < abs(tex_offset.y); + vec2 tex_x, tex_y; + + if (dir) { + tex_x = texCoord - vec2(tilePixelSize.x * viewSign.x, 0.0); + tex_y = texCoord + vec2(0.0, stepSign.y * tilePixelSize.y); + } + else { + tex_x = texCoord + vec2(tilePixelSize.x * stepSign.x, 0.0); + tex_y = texCoord - vec2(0.0, viewSign.y * tilePixelSize.y); + } + + float height_x = ReadNormal(tex_x).a; + float height_y = ReadNormal(tex_y).a; + + if (dir) { + if (!(traceDepth > height_y && viewSign.y != stepSign.y)) { + if (traceDepth > height_x) return vec3(-viewSign.x, 0.0, 0.0); + + if (abs(viewDir.y) > abs(viewDir.x)) + return vec3(0.0, -viewSign.y, 0.0); + else + return vec3(-viewSign.x, 0.0, 0.0); + } + + return vec3(0.0, -viewSign.y, 0.0); + } + else { + if (!(traceDepth > height_x && viewSign.x != stepSign.x)) { + if (traceDepth > height_y) return vec3(0.0, -viewSign.y, 0.0); + + if (abs(viewDir.y) > abs(viewDir.x)) + return vec3(0.0, -viewSign.y, 0.0); + else + return vec3(-viewSign.x, 0.0, 0.0); + } + + return vec3(-viewSign.x, 0.0, 0.0); + } +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/reflections.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/reflections.glsl new file mode 100644 index 0000000..c696b35 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/reflections.glsl @@ -0,0 +1,245 @@ +#ifdef OVERWORLD + #include "/lib/atmospherics/sky.glsl" +#endif +#if defined END && defined DEFERRED1 + #include "/lib/atmospherics/enderBeams.glsl" +#endif + +#ifdef ATM_COLOR_MULTS + #include "/lib/colors/colorMultipliers.glsl" +#endif +#ifdef MOON_PHASE_INF_ATMOSPHERE + #include "/lib/colors/moonPhaseInfluence.glsl" +#endif + +vec3 nvec3(vec4 pos) { + return pos.xyz/pos.w; +} + +vec3 refPos = vec3(0.0); + +vec4 GetReflection(vec3 normalM, vec3 viewPos, vec3 nViewPos, vec3 playerPos, float lViewPos, float z0, + sampler2D depthtex, float dither, float skyLightFactor, float fresnel, + float smoothness, vec3 geoNormal, vec3 color, vec3 shadowMult, float highlightMult) { + // Step 1: Prepare + vec2 rEdge = vec2(0.6, 0.55); + vec3 normalMR = normalM; + + #if defined GBUFFERS_WATER && WATER_STYLE == 1 && defined GENERATED_NORMALS + normalMR = mix(geoNormal, normalM, 0.05); + #endif + + vec3 nViewPosR = reflect(nViewPos, normalMR); + float RVdotU = dot(normalize(nViewPosR), upVec); + float RVdotS = dot(normalize(nViewPosR), sunVec); + + #if defined GBUFFERS_WATER && WATER_STYLE >= 2 + normalMR = mix(geoNormal, normalM, 0.8); + #endif + // End Step 1 + + // Step 2: Calculate Terrain Reflection and Alpha + vec4 reflection = vec4(0.0); + #if defined DEFERRED1 || WATER_REFLECT_QUALITY >= 1 + #if defined DEFERRED1 || WATER_REFLECT_QUALITY >= 2 && !defined DH_WATER + // Method 1: Ray Marched Reflection // + + // Ray Marching + vec3 start = viewPos + normalMR * (lViewPos * 0.025 * (1.0 - fresnel) + 0.05); + #if defined GBUFFERS_WATER && WATER_STYLE >= 2 + vec3 vector = reflect(nViewPos, normalize(normalMR)); // Not using nViewPosR because normalMR changed + #else + vec3 vector = nViewPosR; + #endif + //vector = normalize(vector - 0.5 * (1.0 - smoothness) * (1.0 - fresnel) * normalMR); // reflection anisotropy test + //vector = normalize(vector - 0.075 * dither * (1.0 - pow2(pow2(fresnel))) * normalMR); + vector *= 0.5; + vec3 viewPosRT = viewPos + vector; + vec3 tvector = vector; + + int sr = 0; + float dist = 0.0; + vec3 rfragpos = vec3(0.0); + for (int i = 0; i < 30; i++) { + refPos = nvec3(gbufferProjection * vec4(viewPosRT, 1.0)) * 0.5 + 0.5; + if (abs(refPos.x - 0.5) > rEdge.x || abs(refPos.y - 0.5) > rEdge.y) break; + + rfragpos = vec3(refPos.xy, texture2D(depthtex, refPos.xy).r); + rfragpos = nvec3(gbufferProjectionInverse * vec4(rfragpos * 2.0 - 1.0, 1.0)); + dist = length(start - rfragpos); + + float err = length(viewPosRT - rfragpos); + + if (err < length(vector) * 3.0) { + sr++; + if (sr >= 6) break; + tvector -= vector; + vector *= 0.1; + } + vector *= 2.0; + tvector += vector * (0.95 + 0.1 * dither); + viewPosRT = start + tvector; + } + + // Finalizing Terrain Reflection and Alpha + if (refPos.z < 0.99997) { + vec2 absPos = abs(refPos.xy - 0.5); + vec2 cdist = absPos / rEdge; + float border = clamp(1.0 - pow(max(cdist.x, cdist.y), 50.0), 0.0, 1.0); + reflection.a = border; + + float lViewPosRT = length(rfragpos); + + if (reflection.a > 0.001) { + vec2 edgeFactor = pow2(pow2(pow2(cdist))); + refPos.y += (dither - 0.5) * (0.05 * (edgeFactor.x + edgeFactor.y)); + + #ifdef DEFERRED1 + float smoothnessDM = pow2(smoothness); + float lodFactor = 1.0 - exp(-0.125 * (1.0 - smoothnessDM) * dist); + float lod = log2(viewHeight / 8.0 * (1.0 - smoothnessDM) * lodFactor) * 0.45; + if (z0 <= 0.56) lod *= 2.22; // Using more lod to compensate for less roughness noise on held items + lod = max(lod - 1.0, 0.0); + + reflection.rgb = texture2DLod(colortex0, refPos.xy, lod).rgb; + #else + reflection = texture2D(gaux2, refPos.xy); + reflection.rgb = pow2(reflection.rgb + 1.0); + #endif + + float skyFade = 0.0; + DoFog(reflection.rgb, skyFade, lViewPosRT, ViewToPlayer(rfragpos.xyz), RVdotU, RVdotS, dither); + + edgeFactor.x = pow2(edgeFactor.x); + edgeFactor = 1.0 - edgeFactor; + reflection.a *= pow(edgeFactor.x * edgeFactor.y, 2.0 + 3.0 * GetLuminance(reflection.rgb)); + } + + float posDif = lViewPosRT - lViewPos; + reflection.a *= clamp(posDif + 3.0, 0.0, 1.0); + } + #if defined DEFERRED1 && defined TEMPORAL_FILTER + else refPos.z = 1.0; + #endif + #if !defined DEFERRED1 && defined DISTANT_HORIZONS + else + #endif + #endif + #if !defined DEFERRED1 && (WATER_REFLECT_QUALITY < 2 || defined DISTANT_HORIZONS) || defined DH_WATER + { // Method 2: Mirorred Image Reflection // + + #if WATER_REFLECT_QUALITY < 2 + float verticalStretch = 0.013; // for potato quality reflections + #else + float verticalStretch = 0.0025; // for distant horizons reflections + #endif + + vec4 clipPosR = gbufferProjection * vec4(nViewPosR + verticalStretch * viewPos, 1.0); + vec3 screenPosR = clipPosR.xyz / clipPosR.w * 0.5 + 0.5; + vec2 screenPosRM = abs(screenPosR.xy - 0.5); + + if (screenPosRM.x < rEdge.x && screenPosRM.y < rEdge.y) { + vec2 edgeFactor = pow2(pow2(pow2(screenPosRM / rEdge))); + screenPosR.y += (dither - 0.5) * (0.03 * (edgeFactor.x + edgeFactor.y) + 0.004); + + screenPosR.z = texture2D(depthtex1, screenPosR.xy).x; + vec3 viewPosR = ScreenToView(screenPosR); + if (lViewPos <= 2.0 + length(viewPosR)) { + reflection = texture2D(gaux2, screenPosR.xy); + reflection.rgb = pow2(reflection.rgb + 1.0); + } + + edgeFactor.x = pow2(edgeFactor.x); + edgeFactor = 1.0 - edgeFactor; + reflection.a *= edgeFactor.x * edgeFactor.y; + } + + reflection.a *= reflection.a; + reflection.a *= clamp01((dot(nViewPos, nViewPosR) - 0.45) * 10.0); // Fixes perpendicular ref + } + #endif + #endif + // End Step 2 + + // Step 3: Add Sky Reflection + #if defined DEFERRED1 || WATER_REFLECT_QUALITY >= 1 + if (reflection.a < 1.0) + #endif + { + #ifdef OVERWORLD + #if defined DEFERRED1 || WATER_REFLECT_QUALITY >= 2 + vec3 skyReflection = GetSky(RVdotU, RVdotS, dither, true, true); + #else + vec3 skyReflection = GetLowQualitySky(RVdotU, RVdotS, dither, true, true); + #endif + + #ifdef ATM_COLOR_MULTS + skyReflection *= atmColorMult; + #endif + #ifdef MOON_PHASE_INF_ATMOSPHERE + skyReflection *= moonPhaseInfluence; + #endif + + #ifdef DEFERRED1 + skyReflection *= skyLightFactor; + #else + float specularHighlight = GGX(normalM, nViewPos, lightVec, max(dot(normalM, lightVec), 0.0), smoothness); + skyReflection += specularHighlight * highlightColor * shadowMult * highlightMult * invRainFactor; + + #if WATER_REFLECT_QUALITY >= 1 + #ifdef SKY_EFFECT_REFLECTION + float cloudLinearDepth = 1.0; + float skyFade = 1.0; + vec3 auroraBorealis = vec3(0.0); + vec3 nightNebula = vec3(0.0); + + #if AURORA_STYLE > 0 + auroraBorealis = GetAuroraBorealis(nViewPosR, RVdotU, dither); + skyReflection += auroraBorealis; + #endif + #ifdef NIGHT_NEBULA + nightNebula += GetNightNebula(nViewPosR, RVdotU, RVdotS); + skyReflection += nightNebula; + #endif + + vec2 starCoord = GetStarCoord(nViewPosR, 0.5); + skyReflection += GetStars(starCoord, RVdotU, RVdotS); + + #ifdef VL_CLOUDS_ACTIVE + vec3 worldNormalMR = normalize(mat3(gbufferModelViewInverse) * normalMR); + vec3 RCameraPos = cameraPosition + 2.0 * worldNormalMR * dot(playerPos, worldNormalMR); + vec3 RPlayerPos = normalize(mat3(gbufferModelViewInverse) * nViewPosR); + float RlViewPos = 100000.0; + + vec4 clouds = GetClouds(cloudLinearDepth, skyFade, RCameraPos, RPlayerPos, + RlViewPos, RVdotS, RVdotU, dither, auroraBorealis, nightNebula); + + skyReflection = mix(skyReflection, clouds.rgb, clouds.a); + #endif + #endif + + skyReflection = mix(color * 0.5, skyReflection, skyLightFactor); + #else + skyReflection = mix(color, skyReflection, skyLightFactor * 0.5); + #endif + #endif + #elif defined END + #ifdef DEFERRED1 + vec3 skyReflection = (endSkyColor + 0.4 * DrawEnderBeams(RVdotU, playerPos)) * skyLightFactor; + #else + vec3 skyReflection = endSkyColor * shadowMult; + #endif + + #ifdef ATM_COLOR_MULTS + skyReflection *= atmColorMult; + #endif + #else + vec3 skyReflection = vec3(0.0); + #endif + + reflection.rgb = mix(skyReflection, reflection.rgb, reflection.a); + } + // End Step 3 + + return reflection; +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/refraction.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/refraction.glsl new file mode 100644 index 0000000..a2b11d2 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/refraction.glsl @@ -0,0 +1,42 @@ +float GetApproxDistance(float depth) { + return near * far / (far - depth * far); +} + +void DoRefraction(inout vec3 color, inout float z0, inout float z1, vec3 viewPos, float lViewPos) { + // Prep + if (int(texelFetch(colortex6, texelCoord, 0).g * 255.1) != 241) return; + + float fovScale = gbufferProjection[1][1]; + + vec3 playerPos = ViewToPlayer(viewPos.xyz); + vec3 worldPos = playerPos.xyz + cameraPosition.xyz; + vec2 worldPosRM = worldPos.xz * 0.02 + worldPos.y * 0.01 + 0.01 * frameTimeCounter; + + vec2 refractNoise = texture2D(noisetex, worldPosRM).rb - vec2(0.5); + refractNoise *= WATER_REFRACTION_INTENSITY * fovScale / (3.0 + lViewPos); + + #if WATER_STYLE < 3 + refractNoise *= 0.015; + #else + refractNoise *= 0.02; + #endif + + // Check + float approxDif = GetApproxDistance(z1) - GetApproxDistance(z0); + refractNoise *= clamp(approxDif, 0.0, 1.0); + + vec2 refractCoord = texCoord.xy + refractNoise; + + if (int(texture2D(colortex6, refractCoord).g * 255.1) != 241) return; + + float z0check = texture2D(depthtex0, refractCoord).r; + float z1check = texture2D(depthtex1, refractCoord).r; + float approxDifCheck = GetApproxDistance(z1check) - GetApproxDistance(z0check); + refractNoise *= clamp(approxDifCheck, 0.0, 1.0); + + // Sample + refractCoord = texCoord.xy + refractNoise; + color = texture2D(colortex0, refractCoord).rgb; + z0 = texture2D(depthtex0, refractCoord).r; + z1 = texture2D(depthtex1, refractCoord).r; +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/snowyWorld.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/snowyWorld.glsl new file mode 100644 index 0000000..d3dc723 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/snowyWorld.glsl @@ -0,0 +1,19 @@ +const float packSizeSW = 16.0; + +void DoSnowyWorld(inout vec4 color, inout float smoothnessG, inout float highlightMult, inout float smoothnessD, inout float emission, + vec3 playerPos, vec2 lmCoord, float snowFactor, float snowMinNdotU, float NdotU, int subsurfaceMode) { + float snowFactorM = snowFactor * 1000.0 * max(NdotU - 0.9, snowMinNdotU) * max0(lmCoord.y - 0.9) * (0.9 - clamp(lmCoord.x, 0.8, 0.9)); + if (snowFactorM <= 0.0001) return; + + vec3 worldPos = playerPos + cameraPosition; + vec2 noiseCoord = floor(packSizeSW * worldPos.xz + 0.001) / packSizeSW; + noiseCoord += floor(packSizeSW * worldPos.y + 0.001) / packSizeSW; + float noiseTexture = dot(vec2(0.25, 0.75), texture2D(noisetex, noiseCoord * 0.45).rg); + vec3 snowColor = mix(vec3(0.65, 0.8, 0.85), vec3(1.0, 1.0, 1.0), noiseTexture * 0.75 + 0.125); + + color.rgb = mix(color.rgb, snowColor + color.rgb * emission * 0.2, snowFactorM); + smoothnessG = mix(smoothnessG, 0.25 + 0.25 * noiseTexture, snowFactorM); + highlightMult = mix(highlightMult, 2.0 - subsurfaceMode * 0.666, snowFactorM); + smoothnessD = mix(smoothnessD, 0.0, snowFactorM); + emission *= 1.0 - snowFactorM * 0.85; +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/wavingBlocks.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/wavingBlocks.glsl new file mode 100644 index 0000000..38eb422 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/materialMethods/wavingBlocks.glsl @@ -0,0 +1,178 @@ +#if COLORED_LIGHTING_INTERNAL > 0 + #include "/lib/misc/voxelization.glsl" +#endif + +vec3 GetRawWave(in vec3 pos, float wind) { + float magnitude = sin(wind * 0.0027 + pos.z + pos.y) * 0.04 + 0.04; + float d0 = sin(wind * 0.0127); + float d1 = sin(wind * 0.0089); + float d2 = sin(wind * 0.0114); + vec3 wave; + wave.x = sin(wind*0.0063 + d0 + d1 - pos.x + pos.z + pos.y) * magnitude; + wave.z = sin(wind*0.0224 + d1 + d2 + pos.x - pos.z + pos.y) * magnitude; + wave.y = sin(wind*0.0015 + d2 + d0 + pos.z + pos.y - pos.y) * magnitude; + + return wave; +} + +vec3 GetWave(in vec3 pos, float waveSpeed) { + float wind = frameTimeCounter * waveSpeed * WAVING_SPEED; + vec3 wave = GetRawWave(pos, wind); + + #define WAVING_I_RAIN_MULT_M WAVING_I_RAIN_MULT * 0.01 + + #if WAVING_I_RAIN_MULT > 100 + float windRain = frameTimeCounter * waveSpeed * WAVING_I_RAIN_MULT_M * WAVING_SPEED; + vec3 waveRain = GetRawWave(pos, windRain); + wave = mix(wave, waveRain, rainFactor); + #endif + + #ifdef NO_WAVING_INDOORS + wave *= clamp(lmCoord.y - 0.87, 0.0, 0.1); + #else + wave *= 0.1; + #endif + + float wavingIntensity = WAVING_I * mix(1.0, WAVING_I_RAIN_MULT_M, rainFactor); + + return wave * wavingIntensity; +} + +void DoWave_Foliage(inout vec3 playerPos, vec3 worldPos, float waveMult) { + worldPos.y *= 0.5; + + vec3 wave = GetWave(worldPos, 170.0); + wave.x = wave.x * 8.0 + wave.y * 4.0; + wave.y = 0.0; + wave.z = wave.z * 3.0; + + playerPos.xyz += wave * waveMult; +} + +void DoWave_Leaves(inout vec3 playerPos, vec3 worldPos, float waveMult) { + worldPos *= vec3(0.75, 0.375, 0.75); + + vec3 wave = GetWave(worldPos, 170.0); + wave *= vec3(8.0, 3.0, 4.0); + + wave *= 1.0 - inSnowy; // Leaves with snow on top look wrong + + playerPos.xyz += wave * waveMult; +} + +void DoWave_Water(inout vec3 playerPos, vec3 worldPos) { + float waterWaveTime = frameTimeCounter * 6.0 * WAVING_SPEED; + worldPos.xz *= 14.0; + + float wave = sin(waterWaveTime * 0.7 + worldPos.x * 0.14 + worldPos.z * 0.07); + wave += sin(waterWaveTime * 0.5 + worldPos.x * 0.10 + worldPos.z * 0.05); + + #ifdef NO_WAVING_INDOORS + wave *= clamp(lmCoord.y - 0.87, 0.0, 0.1); + #else + wave *= 0.1; + #endif + + playerPos.y += wave * 0.125 - 0.05; + + #if defined GBUFFERS_WATER && WATER_STYLE == 1 + normal = mix(normal, tangent, wave * 0.01); + #endif +} + +void DoWave_Lava(inout vec3 playerPos, vec3 worldPos) { + if (fract(worldPos.y + 0.005) > 0.06) { + float lavaWaveTime = frameTimeCounter * 3.0 * WAVING_SPEED; + worldPos.xz *= 14.0; + + float wave = sin(lavaWaveTime * 0.7 + worldPos.x * 0.14 + worldPos.z * 0.07); + wave += sin(lavaWaveTime * 0.5 + worldPos.x * 0.05 + worldPos.z * 0.10); + + playerPos.y += wave * 0.0125; + } +} + +void DoWave(inout vec3 playerPos, int mat) { + vec3 worldPos = playerPos.xyz + cameraPosition.xyz; + + #if defined GBUFFERS_TERRAIN || defined SHADOW + #ifdef WAVING_FOLIAGE + if (mat == 10005) { // Grounded Waving Foliage + if (gl_MultiTexCoord0.t < mc_midTexCoord.t || fract(worldPos.y + 0.21) > 0.26) + DoWave_Foliage(playerPos.xyz, worldPos, 1.0); + } else if (mat == 10021) { // Upper Layer Waving Foliage + DoWave_Foliage(playerPos.xyz, worldPos, 1.0); + } + + #if defined WAVING_LEAVES || defined WAVING_LAVA || defined WAVING_LILY_PAD + else + #endif + #endif + + #ifdef WAVING_LEAVES + if (mat == 10009) { // Leaves + DoWave_Leaves(playerPos.xyz, worldPos, 1.0); + } else if (mat == 10013) { // Vine + // Reduced waving on vines to prevent clipping through blocks + DoWave_Leaves(playerPos.xyz, worldPos, 0.75); + } + #if defined NETHER || defined DO_NETHER_VINE_WAVING_OUTSIDE_NETHER + else if (mat == 10884 || mat == 10885) { // Weeping Vines, Twisting Vines + float waveMult = 1.0; + #if COLORED_LIGHTING_INTERNAL > 0 + vec3 playerPosP = playerPos + vec3(0.0, 0.1, 0.0); + vec3 voxelPosP = SceneToVoxel(playerPosP); + vec3 playerPosN = playerPos - vec3(0.0, 0.1, 0.0); + vec3 voxelPosN = SceneToVoxel(playerPosN); + + if (CheckInsideVoxelVolume(voxelPosP)) { + int voxelP = int(texelFetch(voxel_sampler, ivec3(voxelPosP), 0).r); + int voxelN = int(texelFetch(voxel_sampler, ivec3(voxelPosN), 0).r); + if (voxelP != 0 && voxelP != 65 || voxelN != 0 && voxelN != 65) // not air, not weeping vines + waveMult = 0.0; + } + #endif + DoWave_Foliage(playerPos.xyz, worldPos, waveMult); + } + #endif + + #if defined WAVING_LAVA || defined WAVING_LILY_PAD + else + #endif + #endif + + #ifdef WAVING_LAVA + if (mat == 10068) { // Lava + DoWave_Lava(playerPos.xyz, worldPos); + + #ifdef GBUFFERS_TERRAIN + // G8FL735 Fixes Optifine-Iris parity. Optifine has 0.9 gl_Color.rgb on a lot of versions + glColorRaw.rgb = min(glColorRaw.rgb, vec3(0.9)); + #endif + } + + #ifdef WAVING_LILY_PAD + else + #endif + #endif + + #ifdef WAVING_LILY_PAD + if (mat == 10489) { // Lily Pad + DoWave_Water(playerPos.xyz, worldPos); + } + #endif + #endif + + #if defined GBUFFERS_WATER || defined SHADOW + #ifdef WAVING_WATER_VERTEX + #if defined WAVING_ANYTHING_TERRAIN && defined SHADOW + else + #endif + + if (mat == 32000) { // Water + if (fract(worldPos.y + 0.005) > 0.06) + DoWave_Water(playerPos.xyz, worldPos); + } + #endif + #endif +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/entities/glowItemFrame.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/entities/glowItemFrame.glsl new file mode 100644 index 0000000..8cf0b2f --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/entities/glowItemFrame.glsl @@ -0,0 +1 @@ +#include "/lib/materials/specificMaterials/entities/itemFrame.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/entities/itemFrame.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/entities/itemFrame.glsl new file mode 100644 index 0000000..9e61797 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/entities/itemFrame.glsl @@ -0,0 +1 @@ +noSmoothLighting = true; \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/entities/lightningBolt.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/entities/lightningBolt.glsl new file mode 100644 index 0000000..5c64dc4 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/entities/lightningBolt.glsl @@ -0,0 +1,6 @@ +color = vec4(1.0, 1.1, 1.4, 1.0); + +lmCoordM = vec2(0.0); +shadowMult = vec3(0.0); + +emission = 0.5; \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/others/endPortalEffect.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/others/endPortalEffect.glsl new file mode 100644 index 0000000..022d59c --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/others/endPortalEffect.glsl @@ -0,0 +1,101 @@ +// End Portal fix by fayer3#2332 (Modified) +vec3[8] colors = vec3[]( + vec3(0.3472479, 0.6559956, 0.7387838) * 1.5, + vec3(0.6010780, 0.7153565, 1.060625 ), + vec3(0.4221090, 0.8135094, 0.9026056), + vec3(0.3492291, 1.0241201, 1.8612821), + vec3(0.7543085, 0.8238697, 0.6803233), + vec3(0.4144472, 0.5648165, 0.8037 ), + vec3(0.508905 , 0.6719649, 0.9982805), + vec3(0.5361914, 0.4476583, 0.8008522)); +color.rgb = vec3(0.421, 0.7, 1.6) * 0.14; + +float dither = Bayer64(gl_FragCoord.xy); +#ifdef TAA + dither = fract(dither + goldenRatio * mod(float(frameCounter), 3600.0)); + int repeat = 4; +#else + int repeat = 8; +#endif +float dismult = 0.5; +for (int j = 0; j < repeat; j++) { + float add = float(j + dither) * 0.0625 / float(repeat); + for (int i = 1; i <= 8; i++) { + float colormult = 0.9/(30.0+i); + float rotation = (i - 0.1 * i + 0.71 * i - 11 * i + 21) * 0.01 + i * 0.01; + float Cos = cos(radians(rotation)); + float Sin = sin(radians(rotation)); + vec2 offset = vec2(0.0, 1.0/(3600.0/24.0)) * pow(16.0 - i, 2.0) * 0.004; + + vec3 wpos = normalize((gbufferModelViewInverse * vec4(viewPos * (i * dismult + 1), 1.0)).xyz); + if (abs(NdotU) > 0.9) { + wpos.xz /= wpos.y; + wpos.xz *= 0.06 * sign(- playerPos.y); + wpos.xz *= abs(playerPos.y) + i * dismult + add; + wpos.xz -= cameraPosition.xz * 0.05; + } else { + vec3 absPos = abs(playerPos); + if (abs(dot(normal, eastVec)) > 0.9) { + wpos.xz = wpos.yz / wpos.x; + wpos.xz *= 0.06 * sign(- playerPos.x); + wpos.xz *= abs(playerPos.x) + i * dismult + add; + wpos.xz -= cameraPosition.yz * 0.05; + } else { + wpos.xz = wpos.yx / wpos.z; + wpos.xz *= 0.06 * sign(- playerPos.z); + wpos.xz *= abs(playerPos.z) + i * dismult + add; + wpos.xz -= cameraPosition.yx * 0.05; + } + } + vec2 pos = wpos.xz; + + vec2 wind = fract((frameTimeCounter + 984.0) * (i + 8) * 0.125 * offset); + vec2 coord = mat2(Cos, Sin, -Sin, Cos) * pos + wind; + if (mod(float(i), 4) < 1.5) coord = coord.yx + vec2(-1.0, 1.0) * wind.y; + + vec3 psample = pow(texture2D(tex, coord).rgb, vec3(0.85)) * colors[i-1] * colormult; + color.rgb += psample * length(psample.rgb) * (3000.0 / repeat); + } +} +color.rgb *= vec3(0.09, 0.086, 0.06) * 0.9; +emission = 10.0; +noDirectionalShading = true; + +#ifdef COATED_TEXTURES + noiseFactor = 0.0; +#endif + +#ifdef PORTAL_EDGE_EFFECT + //vec3 voxelPos = SceneToVoxel(mix(playerPos, vec3(0.0), -0.02)); // Fixes weird parallax offset + vec3 voxelPos = SceneToVoxel(playerPos); + + if (CheckInsideVoxelVolume(voxelPos)) { + float portalOffset = 0.08333 * dither; + vec3[4] portalOffsets = vec3[]( + vec3( portalOffset, 0, portalOffset), + vec3( portalOffset, 0,-portalOffset), + vec3(-portalOffset, 0, portalOffset), + vec3(-portalOffset, 0,-portalOffset) + ); + + float edge = 0.0; + for (int i = 0; i < 4; i++) { + int voxel = int(texelFetch(voxel_sampler, ivec3(voxelPos + portalOffsets[i]), 0).r); + if (voxel == 58 || voxel == 255) { // End Portal Frame or Bedrock + edge = 1.0; break; + } + } + + #ifdef END + // No edge effect in the middle of the return fountain + vec2 var1 = abs(playerPos.xz + cameraPosition.xz - 0.5); + float var2 = max(var1.x, var1.y); + if (var2 > 1.0) + #endif + { + vec4 edgeColor = vec4(vec3(0.18, 0.5, 0.45), 1.0); + color = mix(color, edgeColor, edge); + emission = mix(emission, 5.0, edge); + } + } +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/others/signText.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/others/signText.glsl new file mode 100644 index 0000000..a1dd7f9 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/others/signText.glsl @@ -0,0 +1,15 @@ +normalM = upVec; + +highlightMult = 0.0; +shadowMult = vec3(0.0); + +#if MC_VERSION >= 11700 + if (lmCoord.x > 0.99) { // Glowing Sign Text + lmCoordM = vec2(0.0); + + emission = 1.0; + + color.rgb *= length(color.rgb) + 0.5; + } else // Normal Sign Text +#endif +color.rgb *= 5.0; \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/others/trident.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/others/trident.glsl new file mode 100644 index 0000000..a58c26e --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/others/trident.glsl @@ -0,0 +1,4 @@ +smoothnessG = color.g; +smoothnessD = color.g; + +emission = min(max0(dot(color.rgb, color.rgb) - 1.0) * 6.0, 1.0); \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/acaciaPlanks.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/acaciaPlanks.glsl new file mode 100644 index 0000000..9eaaa40 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/acaciaPlanks.glsl @@ -0,0 +1,6 @@ +smoothnessG = pow2(pow2(color.r)) * 0.65; +smoothnessD = smoothnessG; + +#ifdef COATED_TEXTURES + noiseFactor = 0.5; +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/bambooPlanks.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/bambooPlanks.glsl new file mode 100644 index 0000000..4615fdc --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/bambooPlanks.glsl @@ -0,0 +1,3 @@ +smoothnessG = color.r * 0.4; + +smoothnessD = color.r * 0.3; \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/birchPlanks.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/birchPlanks.glsl new file mode 100644 index 0000000..90126d4 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/birchPlanks.glsl @@ -0,0 +1,6 @@ +smoothnessG = pow2(pow2(color.g)) * 0.75; +smoothnessD = smoothnessG; + +#ifdef COATED_TEXTURES + noiseFactor = 0.66; +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/cherryPlanks.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/cherryPlanks.glsl new file mode 100644 index 0000000..1396634 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/cherryPlanks.glsl @@ -0,0 +1,6 @@ +smoothnessG = pow2(pow2(color.g)) * 0.7; +smoothnessD = smoothnessG; + +#ifdef COATED_TEXTURES + noiseFactor = 0.66; +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/crimsonPlanks.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/crimsonPlanks.glsl new file mode 100644 index 0000000..a6aeddb --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/crimsonPlanks.glsl @@ -0,0 +1,6 @@ +smoothnessG = pow2(color.r) * 0.7; +smoothnessD = smoothnessG; + +#ifdef COATED_TEXTURES + noiseFactor = 0.77; +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/darkOakPlanks.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/darkOakPlanks.glsl new file mode 100644 index 0000000..20fdee4 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/darkOakPlanks.glsl @@ -0,0 +1,6 @@ +smoothnessG = color.r * 0.7; +smoothnessD = smoothnessG; + +#ifdef COATED_TEXTURES + noiseFactor = 0.66; +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/junglePlanks.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/junglePlanks.glsl new file mode 100644 index 0000000..0d28901 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/junglePlanks.glsl @@ -0,0 +1,7 @@ +smoothnessG = pow2(pow2(pow2(color.g))) * 12.0; +smoothnessG = min1(smoothnessG); +smoothnessD = smoothnessG; + +#ifdef COATED_TEXTURES + noiseFactor = 0.66; +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/mangrovePlanks.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/mangrovePlanks.glsl new file mode 100644 index 0000000..4b5e57c --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/mangrovePlanks.glsl @@ -0,0 +1,3 @@ +smoothnessG = pow2(color.r) * 0.7; +smoothnessG = min1(smoothnessG); +smoothnessD = smoothnessG; \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/oakPlanks.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/oakPlanks.glsl new file mode 100644 index 0000000..8f3d036 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/oakPlanks.glsl @@ -0,0 +1,7 @@ +smoothnessG = pow2(pow2(pow2(color.g))) * 12.0; +smoothnessG = min1(smoothnessG); +smoothnessD = smoothnessG; + +#ifdef COATED_TEXTURES + noiseFactor = 0.77; +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/paleOakPlanks.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/paleOakPlanks.glsl new file mode 100644 index 0000000..afddd03 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/paleOakPlanks.glsl @@ -0,0 +1,6 @@ +smoothnessG = pow2(color.g) * 0.25; +smoothnessD = smoothnessG; + +#ifdef COATED_TEXTURES + noiseFactor = 0.66; +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/sprucePlanks.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/sprucePlanks.glsl new file mode 100644 index 0000000..6c78a65 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/sprucePlanks.glsl @@ -0,0 +1,7 @@ +smoothnessG = pow2(pow2(color.g)) * 8.0; +smoothnessG = min1(smoothnessG); +smoothnessD = smoothnessG; + +#ifdef COATED_TEXTURES + noiseFactor = 0.66; +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/warpedPlanks.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/warpedPlanks.glsl new file mode 100644 index 0000000..a4ca4c8 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/planks/warpedPlanks.glsl @@ -0,0 +1,6 @@ +smoothnessG = pow2(color.g) * 0.7; +smoothnessD = smoothnessG; + +#ifdef COATED_TEXTURES + noiseFactor = 0.77; +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/anvil.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/anvil.glsl new file mode 100644 index 0000000..84a6217 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/anvil.glsl @@ -0,0 +1,6 @@ +smoothnessG = color.r; +smoothnessD = color.r; + +#ifdef COATED_TEXTURES + noiseFactor = 0.33; +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/blackstone.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/blackstone.glsl new file mode 100644 index 0000000..3b632c0 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/blackstone.glsl @@ -0,0 +1,2 @@ +smoothnessG = color.r; +smoothnessD = color.r * 0.65; \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/candle.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/candle.glsl new file mode 100644 index 0000000..1c40934 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/candle.glsl @@ -0,0 +1,7 @@ +noSmoothLighting = true; + +color.rgb *= 1.0 + 0.7 * pow2(max(-signMidCoordPos.y + 0.6, float(NdotU > 0.9) * 1.6)); + +#ifdef SNOWY_WORLD + snowFactor = 0.0; +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/cobblestone.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/cobblestone.glsl new file mode 100644 index 0000000..f031140 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/cobblestone.glsl @@ -0,0 +1,3 @@ +smoothnessG = pow2(pow2(color.g)); +smoothnessD = smoothnessG; +smoothnessG = max(smoothnessG, 0.3 * color.g * float(color.g > color.b * 1.5)); \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/copperBlock.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/copperBlock.glsl new file mode 100644 index 0000000..2b25f1f --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/copperBlock.glsl @@ -0,0 +1,10 @@ +materialMask = OSIEBCA * 2.0; // Copper Fresnel +smoothnessG = pow2(pow2(color.r)) + pow2(max0(color.g - color.r * 0.5)) * 0.3; +smoothnessG = min1(smoothnessG); +smoothnessD = smoothnessG; + +color.rgb *= 0.6 + 0.7 * GetLuminance(color.rgb); + +#ifdef COATED_TEXTURES + noiseFactor = 0.5; +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/copperBulb.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/copperBulb.glsl new file mode 100644 index 0000000..ad72145 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/copperBulb.glsl @@ -0,0 +1,20 @@ +noSmoothLighting = true; + +vec3 hsvColor = rgb2hsv(color.rgb); +if (abs(hsvColor.r - 0.09722) < 0.04305 && hsvColor.b > 0.7) { // Active Light Part + smoothnessG = 0.75; + smoothnessD = 0.35; + + float blockRes = absMidCoordPos.x * atlasSize.x; + vec2 signMidCoordPosM = (floor((signMidCoordPos + 1.0) * blockRes) + 0.5) / blockRes - 1.0; + float dotsignMidCoordPos = dot(signMidCoordPosM, signMidCoordPosM); + float lBlockPosM = pow2(max0(1.0 - 1.7 * pow2(pow2(dotsignMidCoordPos)))); + + emission = pow2(lmCoordM.x) + 0.3 * color.r; + emission *= (0.7 + 2.0 * pow2(lBlockPosM)); +} else if (color.r > 2.5 * (color.g + color.b)) { // Middle Redstone Part + emission = 4.0; + color.rgb *= color.rgb; +} else { // Copper Base + #include "/lib/materials/specificMaterials/terrain/copperBlock.glsl" +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/coral.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/coral.glsl new file mode 100644 index 0000000..c80278d --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/coral.glsl @@ -0,0 +1,7 @@ +float lColor = length(color.rgb); +smoothnessG = lColor * 0.2; +smoothnessD = lColor * 0.15; + +#ifdef COATED_TEXTURES + noiseFactor = 0.66; +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/cryingObsidian.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/cryingObsidian.glsl new file mode 100644 index 0000000..b7696de --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/cryingObsidian.glsl @@ -0,0 +1,11 @@ +#include "/lib/materials/specificMaterials/terrain/obsidian.glsl" + +highlightMult *= 0.5; + +float factor0 = sqrt2(max0(color.b - color.g * 6.0)); +float factor1 = pow2(color.b); +emission = 1.35 + pow2(pow2(factor1)) * 7.5; +emission *= factor0; +color.r *= 1.15; + +maRecolor = vec3(factor0 * min(max0(factor1 * 0.7 - 0.1) * 1.3, 0.5)); \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/deepslate.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/deepslate.glsl new file mode 100644 index 0000000..4bca6b7 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/deepslate.glsl @@ -0,0 +1,3 @@ +smoothnessG = pow2(color.g) * 1.5; +smoothnessG = min1(smoothnessG); +smoothnessD = smoothnessG; \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/diamondBlock.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/diamondBlock.glsl new file mode 100644 index 0000000..b6a2020 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/diamondBlock.glsl @@ -0,0 +1,25 @@ +materialMask = OSIEBCA; // Intense Fresnel + +float factor = max(color.g, 0.8); +float factor2 = pow2(factor); +#ifdef GBUFFERS_TERRAIN + float factor4 = pow2(factor2); +#else + float factor4 = factor2; +#endif + +smoothnessG = factor - pow2(pow2(color.g)) * 0.4; +highlightMult = 3.0 * max(pow2(factor4), 0.2); + +smoothnessD = factor4 * 0.75; + +#if MC_VERSION < 11300 + highlightMult *= 2.0; + smoothnessD /= 0.75; +#endif + +color.rgb *= 0.7 + 0.4 * GetLuminance(color.rgb); + +#ifdef COATED_TEXTURES + noiseFactor = 0.5; +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/dirt.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/dirt.glsl new file mode 100644 index 0000000..342053e --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/dirt.glsl @@ -0,0 +1 @@ +smoothnessG = color.r * 0.1 + 0.1; \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/emeraldBlock.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/emeraldBlock.glsl new file mode 100644 index 0000000..b73af61 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/emeraldBlock.glsl @@ -0,0 +1,14 @@ +materialMask = OSIEBCA; // Intense Fresnel + +float factor = pow2(sqrt2(GetLuminance(color.rgb))); +float factor2 = pow2(factor); +float factor4 = pow2(factor2); + +smoothnessG = factor - factor4 * 0.4; +highlightMult = 3.0 * factor4; + +smoothnessD = factor4 * 0.75; + +#ifdef COATED_TEXTURES + noiseFactor = 0.5; +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/endPortalFrame.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/endPortalFrame.glsl new file mode 100644 index 0000000..73504db --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/endPortalFrame.glsl @@ -0,0 +1,3 @@ +// End Portal Frame:Green Parts +smoothnessG = 0.25; +smoothnessD = 0.45; \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/endStone.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/endStone.glsl new file mode 100644 index 0000000..a5b666d --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/endStone.glsl @@ -0,0 +1,7 @@ +float factor = pow2(pow2(color.r)); +smoothnessG = factor * 0.65; +smoothnessD = smoothnessG * 0.6; + +#ifdef COATED_TEXTURES + noiseFactor = 0.66; +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/froglights.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/froglights.glsl new file mode 100644 index 0000000..82bf6c2 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/froglights.glsl @@ -0,0 +1,14 @@ +noSmoothLighting = true; noDirectionalShading = true; +lmCoordM = vec2(1.0, 0.0); + +float blockRes = absMidCoordPos.x * atlasSize.x; +vec2 signMidCoordPosM = abs((floor((signMidCoordPos + 1.0) * blockRes) + 0.5) / blockRes - 1.0); +float value = 1.0 - max(signMidCoordPosM.x, signMidCoordPosM.y); +emission = 0.3 + value + pow(dot(color.rgb, color.rgb) * 0.33, frogPow); +emission *= 1.7; + +#ifdef DISTANT_LIGHT_BOKEH + DoDistantLightBokehMaterial(emission, 2.0, lViewPos); +#endif + +color.rgb = pow2(color.rgb); \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/goldBlock.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/goldBlock.glsl new file mode 100644 index 0000000..a78dd59 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/goldBlock.glsl @@ -0,0 +1,20 @@ +materialMask = OSIEBCA * 3.0; // Gold Fresnel + +#ifdef GBUFFERS_TERRAIN + float colorG2 = pow2(color.g); +#else + float colorG2 = color.g; +#endif +float colorG4 = pow2(colorG2); +float factor = max(color.g, 0.8); + +smoothnessG = min1(factor - colorG4 * 0.5); +highlightMult = 3.5 * max(colorG4, 0.2); + +smoothnessD = colorG4; + +color.rgb *= 0.5 + 0.4 * GetLuminance(color.rgb); + +#ifdef COATED_TEXTURES + noiseFactor = 0.33; +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/ironBlock.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/ironBlock.glsl new file mode 100644 index 0000000..b0a1d12 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/ironBlock.glsl @@ -0,0 +1,14 @@ +#ifdef GBUFFERS_TERRAIN + smoothnessG = pow2(pow2(color.r)); +#else + smoothnessG = pow2(color.r); +#endif +highlightMult = smoothnessG * 3.0; +smoothnessD = smoothnessG; +materialMask = OSIEBCA; // Intense Fresnel + +color.rgb *= 0.6 + 0.5 * GetLuminance(color.rgb); + +#ifdef COATED_TEXTURES + noiseFactor = 0.33; +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/lanternMetal.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/lanternMetal.glsl new file mode 100644 index 0000000..6bef2a5 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/lanternMetal.glsl @@ -0,0 +1,6 @@ +smoothnessG = color.b; +smoothnessD = color.b; + +#ifdef COATED_TEXTURES + noiseFactor = 0.66; +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/lapisBlock.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/lapisBlock.glsl new file mode 100644 index 0000000..7838cb9 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/lapisBlock.glsl @@ -0,0 +1,6 @@ +smoothnessG = pow2(color.b) * 0.8; +smoothnessD = smoothnessG; + +#ifdef COATED_TEXTURES + noiseFactor = 0.5; +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/lava.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/lava.glsl new file mode 100644 index 0000000..cdbe146 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/lava.glsl @@ -0,0 +1,30 @@ +// Tweak to prevent the animation of lava causing brightness pulsing +vec3 avgColor = vec3(0.0); +ivec2 itexCoordC = ivec2(midCoord * atlasSize + 0.0001); +for (int x = -8; x < 8; x += 2) { + for (int y = -8; y < 8; y += 2) { + avgColor += texelFetch(tex, itexCoordC + ivec2(x, y), 0).rgb; + } +} +color.rgb /= max(GetLuminance(avgColor) * 0.0390625, 0.001); + +#ifdef NETHER + vec3 worldPos = playerPos + cameraPosition; + vec2 lavaPos = (floor(worldPos.xz * 16.0) + worldPos.y * 32.0) * 0.000666; + vec2 wind = vec2(frameTimeCounter * 0.012, 0.0); + + float noiseSample = texture2D(noisetex, lavaPos + wind).g; + noiseSample = noiseSample - 0.5; + noiseSample *= 0.1; + color.rgb = pow(color.rgb, vec3(1.0 + noiseSample)); +#endif + +noDirectionalShading = true; +lmCoordM = vec2(0.0); +emission = GetLuminance(color.rgb) * 6.5; + +maRecolor = vec3(clamp(pow2(pow2(pow2(smoothstep1(emission * 0.28)))), 0.12, 0.4) * 1.3) * vec3(1.0, vec2(0.7)); + +#if RAIN_PUDDLES >= 1 + noPuddles = 1.0; +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/leaves.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/leaves.glsl new file mode 100644 index 0000000..8c21a9d --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/leaves.glsl @@ -0,0 +1,26 @@ +subsurfaceMode = 2; + +#ifdef GBUFFERS_TERRAIN + materialMask = OSIEBCA * 253.0; // Reduced Edge TAA + + #ifdef COATED_TEXTURES + doTileRandomisation = false; + #endif +#endif + +#ifdef IPBR + float factor = min1(pow2(color.g - 0.15 * (color.r + color.b)) * 2.5); + smoothnessG = factor * 0.4; + highlightMult = factor * 4.0 + 2.0; + float fresnel = clamp(1.0 + dot(normalM, normalize(viewPos)), 0.0, 1.0); + highlightMult *= 1.0 - pow2(pow2(fresnel)); +#endif + +#ifdef SNOWY_WORLD + snowMinNdotU = min(pow2(pow2(color.g)), 0.1); + color.rgb = color.rgb * 0.5 + 0.5 * (color.rgb / glColor.rgb); +#endif + +#if SHADOW_QUALITY > -1 && SHADOW_QUALITY < 3 && defined OVERWORLD + shadowMult = vec3(sqrt1(max0(max(lmCoordM.y, min1(lmCoordM.x * 2.0)) - 0.95) * 20.0)); +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/netheriteBlock.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/netheriteBlock.glsl new file mode 100644 index 0000000..84533ab --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/netheriteBlock.glsl @@ -0,0 +1,8 @@ +smoothnessG = pow2(color.r * 2.0); +smoothnessG = min1(smoothnessG); +highlightMult = smoothnessG * 2.0; +smoothnessD = smoothnessG; + +#ifdef COATED_TEXTURES + noiseFactor = 0.33; +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/netherrack.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/netherrack.glsl new file mode 100644 index 0000000..b25ddfc --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/netherrack.glsl @@ -0,0 +1,7 @@ +#if MC_VERSION >= 11300 + smoothnessG = pow2(color.r) * 1.5; + smoothnessG = min1(smoothnessG); +#else + smoothnessG = color.r * 0.4 + 0.2; +#endif +smoothnessD = smoothnessG; \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/oakWood.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/oakWood.glsl new file mode 100644 index 0000000..05d0057 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/oakWood.glsl @@ -0,0 +1,3 @@ +smoothnessG = pow2(pow2(color.g)) * 2.5; +smoothnessG = min1(smoothnessG); +smoothnessD = smoothnessG; \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/obsidian.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/obsidian.glsl new file mode 100644 index 0000000..8df408a --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/obsidian.glsl @@ -0,0 +1,13 @@ +materialMask = OSIEBCA; // Intense Fresnel + +float factor = max0(0.3 - abs(color.r - 0.3)) * 1.5; + +smoothnessG = factor; +highlightMult = 2.0 + min1(smoothnessG * 2.0) * 1.5; +smoothnessG = min1(smoothnessG); + +smoothnessD = min1(factor + 0.07); + +#ifdef COATED_TEXTURES + noiseFactor = 1.25; +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/paleOakWood.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/paleOakWood.glsl new file mode 100644 index 0000000..5c55e21 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/paleOakWood.glsl @@ -0,0 +1,2 @@ +smoothnessD = pow2(color.g) * 0.7; +smoothnessG = smoothnessD; \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/pumpkin.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/pumpkin.glsl new file mode 100644 index 0000000..a5c240c --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/pumpkin.glsl @@ -0,0 +1 @@ +smoothnessG = color.g * 0.25; \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/quartzBlock.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/quartzBlock.glsl new file mode 100644 index 0000000..4071cce --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/quartzBlock.glsl @@ -0,0 +1,19 @@ +materialMask = OSIEBCA; // Intense Fresnel + +float factor = color.g; +float factor2 = pow2(factor); +float factor4 = pow2(factor2); +float factor8 = pow2(factor4); + +smoothnessG = factor - factor8 * 0.5; +highlightMult = 3.5 * factor8; + +smoothnessD = factor8; + +#ifdef GBUFFERS_TERRAIN + DoBrightBlockTweaks(color.rgb, 0.5, shadowMult, highlightMult); +#endif + +#ifdef COATED_TEXTURES + noiseFactor = 0.5; +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/rawCopperBlock.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/rawCopperBlock.glsl new file mode 100644 index 0000000..1cdabfe --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/rawCopperBlock.glsl @@ -0,0 +1,4 @@ +materialMask = OSIEBCA * 2.0; // Copper Fresnel +smoothnessG = pow2(color.r + color.g * 0.25) * 0.4; +smoothnessG = min1(smoothnessG); +smoothnessD = min1(smoothnessG * smoothnessG * 2.0); \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/rawGoldBlock.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/rawGoldBlock.glsl new file mode 100644 index 0000000..2534de2 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/rawGoldBlock.glsl @@ -0,0 +1,3 @@ +materialMask = OSIEBCA * 3.0; // Gold Fresnel +smoothnessG = pow2(pow2(color.g)); +smoothnessD = 0.5 * (smoothnessG + color.b); \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/rawIronBlock.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/rawIronBlock.glsl new file mode 100644 index 0000000..2041dc8 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/rawIronBlock.glsl @@ -0,0 +1,3 @@ +materialMask = OSIEBCA; // Intense Fresnel +smoothnessG = pow2(pow2(color.r)) * 0.7; +smoothnessD = smoothnessG * 0.6; \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/redstoneBlock.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/redstoneBlock.glsl new file mode 100644 index 0000000..7137661 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/redstoneBlock.glsl @@ -0,0 +1,11 @@ +materialMask = OSIEBCA * 5.0; // Redstone Fresnel + +float factor = pow2(color.r); +smoothnessG = 0.4; +highlightMult = factor + 0.2; + +smoothnessD = factor * 0.5 + 0.1; + +#ifdef COATED_TEXTURES + noiseFactor = 0.77; +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/redstoneTorch.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/redstoneTorch.glsl new file mode 100644 index 0000000..03fa09a --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/redstoneTorch.glsl @@ -0,0 +1,19 @@ +noSmoothLighting = true; noDirectionalShading = true; +lmCoordM.x = min(lmCoordM.x * 0.9, 0.77); + +if (color.r > 0.65) { + emission = (3.5 - 2.25 * color.g) * 0.97; + color.rgb *= color.rgb; + + #if MC_VERSION >= 12102 // redstone torch model got changed in 1.21.2 + color.gb = max(color.gb * vec2(0.75, 0.5), pow2(color.gb)); + #endif +} else if (color.r > color.g * 2.0) { + materialMask = OSIEBCA * 5.0; // Redstone Fresnel + + float factor = pow2(color.r); + smoothnessG = 0.4; + highlightMult = factor + 0.4; + + smoothnessD = factor * 0.7 + 0.3; +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/snow.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/snow.glsl new file mode 100644 index 0000000..f29a22a --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/snow.glsl @@ -0,0 +1,12 @@ +smoothnessG = (1.0 - pow(color.g, 64.0) * 0.3) * 0.4; +highlightMult = 2.0; + +smoothnessD = smoothnessG; + +#ifdef GBUFFERS_TERRAIN + DoBrightBlockTweaks(color.rgb, 0.5, shadowMult, highlightMult); +#endif + +#if RAIN_PUDDLES >= 1 + noPuddles = 1.0; +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/stone.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/stone.glsl new file mode 100644 index 0000000..c497d58 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/terrain/stone.glsl @@ -0,0 +1,7 @@ +smoothnessG = pow2(pow2(color.g)) * 1.5; +smoothnessG = min1(smoothnessG); +smoothnessD = smoothnessG; + +#ifdef COATED_TEXTURES + noiseFactor = 0.77; +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/translucents/glass.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/translucents/glass.glsl new file mode 100644 index 0000000..b914049 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/translucents/glass.glsl @@ -0,0 +1,22 @@ +if (color.a > 0.001) { + smoothnessG = 1.0; + highlightMult = 3.5; + reflectMult = 0.5; + + translucentMultCalculated = true; + translucentMult = vec4(0.0, 0.0, 0.0, 1.0); +} else { + #ifdef FANCY_GLASS + smoothnessG = 0.5; + highlightMult = 2.5; + reflectMult = 1.0; + color.rgb = vec3(0.75, 0.8, 0.85); + + translucentMultCalculated = true; + translucentMult.a = 0.0; + + color.a = max(color.a, GLASS_OPACITY); + #else + //discard; + #endif +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/translucents/netherPortal.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/translucents/netherPortal.glsl new file mode 100644 index 0000000..2bac5c9 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/translucents/netherPortal.glsl @@ -0,0 +1,68 @@ +lmCoordM = vec2(0.0); +color = vec4(0.0); + +int sampleCount = 8; + +float multiplier = 0.4 / (-viewVector.z * sampleCount); +vec2 interval = viewVector.xy * multiplier; +vec2 coord = signMidCoordPos * 0.5 + 0.5; +vec2 absMidCoordPos2 = absMidCoordPos * 2.0; +vec2 midCoord = texCoord - absMidCoordPos * signMidCoordPos; +vec2 minimumMidCoordPos = midCoord - absMidCoordPos; + +for (int i = 0; i < sampleCount; i++) { + float portalStep = (i + dither) / sampleCount; + coord += interval * portalStep; + vec2 sampleCoord = fract(coord) * absMidCoordPos2 + minimumMidCoordPos; + vec4 psample = texture2DLod(tex, sampleCoord, 0); + + float factor = 1.0 - portalStep; + psample *= pow(factor, 0.1); + + emission = max(emission, psample.r); + + color += psample; +} +color /= sampleCount; + +color.rgb *= color.rgb * vec3(1.25, 1.0, 0.65); +color.a = sqrt1(color.a) * 0.8; + +emission *= emission; +emission *= emission; +emission *= emission; +emission = clamp(emission * 120.0, 0.03, 1.2) * 8.0; + +#define PORTAL_REDUCE_CLOSEUP +#ifdef PORTAL_REDUCE_CLOSEUP + color.a *= min1(lViewPos - 0.2); +#endif + +#ifdef PORTAL_EDGE_EFFECT + vec3 voxelPos = SceneToVoxel(playerPos); + + if (CheckInsideVoxelVolume(voxelPos)) { + float portalOffset = 0.0625 * dither; + vec3[6] portalOffsets = vec3[]( + vec3( portalOffset, 0, 0), + vec3(-portalOffset, 0, 0), + vec3( 0, portalOffset, 0), + vec3( 0,-portalOffset, 0), + vec3( 0, 0, portalOffset), + vec3( 0, 0,-portalOffset) + ); + + float edge = 0.0; + for (int i = 0; i < 6; i++) { + uint voxel = texelFetch(voxel_sampler, ivec3(voxelPos + portalOffsets[i]), 0).r; + if (voxel != uint(25)) { + edge = 1.0; break; + } + } + + vec4 edgeColor = vec4(normalize(color.rgb), 1.0); + edgeColor.b *= 0.8; + color = mix(color, edgeColor, edge); + emission = mix(emission, 5.0, edge); + } +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/translucents/stainedGlass.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/translucents/stainedGlass.glsl new file mode 100644 index 0000000..4ec144e --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/translucents/stainedGlass.glsl @@ -0,0 +1,3 @@ +smoothnessG = 0.5; +highlightMult = 1.5; +reflectMult = 1.0; \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/translucents/water.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/translucents/water.glsl new file mode 100644 index 0000000..a2908a8 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/materials/specificMaterials/translucents/water.glsl @@ -0,0 +1,271 @@ +#if MC_VERSION >= 11300 + #if WATERCOLOR_MODE >= 2 + vec3 glColorM = glColor.rgb; + + #if WATERCOLOR_MODE >= 3 + glColorM.g = max(glColorM.g, 0.39); + #endif + + #ifdef GBUFFERS_WATER + translucentMultCalculated = true; + translucentMult.rgb = normalize(sqrt2(glColor.rgb)); + translucentMult.g *= 0.88; + #endif + + glColorM = sqrt1(glColorM) * vec3(1.0, 0.85, 0.8); + #else + vec3 glColorM = vec3(0.43, 0.6, 0.8); + #endif + + #if WATER_STYLE < 3 + vec3 colorPM = pow2(colorP.rgb); + color.rgb = colorPM * glColorM; + #else + vec3 colorPM = vec3(0.25); + color.rgb = 0.375 * glColorM; + #endif +#else + #if WATER_STYLE < 3 + color.rgb = mix(color.rgb, vec3(GetLuminance(color.rgb)), 0.88); + color.rgb = pow2(color.rgb) * vec3(2.3, 3.5, 3.1) * 0.9; + #else + color.rgb = vec3(0.13, 0.2, 0.27); + #endif +#endif + +#ifdef WATERCOLOR_CHANGED + color.rgb *= vec3(WATERCOLOR_RM, WATERCOLOR_GM, WATERCOLOR_BM); +#endif + +#define PHYSICS_OCEAN_INJECTION +#if defined GENERATED_NORMALS && (WATER_STYLE >= 2 || defined PHYSICS_OCEAN) && !defined DH_WATER + noGeneratedNormals = true; +#endif + +#if defined GBUFFERS_WATER || defined DH_WATER + lmCoordM.y = min(lmCoord.y * 1.07, 1.0); // Iris/Sodium skylight inconsistency workaround + + reflectMult = 1.0; + + #if WATER_MAT_QUALITY >= 3 + materialMask = OSIEBCA * 241.0; // Water + #endif + + #if WATER_MAT_QUALITY >= 2 || WATER_STYLE >= 2 + #define WATER_SPEED_MULT_M WATER_SPEED_MULT * 0.018 + float rawWind = frameTimeCounter * WATER_SPEED_MULT_M; + vec2 wind = vec2(rawWind, 0.0); + vec3 worldPos = playerPos + cameraPosition; + vec2 waterPos = worldPos.xz; + #if WATER_STYLE < 3 && defined GBUFFERS_WATER + float blockRes = absMidCoordPos.x * atlasSize.x * 2.0; + waterPos = floor(waterPos * blockRes) / blockRes; + #endif + waterPos = 0.032 * (waterPos + worldPos.y * 2.0); + #endif + + // Water Normals + #if WATER_STYLE >= 2 || RAIN_PUDDLES >= 1 && WATER_STYLE == 1 && WATER_MAT_QUALITY >= 2 + vec3 normalMap = vec3(0.0, 0.0, 1.0); + #if WATER_STYLE >= 2 + vec2 waterPosM = waterPos; + + #if WATER_SIZE_MULT != 100 + #define WATER_SIZE_MULT_M WATER_SIZE_MULT * 0.01 + waterPosM *= WATER_SIZE_MULT_M; + #endif + + #define WATER_BUMPINESS_M WATER_BUMPINESS * 0.8 + + #if WATER_STYLE >= 2 + waterPosM *= 2.5; wind *= 2.5; + + #if WATER_MAT_QUALITY >= 2 + vec2 parallaxMult = -0.01 * viewVector.xy / viewVector.z; + for (int i = 0; i < 4; i++) { + waterPosM += parallaxMult * texture2D(gaux4, waterPosM - wind).a; + waterPosM += parallaxMult * texture2D(gaux4, waterPosM * 0.25 - 0.5 * wind).a; + } + #endif + + vec2 normalMed = texture2D(gaux4, waterPosM + wind).rg - 0.5; + vec2 normalSmall = texture2D(gaux4, waterPosM * 4.0 - 2.0 * wind).rg - 0.5; + vec2 normalBig = texture2D(gaux4, waterPosM * 0.25 - 0.5 * wind).rg - 0.5; + normalBig += texture2D(gaux4, waterPosM * 0.05 - 0.05 * wind).rg - 0.5; + + normalMap.xy = normalMed * WATER_BUMP_MED + normalSmall * WATER_BUMP_SMALL + normalBig * WATER_BUMP_BIG; + normalMap.xy *= 6.0 * (1.0 - 0.7 * fresnel) * WATER_BUMPINESS_M; + #endif + + normalMap.xy *= 0.03 * lmCoordM.y + 0.01; + #else + float pNormalMult = 0.02 * rainFactor * inRainy * pow2(lmCoordM.y); + + if (pNormalMult > 0.0005) { + vec2 puddlePos = floor((playerPos.xz + cameraPosition.xz) * 16.0) * 0.00625; + + vec2 puddleWind = vec2(frameTimeCounter) * 0.015; + vec2 pNormalCoord1 = puddlePos + vec2(puddleWind.x, puddleWind.y); + vec2 pNormalCoord2 = puddlePos + vec2(puddleWind.x * -1.5, puddleWind.y * -1.0); + vec3 pNormalNoise1 = texture2D(noisetex, pNormalCoord1).rgb; + vec3 pNormalNoise2 = texture2D(noisetex, pNormalCoord2).rgb; + + normalMap.xy = (pNormalNoise1.xy + pNormalNoise2.xy - vec2(1.0)) * pNormalMult; + #endif + + normalMap.z = sqrt(1.0 - (pow2(normalMap.x) + pow2(normalMap.y))); + normalM = clamp(normalize(normalMap * tbnMatrix), vec3(-1.0), vec3(1.0)); + + #if WATER_STYLE == 1 + } + #endif + + #if WATER_STYLE >= 2 + vec3 vector = reflect(nViewPos, normalize(normalM)); + float norMix = pow2(pow2(pow2(1.0 - max0(dot(normal, vector))))) * 0.5; + normalM = mix(normalM, normal, norMix); // Fixes normals pointing inside water + + float fresnelP = fresnel; + fresnel = clamp(1.0 + dot(normalM, nViewPos), 0.0, 1.0); + #endif + #endif + //// + + float fresnel2 = pow2(fresnel); + float fresnel4 = pow2(fresnel2); + + #if WATER_MAT_QUALITY >= 2 + if (isEyeInWater != 1) { + // Noise Coloring + float noise = texture2D(noisetex, (waterPos + wind) * 0.25).g; + noise = noise - 0.5; + noise *= 0.25; + color.rgb = pow(color.rgb, vec3(1.0 + noise)); + + // Water Alpha + #ifdef GBUFFERS_WATER + float depthT = texelFetch(depthtex1, texelCoord, 0).r; + #elif defined DH_WATER + float depthT = texelFetch(dhDepthTex1, texelCoord, 0).r; + #endif + vec3 screenPosT = vec3(screenPos.xy, depthT); + #ifdef TAA + vec3 viewPosT = ScreenToView(vec3(TAAJitter(screenPosT.xy, -0.5), screenPosT.z)); + #else + vec3 viewPosT = ScreenToView(screenPosT); + #endif + float lViewPosT = length(viewPosT); + float lViewPosDifM = lViewPos - lViewPosT; + + #if WATER_STYLE < 3 + color.a = sqrt1(color.a); + #else + color.a = 0.98; + #endif + + #ifdef DISTANT_HORIZONS + if (depthT == 1.0) color.a *= smoothstep(far, far * 0.9, lViewPos); + #endif + + #if WATER_FOG_MULT != 100 + #define WATER_FOG_MULT_M WATER_FOG_MULT * 0.01; + lViewPosDifM *= WATER_FOG_MULT_M; + #endif + + float waterFog = max0(1.0 - exp(lViewPosDifM * 0.075)); + color.a *= 0.25 + 0.75 * waterFog; + + #if defined BRIGHT_CAVE_WATER && WATER_ALPHA_MULT < 200 + // For better water visibility in caves and some extra color pop outdoors + color.rgb *= 2.5 - sqrt2(waterFog) - 0.5 * lmCoordM.y; + #endif + + #if WATER_ALPHA_MULT != 100 + #define WATER_ALPHA_MULT_M 100.0 / WATER_ALPHA_MULT + color.a = pow(color.a, WATER_ALPHA_MULT_M); + #endif + //// + + // Water Foam + #if WATER_FOAM_I > 0 && defined GBUFFERS_WATER + if (NdotU > 0.99) { + vec3 matrixM = vec3( + gbufferModelViewInverse[0].y, + gbufferModelViewInverse[1].y, + gbufferModelViewInverse[2].y + ); + float playerPosTY = dot(matrixM, viewPosT) + gbufferModelViewInverse[3].y; + float yPosDif = playerPosTY - playerPos.y; + + #if WATER_STYLE < 3 && MC_VERSION >= 11300 + float dotColorPM = dot(colorPM, colorPM); + float foamThreshold = min(pow2(dotColorPM) * 1.6, 1.2); + #else + float foamThreshold = pow2(texture2D(noisetex, waterPos * 4.0 + wind * 0.5).g) * 1.6; + #endif + float foam = pow2(clamp((foamThreshold + yPosDif) / foamThreshold, 0.0, 1.0)); + #ifndef END + foam *= 0.4 + 0.25 * lmCoord.y; + #else + foam *= 0.6; + #endif + foam *= clamp((fract(worldPos.y) - 0.7) * 10.0, 0.0, 1.0); + + vec4 foamColor = vec4(0.9, 0.95, 1.05, 1.0); + + #define WATER_FOAM_IM WATER_FOAM_I * 0.01 + #if WATER_FOAM_I < 100 + foam *= WATER_FOAM_IM; + #elif WATER_FOAM_I > 100 + foamColor *= WATER_FOAM_IM; + #endif + + color = mix(color, foamColor, foam); + reflectMult = 1.0 - foam; + } + #endif + //// + } else { // Underwater + noDirectionalShading = true; + + reflectMult = 0.5; + + #if MC_VERSION < 11300 && WATER_STYLE >= 3 + color.a = 0.7; + #endif + + #ifdef GBUFFERS_WATER + #if WATER_STYLE == 1 + translucentMult.rgb *= 1.0 - fresnel4; + #else + translucentMult.rgb *= 1.0 - 0.9 * max(0.5 * sqrt(fresnel4), fresnel4); + #endif + #endif + } + #else + shadowMult = vec3(0.0); + #endif + + // Final Tweaks + reflectMult *= 0.5 + 0.5 * NdotUmax0; + + color.a = mix(color.a, 1.0, fresnel4); + + #ifdef GBUFFERS_WATER + #if WATER_STYLE == 3 || WATER_STYLE == 2 && SUN_MOON_STYLE >= 2 + smoothnessG = 1.0; + + const float WATER_BUMPINESS_M2 = min(WATER_BUMP_MED * WATER_BUMP_SMALL * WATER_BUMPINESS * 0.65, 1.0); + vec2 lightNormalP = WATER_BUMPINESS_M2 * (normalMed + 0.5 * normalSmall); + vec3 lightNormal = normalize(vec3(lightNormalP, 1.0) * tbnMatrix); + highlightMult = dot(lightNormal, lightVec); + highlightMult = max0(highlightMult) / max(dot(normal, lightVec), 0.17); + highlightMult = mix(pow2(pow2(highlightMult * 1.1)), 1.0, min1(sqrt(miplevel) * 0.45)) * 0.24; + #else + smoothnessG = 0.5; + + highlightMult = min(pow2(pow2(dot(colorP.rgb, colorP.rgb) * 0.4)), 0.5); + highlightMult *= (16.0 - 15.0 * fresnel2) * (sunVisibility > 0.5 ? 0.85 : 0.425); + #endif + #endif +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/colorCodedPrograms.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/colorCodedPrograms.glsl new file mode 100644 index 0000000..e76b386 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/colorCodedPrograms.glsl @@ -0,0 +1,46 @@ +void ColorCodeProgram(inout vec4 color, int mat) { + // Hold spider eyes in both hands to disable the function + if (heldItemId == 40000 && heldItemId2 == 40000) return; + + #if defined GBUFFERS_TERRAIN // Green + color.rgb = vec3(0.0, 1.0, 0.0); + #elif defined GBUFFERS_WATER // Dark Blue + color.rgb = vec3(0.0, 0.0, 1.0); + #elif defined GBUFFERS_SKYBASIC // Light Blue + color.rgb = vec3(0.0, 1.0, 2.0); + #elif defined GBUFFERS_WEATHER // Magenta + color.rgb = vec3(3.0, 0.0, 3.0); + #elif defined GBUFFERS_BLOCK // Yellow + color.rgb = vec3(1.5, 1.5, 0.0); + #elif defined GBUFFERS_HAND // Orange + color.rgb = vec3(1.5, 0.7, 0.0); + #elif defined GBUFFERS_ENTITIES // Red + color.rgb = vec3(1.5, 0.0, 0.0); + #elif defined GBUFFERS_BASIC // White + color.rgb = vec3(3.0, 3.0, 3.0); + #elif defined GBUFFERS_SPIDEREYES // Red-Blue Vertical Stripes + color.rgb = mix(vec3(2.0, 0.0, 0.0), vec3(0.0, 0.0, 2.0), mod(gl_FragCoord.x, 20.0) / 20.0); + #elif defined GBUFFERS_TEXTURED // Red-Blue Horizontal Stripes + color.rgb = mix(vec3(2.0, 0.0, 0.0), vec3(0.0, 0.0, 2.0), mod(gl_FragCoord.y, 20.0) / 20.0); + #elif defined GBUFFERS_CLOUDS // Red-Green Vertical Stripes + color.rgb = mix(vec3(2.0, 0.0, 0.0), vec3(0.0, 2.0, 0.0), mod(gl_FragCoord.x, 20.0) / 20.0); + #elif defined GBUFFERS_BEACONBEAM // Red-Green Horizontal Stripes + color.rgb = mix(vec3(2.0, 0.0, 0.0), vec3(0.0, 2.0, 0.0), mod(gl_FragCoord.y, 20.0) / 20.0); + #elif defined GBUFFERS_ARMOR_GLINT // Black-White Vertical Stripes + color.rgb = mix(vec3(0.0, 0.0, 0.0), vec3(1.5, 1.5, 1.5), mod(gl_FragCoord.x, 20.0) / 20.0); + #elif defined GBUFFERS_DAMAGEDBLOCK // Black-White Horizontal Stripes + color.rgb = mix(vec3(0.0, 0.0, 0.0), vec3(1.5, 1.5, 1.5), mod(gl_FragCoord.y, 20.0) / 20.0); + #elif defined GBUFFERS_SKYTEXTURED // Green-Blue Horizontal Stripes + color.rgb = mix(vec3(0.0, 2.0, 0.0), vec3(0.0, 0.0, 2.0), mod(gl_FragCoord.y, 20.0) / 20.0); + #endif + + color.rgb *= 0.75; + + // Hold spider eye in one hand to switch to ID=0 check mode + if (heldItemId == 40000 || heldItemId2 == 40000) { + if (mat == 0) // Magenta-Black Horizontal Stripes + color.rgb = mix(vec3(0.0, 0.0, 0.0), vec3(3.0, 0.0, 3.0), mod(gl_FragCoord.y, 20.0) / 20.0); + else + color.rgb = vec3(0.25); + } +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/darkOutline.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/darkOutline.glsl new file mode 100644 index 0000000..5f6e4ed --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/darkOutline.glsl @@ -0,0 +1,52 @@ +vec2 darkOutlineOffsets[12] = vec2[12]( + vec2( 1.0,0.0), + vec2(-1.0,1.0), + vec2( 0.0,1.0), + vec2( 1.0,1.0), + vec2(-2.0,2.0), + vec2(-1.0,2.0), + vec2( 0.0,2.0), + vec2( 1.0,2.0), + vec2( 2.0,2.0), + vec2(-2.0,1.0), + vec2( 2.0,1.0), + vec2( 2.0,0.0) +); + +void DoDarkOutline(inout vec3 color, inout float skyFade, float z0, float dither) { + vec2 scale = vec2(1.0 / view); + + float outline = 1.0; + float z = GetLinearDepth(z0) * far * 2.0; + float minZ = 1.0, sampleZA = 0.0, sampleZB = 0.0; + + #if DARK_OUTLINE_THICKNESS == 1 + int sampleCount = 4; + #elif DARK_OUTLINE_THICKNESS == 2 + int sampleCount = 12; + #endif + + for (int i = 0; i < sampleCount; i++) { + vec2 offset = scale * darkOutlineOffsets[i]; + sampleZA = texture2D(depthtex0, texCoord + offset).r; + sampleZB = texture2D(depthtex0, texCoord - offset).r; + float sampleZsum = GetLinearDepth(sampleZA) + GetLinearDepth(sampleZB); + outline *= clamp(1.0 - (z - sampleZsum * far), 0.0, 1.0); + minZ = min(minZ, min(sampleZA, sampleZB)); + } + + if (outline < 0.909091) { + vec4 viewPos = gbufferProjectionInverse * (vec4(texCoord, minZ, 1.0) * 2.0 - 1.0); + viewPos /= viewPos.w; + float lViewPos = length(viewPos.xyz); + vec3 playerPos = ViewToPlayer(viewPos.xyz); + vec3 nViewPos = normalize(viewPos.xyz); + float VdotU = dot(nViewPos, upVec); + float VdotS = dot(nViewPos, sunVec); + + vec3 newColor = vec3(0.0); + DoFog(newColor, skyFade, lViewPos, playerPos, VdotU, VdotS, dither); + + color = mix(color, newColor, 1.0 - outline * 1.1); + } +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/distantLightBokeh.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/distantLightBokeh.glsl new file mode 100644 index 0000000..f4308c4 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/distantLightBokeh.glsl @@ -0,0 +1,21 @@ +float GetDistantLightBokehMix(float lViewPos) { + //if (heldItemId == 40000 || heldItemId2 == 40000) return 0.0; // Hold spider eye to disable; + return clamp01(0.005 * (lViewPos - 60.0)); +} + +#ifdef GBUFFERS_TERRAIN + float GetDistantLightBokehMixMipmapped(float lViewPos) { + float dlbMix = GetDistantLightBokehMix(lViewPos); + return dlbMix * min1(miplevel * 0.4); + } + + void DoDistantLightBokehMaterial(inout vec4 color, vec4 distantColor, inout float emission, float distantEmission, float lViewPos) { + float dlbMix = GetDistantLightBokehMixMipmapped(lViewPos); + color = mix(color, distantColor, dlbMix); + emission = mix(emission, distantEmission, dlbMix); + } + void DoDistantLightBokehMaterial(inout float emission, float distantEmission, float lViewPos) { + float dlbMix = GetDistantLightBokehMixMipmapped(lViewPos); + emission = mix(emission, distantEmission, dlbMix); + } +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/handSway.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/handSway.glsl new file mode 100644 index 0000000..a647bfe --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/handSway.glsl @@ -0,0 +1,13 @@ +#if HAND_SWAYING == 1 + const float handSwayMult = 0.5; +#elif HAND_SWAYING == 2 + const float handSwayMult = 1.0; +#elif HAND_SWAYING == 3 + const float handSwayMult = 2.0; +#endif +gl_Position.x += handSwayMult * (sin(frameTimeCounter * 0.86)) / 256.0; +gl_Position.y += handSwayMult * (cos(frameTimeCounter * 1.5)) / 64.0; + +//dvd screensaver +//gl_Position.x -= - 0.1 + mod(frameTimeCounter * 0.3, 1.0) * sign(mod(frameTimeCounter * 0.3, 2.0) - 1.0) + float(mod(frameTimeCounter * 0.3, 2.0) < 1.0); +//gl_Position.y += mod(frameTimeCounter * 0.61803398875, 1.0) * sign(mod(frameTimeCounter * 0.61803398875, 2.0) - 1.0) + float(mod(frameTimeCounter * 0.61803398875, 2.0) < 1.0); \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/lensFlare.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/lensFlare.glsl new file mode 100644 index 0000000..4ca8a30 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/lensFlare.glsl @@ -0,0 +1,121 @@ +float fovmult = gbufferProjection[1][1] / 1.37373871; + +float BaseLens(vec2 lightPos, float size, float dist, float hardness) { + vec2 lensCoord = (texCoord + (lightPos * dist - 0.5)) * vec2(aspectRatio, 1.0); + float lens = clamp(1.0 - length(lensCoord) / (size * fovmult), 0.0, 1.0 / hardness) * hardness; + lens *= lens; lens *= lens; + return lens; +} + +float OverlapLens(vec2 lightPos, float size, float dista, float distb) { + return BaseLens(lightPos, size, dista, 2.0) * BaseLens(lightPos, size, distb, 2.0); +} + +float PointLens(vec2 lightPos, float size, float dist) { + float lens = BaseLens(lightPos, size, dist, 1.5) + BaseLens(lightPos, size * 4.0, dist, 1.0) * 0.5; + return lens * (0.5 + 0.5 * sunFactor); +} + +float RingLensTransform(float lensFlare) { + return pow(1.0 - pow(1.0 - pow(lensFlare, 0.25), 10.0), 5.0); +} +float RingLens(vec2 lightPos, float size, float distA, float distB) { + float lensFlare1 = RingLensTransform(BaseLens(lightPos, size, distA, 1.0)); + float lensFlare2 = RingLensTransform(BaseLens(lightPos, size, distB, 1.0)); + + float lensFlare = clamp(lensFlare2 - lensFlare1, 0.0, 1.0); + lensFlare *= sqrt(lensFlare); + + lensFlare *= 1.0 - length(texCoord - lightPos - 0.5); + return lensFlare; +} + +vec2 lensFlareCheckOffsets[4] = vec2[4]( + vec2( 1.0,0.0), + vec2(-1.0,1.0), + vec2( 0.0,1.0), + vec2( 1.0,1.0) +); + +void DoLensFlare(inout vec3 color, vec3 viewPos, float dither) { + #if LENSFLARE_MODE == 1 + if (sunVec.z > 0.0) return; + #endif + + vec4 clipPosSun = gbufferProjection * vec4(sunVec + 0.001, 1.0); //+0.001 fixes black screen with camera rotation set to 0,0 + vec3 lightPos3 = clipPosSun.xyz / clipPosSun.w * 0.5; + vec2 lightPos = lightPos3.xy; + vec3 screenPosSun = lightPos3 + 0.5; + + float flareFactor = 1.0; + vec2 cScale = 40.0 / vec2(viewWidth, viewHeight); + for (int i = 0; i < 4; i++) { + vec2 cOffset = (lensFlareCheckOffsets[i] - dither) * cScale; + vec2 checkCoord1 = screenPosSun.xy + cOffset; + vec2 checkCoord2 = screenPosSun.xy - cOffset; + + float zSample1 = texture2D(depthtex0, checkCoord1).r; + float zSample2 = texture2D(depthtex0, checkCoord2).r; + #ifdef VL_CLOUDS_ACTIVE + float cloudLinearDepth1 = texture2D(colortex4, checkCoord1).r; + float cloudLinearDepth2 = texture2D(colortex4, checkCoord2).r; + zSample1 = min(zSample1, cloudLinearDepth1); + zSample2 = min(zSample2, cloudLinearDepth2); + #endif + + if (zSample1 < 1.0) + flareFactor -= 0.125; + if (zSample2 < 1.0) + flareFactor -= 0.125; + } + + float str = length(lightPos * vec2(aspectRatio, 1.0)); + str = pow(clamp(str * 8.0, 0.0, 1.0), 2.0) - clamp(str * 3.0 - 1.5, 0.0, 1.0); + flareFactor *= str; + + #ifdef SUN_MOON_DURING_RAIN + flareFactor *= 0.65 - 0.4 * rainFactor; + #else + flareFactor *= 1.0 - rainFactor; + #endif + + vec3 flare = ( + BaseLens(lightPos, 0.3, -0.45, 1.0) * vec3(2.2, 1.2, 0.1) * 0.07 + + BaseLens(lightPos, 0.3, 0.10, 1.0) * vec3(2.2, 0.4, 0.1) * 0.03 + + BaseLens(lightPos, 0.3, 0.30, 1.0) * vec3(2.2, 0.2, 0.1) * 0.04 + + BaseLens(lightPos, 0.3, 0.50, 1.0) * vec3(2.2, 0.4, 2.5) * 0.05 + + BaseLens(lightPos, 0.3, 0.70, 1.0) * vec3(1.8, 0.4, 2.5) * 0.06 + + BaseLens(lightPos, 0.3, 0.90, 1.0) * vec3(0.1, 0.2, 2.5) * 0.07 + + + OverlapLens(lightPos, 0.08, -0.28, -0.39) * vec3(2.5, 1.2, 0.1) * 0.015 + + OverlapLens(lightPos, 0.08, -0.20, -0.31) * vec3(2.5, 0.5, 0.1) * 0.010 + + OverlapLens(lightPos, 0.12, 0.06, 0.19) * vec3(2.5, 0.2, 0.1) * 0.020 + + OverlapLens(lightPos, 0.12, 0.15, 0.28) * vec3(1.8, 0.1, 1.2) * 0.015 + + OverlapLens(lightPos, 0.12, 0.24, 0.37) * vec3(1.0, 0.1, 2.5) * 0.010 + + + PointLens(lightPos, 0.03, -0.55) * vec3(2.5, 1.6, 0.0) * 0.06 + + PointLens(lightPos, 0.02, -0.40) * vec3(2.5, 1.0, 0.0) * 0.045 + + PointLens(lightPos, 0.04, 0.43) * vec3(2.5, 0.6, 0.6) * 0.06 + + PointLens(lightPos, 0.02, 0.60) * vec3(0.2, 0.6, 2.5) * 0.045 + + PointLens(lightPos, 0.03, 0.67) * vec3(0.7, 1.1, 3.0) * 0.075 + + + RingLens(lightPos, 0.22, 0.44, 0.46) * vec3(0.10, 0.35, 2.50) * 1.5 + + RingLens(lightPos, 0.15, 0.98, 0.99) * vec3(0.15, 0.40, 2.55) * 2.5 + ); + + #if LENSFLARE_MODE == 2 + if (sunVec.z > 0.0) { + flare = flare * 0.2 + GetLuminance(flare) * vec3(0.3, 0.4, 0.6); + flare *= clamp01(1.0 - (SdotU + 0.1) * 5.0); + flareFactor *= LENSFLARE_I > 1.001 ? sqrt(LENSFLARE_I) : LENSFLARE_I; + } else + #endif + { + flareFactor *= LENSFLARE_I; + flare *= clamp01((SdotU + 0.1) * 5.0); + } + + flare *= flareFactor; + + color = mix(color, vec3(1.0), flare); +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/pixelation.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/pixelation.glsl new file mode 100644 index 0000000..f6d92a6 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/pixelation.glsl @@ -0,0 +1,112 @@ +#if PIXEL_SCALE == -2 + #define PIXEL_TEXEL_SCALE 4.0 +#elif PIXEL_SCALE == -1 + #define PIXEL_TEXEL_SCALE 2.0 +#elif PIXEL_SCALE == 2 + #define PIXEL_TEXEL_SCALE 0.5 +#elif PIXEL_SCALE == 3 + #define PIXEL_TEXEL_SCALE 0.25 +#elif PIXEL_SCALE == 4 + #define PIXEL_TEXEL_SCALE 0.125 +#elif PIXEL_SCALE == 5 + #define PIXEL_TEXEL_SCALE 0.0625 +#else // 1 or out of range + #define PIXEL_TEXEL_SCALE 1.0 +#endif + +#ifdef FRAGMENT_SHADER + // Thanks to Nestorboy + + // Computes axis-aligned screen space offset to texel center. + // https://forum.unity.com/threads/the-quest-for-efficient-per-texel-lighting.529948/#post-7536023 + vec2 ComputeTexelOffset(vec2 uv, vec4 texelSize) { + // 1. Calculate how much the texture UV coords need to shift to be at the center of the nearest texel. + vec2 uvCenter = (floor(uv * texelSize.zw) + 0.5) * texelSize.xy; + vec2 dUV = uvCenter - uv; + + // 2. Calculate how much the texture coords vary over fragment space. + // This essentially defines a 2x2 matrix that gets texture space (UV) deltas from fragment space (ST) deltas. + vec2 dUVdS = dFdx(uv); + vec2 dUVdT = dFdy(uv); + + if (abs(dUVdS) + abs(dUVdT) == vec2(0.0)) return vec2(0.0); + + // 3. Invert the texture delta from fragment delta matrix. Where the magic happens. + mat2x2 dSTdUV = mat2x2(dUVdT[1], -dUVdT[0], -dUVdS[1], dUVdS[0]) * (1.0 / (dUVdS[0] * dUVdT[1] - dUVdT[0] * dUVdS[1])); + + // 4. Convert the texture delta to fragment delta. + vec2 dST = dUV * dSTdUV; + return dST; + } + + vec2 ComputeTexelOffset(sampler2D tex, vec2 uv) { + vec2 texSize = textureSize(tex, 0) * PIXEL_TEXEL_SCALE; + vec4 texelSize = vec4(1.0 / texSize.xy, texSize.xy); + + return ComputeTexelOffset(uv, texelSize); + } + + vec4 TexelSnap(vec4 value, vec2 texelOffset) { + if (texelOffset == vec2(0.0)) return value; + vec4 dx = dFdx(value); + vec4 dy = dFdy(value); + + vec4 valueOffset = dx * texelOffset.x + dy * texelOffset.y; + valueOffset = clamp(valueOffset, -1.0, 1.0); + + return value + valueOffset; + } + + vec3 TexelSnap(vec3 value, vec2 texelOffset) { + if (texelOffset == vec2(0.0)) return value; + vec3 dx = dFdx(value); + vec3 dy = dFdy(value); + + vec3 valueOffset = dx * texelOffset.x + dy * texelOffset.y; + valueOffset = clamp(valueOffset, -1.0, 1.0); + + return value + valueOffset; + } + + vec2 TexelSnap(vec2 value, vec2 texelOffset) { + if (texelOffset == vec2(0.0)) return value; + vec2 dx = dFdx(value); + vec2 dy = dFdy(value); + + vec2 valueOffset = dx * texelOffset.x + dy * texelOffset.y; + valueOffset = clamp(valueOffset, -1.0, 1.0); + + return value + valueOffset; + } + + float TexelSnap(float value, vec2 texelOffset) { + if (texelOffset == vec2(0.0)) return value; + float dx = dFdx(value); + float dy = dFdy(value); + + float valueOffset = dx * texelOffset.x + dy * texelOffset.y; + valueOffset = clamp(valueOffset, -1.0, 1.0); + + return value + valueOffset; + } + + vec4 TexelSnap(vec4 value, vec2 texCoords, vec4 texelSize) { + vec2 xyOffset = ComputeTexelOffset(texCoords, texelSize); + return TexelSnap(value, xyOffset); + } + + vec3 TexelSnap(vec3 value, vec2 texCoords, vec4 texelSize) { + vec2 xyOffset = ComputeTexelOffset(texCoords, texelSize); + return TexelSnap(value, xyOffset); + } + + vec2 TexelSnap(vec2 value, vec2 texCoords, vec4 texelSize) { + vec2 xyOffset = ComputeTexelOffset(texCoords, texelSize); + return TexelSnap(value, xyOffset); + } + + float TexelSnap(float value, vec2 texCoords, vec4 texelSize) { + vec2 xyOffset = ComputeTexelOffset(texCoords, texelSize); + return TexelSnap(value, xyOffset); + } +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/puddleVoxelization.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/puddleVoxelization.glsl new file mode 100644 index 0000000..5161684 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/puddleVoxelization.glsl @@ -0,0 +1,35 @@ +const ivec3 puddle_voxelVolumeSize = ivec3(128); + +vec3 TransformMat(mat4 m, vec3 pos) { + return mat3(m) * pos + m[3].xyz; +} + +vec3 SceneToPuddleVoxel(vec3 scenePos) { + return scenePos + fract(cameraPosition) + (0.5 * vec3(puddle_voxelVolumeSize)); +} + +bool CheckInsidePuddleVoxelVolume(vec3 voxelPos) { + #ifndef SHADOW + voxelPos -= puddle_voxelVolumeSize / 2; + voxelPos += sign(voxelPos) * 0.95; + voxelPos += puddle_voxelVolumeSize / 2; + #endif + voxelPos /= vec3(puddle_voxelVolumeSize); + return clamp01(voxelPos) == voxelPos; +} + +#if defined SHADOW && defined VERTEX_SHADER + void UpdatePuddleVoxelMap(int mat) { + if (renderStage != MC_RENDER_STAGE_TERRAIN_TRANSLUCENT) return; + if (mat == 32000) return; // Water + + vec3 model_pos = gl_Vertex.xyz + at_midBlock / 64.0; + vec3 view_pos = TransformMat(gl_ModelViewMatrix, model_pos); + vec3 scenePos = TransformMat(shadowModelViewInverse, view_pos); + vec3 voxelPos = SceneToPuddleVoxel(scenePos); + + if (CheckInsidePuddleVoxelVolume(voxelPos)) + if (scenePos.y >= -3.5) + imageStore(puddle_img, ivec2(voxelPos.xz), uvec4(10u, 0u, 0u, 0u)); + } +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/showLightLevels.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/showLightLevels.glsl new file mode 100644 index 0000000..a8cd6c1 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/showLightLevels.glsl @@ -0,0 +1,42 @@ +#if SHOW_LIGHT_LEVEL == 1 + if (heldItemId == 40000 || heldItemId2 == 40000) +#elif SHOW_LIGHT_LEVEL == 2 + if (heldBlockLightValue > 7.4 || heldBlockLightValue2 > 7.4) +#endif + +if (NdotU > 0.99) { + #ifdef OVERWORLD + #if MC_VERSION < 11800 + float lxMin = 0.533334; + #else + float lxMin = 0.034; // Quite high minimum value because of an Iris/Sodium issue + #endif + float lyMin = 0.533334; + #else + float lxMin = 0.8; + float lyMin = 0.533334; + #endif + + bool xDanger = lmCoord.x < lxMin; + #ifndef NETHER + bool yDanger = lmCoord.y < lyMin; + #else + bool yDanger = lmCoord.x < lyMin; + #endif + + if (xDanger) { + vec2 indicatePos = playerPos.xz + cameraPosition.xz; + indicatePos = 1.0 - 2.0 * abs(fract(indicatePos) - 0.5); + float minPos = min(indicatePos.x, indicatePos.y); + + if (minPos > 0.5) { + color.rgb = yDanger ? vec3(0.4, 0.05, 0.05) : vec3(0.3, 0.3, 0.05); + + smoothnessG = 0.5; + highlightMult = 1.0; + smoothnessD = 0.0; + + emission = 3.0; + } + } +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/voxelization.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/voxelization.glsl new file mode 100644 index 0000000..2e8e4e1 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/voxelization.glsl @@ -0,0 +1,322 @@ +#ifndef INCLUDE_VOXELIZATION + #define INCLUDE_VOXELIZATION + + #if COLORED_LIGHTING_INTERNAL <= 512 + const ivec3 voxelVolumeSize = ivec3(COLORED_LIGHTING_INTERNAL, COLORED_LIGHTING_INTERNAL * 0.5, COLORED_LIGHTING_INTERNAL); + #else + const ivec3 voxelVolumeSize = ivec3(COLORED_LIGHTING_INTERNAL, 512 * 0.5, COLORED_LIGHTING_INTERNAL); + #endif + + float effectiveACLdistance = min(float(COLORED_LIGHTING_INTERNAL), shadowDistance * 2.0); + + vec3 transform(mat4 m, vec3 pos) { + return mat3(m) * pos + m[3].xyz; + } + + vec3 SceneToVoxel(vec3 scenePos) { + return scenePos + cameraPositionBestFract + (0.5 * vec3(voxelVolumeSize)); + } + + bool CheckInsideVoxelVolume(vec3 voxelPos) { + #ifndef SHADOW + voxelPos -= voxelVolumeSize / 2; + voxelPos += sign(voxelPos) * 0.95; + voxelPos += voxelVolumeSize / 2; + #endif + voxelPos /= vec3(voxelVolumeSize); + return clamp01(voxelPos) == voxelPos; + } + + vec4 GetLightVolume(vec3 pos) { + vec4 lightVolume; + + #ifdef COMPOSITE + #undef ACL_CORNER_LEAK_FIX + #endif + + #ifdef ACL_CORNER_LEAK_FIX + float minMult = 1.5; + ivec3 posTX = ivec3(pos * voxelVolumeSize); + + ivec3[6] adjacentOffsets = ivec3[]( + ivec3( 1, 0, 0), + ivec3(-1, 0, 0), + ivec3( 0, 1, 0), + ivec3( 0,-1, 0), + ivec3( 0, 0, 1), + ivec3( 0, 0,-1) + ); + + int adjacentCount = 0; + for (int i = 0; i < 6; i++) { + int voxel = int(texelFetch(voxel_sampler, posTX + adjacentOffsets[i], 0).r); + if (voxel == 1 || voxel >= 200) adjacentCount++; + } + + if (int(texelFetch(voxel_sampler, posTX, 0).r) >= 200) adjacentCount = 6; + #endif + + if ((frameCounter & 1) == 0) { + lightVolume = texture(floodfill_sampler_copy, pos); + #ifdef ACL_CORNER_LEAK_FIX + if (adjacentCount >= 3) { + vec4 lightVolumeTX = texelFetch(floodfill_sampler_copy, posTX, 0); + if (dot(lightVolumeTX, lightVolumeTX) > 0.01) + lightVolume.rgb = min(lightVolume.rgb, lightVolumeTX.rgb * minMult); + } + #endif + } else { + lightVolume = texture(floodfill_sampler, pos); + #ifdef ACL_CORNER_LEAK_FIX + if (adjacentCount >= 3) { + vec4 lightVolumeTX = texelFetch(floodfill_sampler, posTX, 0); + if (dot(lightVolumeTX, lightVolumeTX) > 0.01) + lightVolume.rgb = min(lightVolume.rgb, lightVolumeTX.rgb * minMult); + } + #endif + } + + return lightVolume; + } + + int GetVoxelIDs(int mat) { + /* These return IDs must be consistent across the following files: + "voxelization.glsl", "blocklightColors.glsl", "item.properties" + The order of if-checks or block IDs don't matter. The returning IDs matter. */ + + #define ALWAYS_DO_IPBR_LIGHTS + + #if defined IPBR || defined ALWAYS_DO_IPBR_LIGHTS + #define DO_IPBR_LIGHTS + #endif + + if (mat < 10564) { + if (mat < 10356) { + if (mat < 10300) { + if (mat < 10228) { + if (mat == 10056) return 14; // Lava Cauldron + if (mat == 10068) return 13; // Lava + if (mat == 10072) return 5; // Fire + if (mat == 10076) return 27; // Soul Fire + #ifdef DO_IPBR_LIGHTS + if (mat == 10216) return 62; // Crimson Stem, Crimson Hyphae + if (mat == 10224) return 63; // Warped Stem, Warped Hyphae + #endif + } else { + if (mat == 10228) return 255; // Bedrock + #if defined GLOWING_ORE_ANCIENTDEBRIS && defined DO_IPBR_LIGHTS + if (mat == 10252) return 52; // Ancient Debris + #endif + #if defined GLOWING_ORE_IRON && defined DO_IPBR_LIGHTS + if (mat == 10272) return 43; // Iron Ore + if (mat == 10276) return 43; // Deepslate Iron Ore + #endif + #if defined GLOWING_ORE_COPPER && defined DO_IPBR_LIGHTS + if (mat == 10284) return 45; // Copper Ore + if (mat == 10288) return 45; // Deepslate Copper Ore + #endif + } + } else { + if (mat < 10332) { + #if defined GLOWING_ORE_GOLD && defined DO_IPBR_LIGHTS + if (mat == 10300) return 44; // Gold Ore + if (mat == 10304) return 44; // Deepslate Gold Ore + #endif + #if defined GLOWING_ORE_NETHERGOLD && defined DO_IPBR_LIGHTS + if (mat == 10308) return 50; // Nether Gold Ore + #endif + #if defined GLOWING_ORE_DIAMOND && defined DO_IPBR_LIGHTS + if (mat == 10320) return 48; // Diamond Ore + if (mat == 10324) return 48; // Deepslate Diamond Ore + #endif + } else { + if (mat == 10332) return 36; // Amethyst Cluster, Amethyst Buds + #if defined GLOWING_ORE_EMERALD && defined DO_IPBR_LIGHTS + if (mat == 10340) return 47; // Emerald Ore + if (mat == 10344) return 47; // Deepslate Emerald Ore + #endif + #if defined EMISSIVE_LAPIS_BLOCK && defined DO_IPBR_LIGHTS + if (mat == 10352) return 42; // Lapis Block + #endif + } + } + } else { + if (mat < 10496) { + if (mat < 10448) { + #if defined GLOWING_ORE_LAPIS && defined DO_IPBR_LIGHTS + if (mat == 10356) return 46; // Lapis Ore + if (mat == 10360) return 46; // Deepslate Lapis Ore + #endif + #if defined GLOWING_ORE_NETHERQUARTZ && defined DO_IPBR_LIGHTS + if (mat == 10368) return 49; // Nether Quartz Ore + #endif + if (mat == 10396) return 11; // Jack o'Lantern + if (mat == 10404) return 6; // Sea Pickle:Waterlogged + if (mat == 10412) return 10; // Glowstone + } else { + if (mat == 10448) return 18; // Sea Lantern + if (mat == 10452) return 37; // Magma Block + #ifdef DO_IPBR_LIGHTS + if (mat == 10456) return 60; // Command Block + #endif + if (mat == 10476) return 26; // Crying Obsidian + #if defined GLOWING_ORE_GILDEDBLACKSTONE && defined DO_IPBR_LIGHTS + if (mat == 10484) return 51; // Gilded Blackstone + #endif + } + } else { + if (mat < 10528) { + if (mat == 10496) return 2; // Torch + if (mat == 10500) return 3; // End Rod + #ifdef DO_IPBR_LIGHTS + if (mat == 10508) return 39; // Chorus Flower:Alive + if (mat == 10512) return 39; // Chorus Flower:Dead + #endif + if (mat == 10516) return 21; // Furnace:Lit + } else { + if (mat == 10528) return 28; // Soul Torch + if (mat == 10544) return 34; // Glow Lichen + if (mat == 10548) return 33; // Enchanting Table + if (mat == 10556) return 58; // End Portal Frame:Active + if (mat == 10560) return 12; // Lantern + } + } + } + } else { + if (mat < 10696) { + if (mat < 10620) { + if (mat < 10592) { + if (mat == 10564) return 29; // Soul Lantern + #ifdef DO_IPBR_LIGHTS + if (mat == 10572) return 38; // Dragon Egg + #endif + if (mat == 10576) return 22; // Smoker:Lit + if (mat == 10580) return 23; // Blast Furnace:Lit + } else { + if (mat == 10592) return 17; // Respawn Anchor:Lit + #ifdef DO_IPBR_LIGHTS + if (mat == 10596) return 66; // Redstone Wire:Lit + #endif + if (mat == 10604) return 35; // Redstone Torch + #if defined EMISSIVE_REDSTONE_BLOCK && defined DO_IPBR_LIGHTS + if (mat == 10608) return 41; // Redstone Block + #endif + #if defined GLOWING_ORE_REDSTONE && defined DO_IPBR_LIGHTS + if (mat == 10612) return 32; // Redstone Ore:Unlit + #endif + if (mat == 10616) return 31; // Redstone Ore:Lit + } + } else { + if (mat < 10648) { + #if defined GLOWING_ORE_REDSTONE && defined DO_IPBR_LIGHTS + if (mat == 10620) return 32; // Deepslate Redstone Ore:Unlit + #endif + if (mat == 10624) return 31; // Deepslate Redstone Ore:Lit + if (mat == 10632) return 20; // Cave Vines:With Glow Berries + if (mat == 10640) return 16; // Redstone Lamp:Lit + #ifdef DO_IPBR_LIGHTS + if (mat == 10644) return 67; // Repeater:Lit, Comparator:Lit + if (mat == 10646) return 66; // Comparator:Unlit:Subtract + #endif + } else { + if (mat == 10648) return 19; // Shroomlight + if (mat == 10652) return 15; // Campfire:Lit + if (mat == 10656) return 30; // Soul Campfire:Lit + if (mat == 10680) return 7; // Ochre Froglight + if (mat == 10684) return 8; // Verdant Froglight + if (mat == 10688) return 9; // Pearlescent Froglight + } + } + } else { + if (mat < 10868) { + if (mat < 10780) { + if (mat == 10696) return 57; // Sculk, Sculk Catalyst, Sculk Vein, Sculk Sensor:Unlit + if (mat == 10700) return 57; // Sculk Shrieker + if (mat == 10704) return 57; // Sculk Sensor:Lit + #ifdef DO_IPBR_LIGHTS + if (mat == 10708) return 53; // Spawner + if (mat == 10736) return 64; // Structure Block, Jigsaw Block + if (mat == 10776) return 61; // Warped Fungus, Crimson Fungus + #endif + } else { + #ifdef DO_IPBR_LIGHTS + if (mat == 10780) return 61; // Potted Warped Fungus, Potted Crimson Fungus + #endif + if (mat == 10784) return 36; // Calibrated Sculk Sensor:Unlit + if (mat == 10788) return 36; // Calibrated Sculk Sensor:Lit + #ifdef DO_IPBR_LIGHTS + if (mat == 10836) return 40; // Brewing Stand + #endif + if (mat == 10852) return 55; // Copper Bulb:BrighterOnes:Lit + if (mat == 10856) return 56; // Copper Bulb:DimmerOnes:Lit + } + } else { + if (mat < 30020) { + if (mat == 10868) return 54; // Trial Spawner:NotOminous:Active, Vault:NotOminous:Active + if (mat == 10872) return 68; // Vault:Inactive + if (mat == 10876) return 69; // Trial Spawner:Ominous:Active, Vault:Ominous:Active + #ifdef DO_IPBR_LIGHTS + if (mat == 10884) return 65; // Weeping Vines Plant + #endif + #ifndef COLORED_CANDLE_LIGHT + if (mat >= 10900 && mat <= 10922) return 24; // Standard Candles:Lit + #else + if (mat == 10900) return 24; // Standard Candles:Lit + if (mat == 10902) return 70; // Red Candles:Lit + if (mat == 10904) return 71; // Orange Candles:Lit + if (mat == 10906) return 72; // Yellow Candles:Lit + if (mat == 10908) return 73; // Lime Candles:Lit + if (mat == 10910) return 74; // Green Candles:Lit + if (mat == 10912) return 75; // Cyan Candles:Lit + if (mat == 10914) return 76; // Light Blue Candles:Lit + if (mat == 10916) return 77; // Blue Candles:Lit + if (mat == 10918) return 78; // Purple Candles:Lit + if (mat == 10920) return 79; // Magenta Candles:Lit + if (mat == 10922) return 80; // Pink Candles:Lit + #endif + if (mat == 10924) return 81; // Open Eyeblossom + if (mat == 10948) return 82; // Creaking Heart: Active + if (mat == 30008) return 254; // Tinted Glass + if (mat == 30012) return 213; // Slime Block + if (mat == 30016) return 201; // Honey Block + } else { + if (mat == 30020) return 25; // Nether Portal + if (mat >= 31000 && mat < 32000) return 200 + (mat - 31000) / 2; // Stained Glass+ + if (mat == 32004) return 216; // Ice + if (mat == 32008) return 217; // Glass + if (mat == 32012) return 218; // Glass Pane + if (mat == 32016) return 4; // Beacon + } + } + } + } + + return 1; // Standard Block + } + + #if defined SHADOW && defined VERTEX_SHADER + void UpdateVoxelMap(int mat) { + if (mat == 32000 || // Water + mat < 30000 && mat % 4 == 1 // Non-solid terrain + ) return; + + vec3 modelPos = gl_Vertex.xyz + at_midBlock / 64.0; + vec3 viewPos = transform(gl_ModelViewMatrix, modelPos); + vec3 scenePos = transform(shadowModelViewInverse, viewPos); + vec3 voxelPos = SceneToVoxel(scenePos); + + bool isEligible = any(equal(ivec4(renderStage), ivec4( + MC_RENDER_STAGE_TERRAIN_SOLID, + MC_RENDER_STAGE_TERRAIN_TRANSLUCENT, + MC_RENDER_STAGE_TERRAIN_CUTOUT, + MC_RENDER_STAGE_TERRAIN_CUTOUT_MIPPED))); + + if (isEligible && CheckInsideVoxelVolume(voxelPos)) { + int voxelData = GetVoxelIDs(mat); + + imageStore(voxel_img, ivec3(voxelPos), uvec4(voxelData, 0u, 0u, 0u)); + } + } + #endif + +#endif //INCLUDE_VOXELIZATION \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/worldOutline.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/worldOutline.glsl new file mode 100644 index 0000000..5a86198 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/misc/worldOutline.glsl @@ -0,0 +1,43 @@ +vec2 worldOutlineOffset[4] = vec2[4] ( + vec2(-1.0, 1.0), + vec2( 0, 1.0), + vec2( 1.0, 1.0), + vec2( 1.0, 0) +); + +void DoWorldOutline(inout vec3 color, float linearZ0) { + vec2 scale = vec2(1.0 / view); + + float outlines[2] = float[2] (0.0, 0.0); + float outlined = 1.0; + float z = linearZ0 * far; + float totalz = 0.0; + float maxz = 0.0; + float sampleza = 0.0; + float samplezb = 0.0; + + int sampleCount = WORLD_OUTLINE_THICKNESS * 4; + + for (int i = 0; i < sampleCount; i++) { + vec2 offset = (1.0 + floor(i / 4.0)) * scale * worldOutlineOffset[int(mod(float(i), 4))]; + float depthCheckP = GetLinearDepth(texture2D(depthtex0, texCoord + offset).r) * far; + float depthCheckN = GetLinearDepth(texture2D(depthtex0, texCoord - offset).r) * far; + + outlined *= clamp(1.0 - ((depthCheckP + depthCheckN) - z * 2.0) * 32.0 / z, 0.0, 1.0); + + if (i <= 4) maxz = max(maxz, max(depthCheckP, depthCheckN)); + totalz += depthCheckP + depthCheckN; + } + + float outlinea = 1.0 - clamp((z * 8.0 - totalz) * 64.0 / z, 0.0, 1.0) * clamp(1.0 - ((z * 8.0 - totalz) * 32.0 - 1.0) / z, 0.0, 1.0); + float outlineb = clamp(1.0 + 8.0 * (z - maxz) / z, 0.0, 1.0); + float outlinec = clamp(1.0 + 64.0 * (z - maxz) / z, 0.0, 1.0); + + float outline = (0.35 * (outlinea * outlineb) + 0.65) * (0.75 * (1.0 - outlined) * outlinec + 1.0); + outline -= 1.0; + + outline *= WORLD_OUTLINE_I / WORLD_OUTLINE_THICKNESS; + if (outline < 0.0) outline = -outline * 0.25; + + color += min(color * outline * 2.5, vec3(outline)); +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/pipelineSettings.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/pipelineSettings.glsl new file mode 100644 index 0000000..b59afd0 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/pipelineSettings.glsl @@ -0,0 +1,31 @@ +/* +const int colortex0Format = R11F_G11F_B10F; //main color +const int colortex1Format = R32F; //previous depth +const int colortex2Format = RGB16F; //taa +const int colortex3Format = RGBA8; //(cloud/water map on deferred/gbuffer) | translucentMult & bloom & final color +const int colortex4Format = R8; //volumetric cloud linear depth & volumetric light factor +const int colortex5Format = RGBA8_SNORM; //normalM & scene image for water reflections +const int colortex6Format = RGBA8; //smoothnessD & materialMask & skyLightFactor +const int colortex7Format = RGBA16F; //(cloud/water map on gbuffer) | temporal filter +*/ + +const bool colortex0Clear = true; +const bool colortex1Clear = false; +const bool colortex2Clear = false; +const bool colortex3Clear = true; +const bool colortex4Clear = false; +const bool colortex5Clear = false; +const bool colortex6Clear = true; +const bool colortex7Clear = false; +// + +const int noiseTextureResolution = 128; + +const bool shadowHardwareFiltering = true; +const float shadowDistanceRenderMul = 1.0; +const float entityShadowDistanceMul = 0.125; // Iris feature + +const float drynessHalflife = 300.0; +const float wetnessHalflife = 300.0; + +const float ambientOcclusionLevel = 1.0; \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textRendering/error_apple_acl.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textRendering/error_apple_acl.glsl new file mode 100644 index 0000000..8f39b08 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textRendering/error_apple_acl.glsl @@ -0,0 +1,53 @@ +color.rgb = mix(color.rgb, vec3(0.0), 0.65); + +beginTextM(8, vec2(6, 10)); + text.fgCol = vec4(1.0, 0.0, 0.0, 1.0); + printString((_I, _m, _p, _o, _r, _t, _a, _n, _t, _space, _E, _r, _r, _o, _r)); +endText(color.rgb); + +beginTextM(4, vec2(15, 36)); + printLine(); + text.fgCol = vec4(vec3(1.0), 1.0); + printString(( + _C, _o, _l, _o, _r, _e, _d, _space, _L, _i, _g, _h, _t, _i, _n, _g, _space, _i, _s, _space, + _n, _o, _t, _space + )); + printLine(); + printString(( + _s, _u, _p, _p, _o, _r, _t, _e, _d, _space, _o, _n, _space, _A, _p, _p, _l, _e, _space, _d, _e, _v, _i, _c, _e, _s, _dot + )); + printLine(); + printLine(); + printString(( + _D, _i, _s, _a, _b, _l, _e, _space, _i, _t, _space, _u, _n, _d, _e, _r, _colon, _space + )); + printLine(); + printString(( + _E, _S, _C, _space, _gt, _space, _O, _p, _t, _i, _o, _n, _s, _space, _gt, _space, + _S, _h, _a, _d, _e, _r, _space, _S, _e, _t, _t, _i, _n, _g, _s, + _space, _gt + )); + printLine(); + printString(( + _P, _e, _r, _f, _o, _r, _m, _a, _n, _c, _e, _space, _gt, _space, + _A, _d, _v, _a, _n, _c, _e, _d, _space, _C, _o, _l, _o, _r, _e, _d, _space, _L, _i, _g, _h, _t, _i, _n, _g + )); +endText(color.rgb); + +beginTextM(2, vec2(30, 175)); + printLine(); + text.fgCol = vec4(vec3(0.65), 1.0); + printString(( + _A, _p, _p, _l, _e, _space, _d, _r, _i, _v, _e, _r, _s, _space, + _d, _o, _space, _n, _o, _t, _space, _s, _u, _p, _p, _o, _r, _t, _space, _t, _h, _e, _space, + _f, _u, _n, _c, _t, _i, _o, _n, _a, _l, _i, _t, _y, _space, _t, _h, _a, _t, _space, + _C, _o, _m, _p, _l, _e, _m, _e, _n, _t, _a, _r, _y, _space + )); + printLine(); + printString(( + _u, _s, _e, _s, _space, _t, _o, _space, _p, _r, _o, _v, _i, _d, _e, _space, _y, _o, _u, _space, + _a, _space, _f, _u, _l, _l, _y, _space, _f, _l, _e, _d, _g, _e, _d, _space, + _c, _o, _l, _o, _r, _e, _d, _space, _l, _i, _g, _h, _t, _i, _n, _g, _space, + _e, _x, _p, _e, _r, _i, _e, _n, _c, _e, _dot + )); +endText(color.rgb); \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textRendering/error_coordinates_acl.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textRendering/error_coordinates_acl.glsl new file mode 100644 index 0000000..5bc970c --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textRendering/error_coordinates_acl.glsl @@ -0,0 +1,36 @@ +color.rgb = mix(color.rgb, vec3(0.0), 0.65); + +beginTextM(8, vec2(6, 10)); + text.fgCol = vec4(1.0, 0.0, 0.0, 1.0); + printString((_I, _m, _p, _o, _r, _t, _a, _n, _t, _space, _E, _r, _r, _o, _r)); +endText(color.rgb); + +beginTextM(4, vec2(15, 36)); + printLine(); + text.fgCol = vec4(vec3(1.0), 1.0); + printString(( + _C, _o, _l, _o, _r, _e, _d, _space, _L, _i, _g, _h, _t, _i, _n, _g, _space, _w, _i, _l, _l, + _space, _n, _o, _t, _space, _w, _o, _r, _k + )); + printLine(); + printString(( + _p, _r, _o, _p, _e, _r, _l, _y, _space, _a, _t, _space, _h, _i, _g, _h, + _space, _w, _o, _r, _l, _d, _space, _c, _o, _o, _r, _d, _i, _n, _a, _t, _e, _s, _dot + )); + printLine(); + printLine(); + printString(( + _D, _i, _s, _a, _b, _l, _e, _space, _i, _t, _space, _u, _n, _d, _e, _r, _colon, _space + )); + printLine(); + printString(( + _E, _S, _C, _space, _gt, _space, _O, _p, _t, _i, _o, _n, _s, _space, _gt, _space, + _S, _h, _a, _d, _e, _r, _space, _S, _e, _t, _t, _i, _n, _g, _s, + _space, _gt + )); + printLine(); + printString(( + _P, _e, _r, _f, _o, _r, _m, _a, _n, _c, _e, _space, _gt, _space, + _A, _d, _v, _a, _n, _c, _e, _d, _space, _C, _o, _l, _o, _r, _e, _d, _space, _L, _i, _g, _h, _t, _i, _n, _g + )); +endText(color.rgb); \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textRendering/error_optifine_acl.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textRendering/error_optifine_acl.glsl new file mode 100644 index 0000000..6627733 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textRendering/error_optifine_acl.glsl @@ -0,0 +1,78 @@ +color.rgb = mix(color.rgb, vec3(0.0), 0.65); + +beginTextM(8, vec2(6, 10)); + text.fgCol = vec4(1.0, 0.0, 0.0, 1.0); + printString((_I, _m, _p, _o, _r, _t, _a, _n, _t, _space, _E, _r, _r, _o, _r)); +endText(color.rgb); + +beginTextM(4, vec2(15, 36)); + printLine(); + text.fgCol = vec4(vec3(1.0), 1.0); + printString(( + _C, _o, _l, _o, _r, _e, _d, _space, _L, _i, _g, _h, _t, _i, _n, _g, _space, _i, _s, _space, + _n, _o, _t, _space + )); + printLine(); + printString(( + _s, _u, _p, _p, _o, _r, _t, _e, _d, _space, _o, _n, _space, _O, _p, _t, _i, _f, _i, _n, _e, + _dot, _space, _Y, _o, _u, _space, _n, _e, _e, _d + )); + printLine(); + printString(( + _t, _o, _space, _s, _w, _i, _t, _c, _h, _space, _t, _o, _space, _t, _h, _e, _space, + _quote, _I, _r, _i, _s, _quote, _space, _m, _o, _d, _dot + )); + printLine(); + printString(( + _D, _o, _w, _n, _l, _o, _a, _d, _colon, _space, + _w, _w, _w, _dot, _i, _r, _i, _s, _s, _h, _a, _d, _e, _r, _s, _dot, _d, _e, _v + )); +endText(color.rgb); + +beginTextM(2, vec2(30, 155)); + printLine(); + text.fgCol = vec4(vec3(0.65), 1.0); + printString(( + _O, _p, _t, _i, _f, _i, _n, _e, _space, + _d, _o, _e, _s, _space, _n, _o, _t, _space, _h, _a, _v, _e, _space, _t, _h, _e, _space, + _f, _u, _n, _c, _t, _i, _o, _n, _a, _l, _i, _t, _y, _space, _t, _h, _a, _t, _space, + _C, _o, _m, _p, _l, _e, _m, _e, _n, _t, _a, _r, _y, _space + )); + printLine(); + printString(( + _u, _s, _e, _s, _space, _t, _o, _space, _p, _r, _o, _v, _i, _d, _e, _space, _y, _o, _u, _space, + _a, _space, _f, _u, _l, _l, _y, _space, _f, _l, _e, _d, _g, _e, _d, _space, + _c, _o, _l, _o, _r, _e, _d, _space, _l, _i, _g, _h, _t, _i, _n, _g, _space, + _e, _x, _p, _e, _r, _i, _e, _n, _c, _e, _dot + )); + printLine(); + printString(( + _T, _h, _e, _space, _I, _r, _i, _s, _space, _m, _o, _d, _space, _i, _s, _space, _a, _space, + _m, _u, _c, _h, _space, _b, _e, _t, _t, _e, _r, _space, _a, _l, _t, _e, _r, _n, _a, _t, _i, _v, _e, + _space, _t, _h, _a, _t, _space, _p, _r, _o, _v, _i, _d, _e, _s, _space, _a, _space, + _l, _o, _t, _space, _o, _f + )); + printLine(); + printString(( + _a, _d, _d, _i, _t, _i, _o, _n, _a, _l, _space, _s, _h, _a, _d, _e, _r, _space, + _f, _e, _a, _t, _u, _r, _e, _s, _comma, _space, _l, _e, _s, _s, _space, _b, _u, _g, _s, + _comma, _space, _a, _n, _d, _space, _m, _o, _r, _e, _space, + _p, _e, _r, _f, _o, _r, _m, _a, _n, _c, _e, _dot + )); +endText(color.rgb); + +beginTextM(2, vec2(30, 200)); + printLine(); + text.fgCol = vec4(vec3(0.65), 1.0); + printString(( + _P, _l, _e, _a, _s, _e, _space, _n, _o, _t, _e, _space, _t, _h, _a, _t, _space, + _u, _s, _i, _n, _g, _space, _a, _n, _space, _o, _l, _d, _space, _I, _r, _i, _s, _space, + _v, _e, _r, _s, _i, _o, _n, _space, _w, _i, _l, _l, _space, _n, _o, _t, _space + )); + printLine(); + printString(( + _w, _o, _r, _k, _space, _a, _n, _d, _space, _m, _a, _y, _space, + _s, _t, _i, _l, _l, _space, _c, _a, _u, _s, _e, _space, _t, _h, _i, _s, _space, + _e, _r, _r, _o, _r, _space, _t, _o, _space, _a, _p, _p, _e, _a, _r, _dot + )); +endText(color.rgb); \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textRendering/error_optifine_af.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textRendering/error_optifine_af.glsl new file mode 100644 index 0000000..7129561 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textRendering/error_optifine_af.glsl @@ -0,0 +1,55 @@ +color.rgb = mix(color.rgb, vec3(0.0), 0.65); + +beginTextM(8, vec2(6, 10)); + text.fgCol = vec4(1.0, 0.0, 0.0, 1.0); + printString((_I, _m, _p, _o, _r, _t, _a, _n, _t, _space, _E, _r, _r, _o, _r)); +endText(color.rgb); + +beginTextM(4, vec2(15, 36)); + printLine(); + text.fgCol = vec4(vec3(1.0), 1.0); + printString(( + _P, _l, _e, _a, _s, _e, _space, _g, _o, _space, _t, _o, _space, + _E, _S, _C, _space, _minus, _space, _O, _p, _t, _i, _o, _n, _s, _space, _minus + )); + printLine(); + printString(( + _V, _i, _d, _e, _o, _space, _S, _e, _t, _t, _i, _n, _g, _s, _space, _minus, _space, + _Q, _u, _a, _l, _i, _t, _y, _space, _minus + )); + printLine(); + printString(( + _a, _n, _d, _space, _d, _i, _s, _a, _b, _l, _e, _space, + _A, _n, _i, _s, _o, _t, _r, _o, _p, _i, _c, _space, _F, _i, _l, _t, _e, _r, _i, _n, _g, _dot + )); +endText(color.rgb); + +beginTextM(2, vec2(30, 140)); + printLine(); + text.fgCol = vec4(vec3(0.65), 1.0); + printString(( + _O, _p, _t, _i, _f, _i, _n, _e, _s, _space, _a, _n, _i, _s, _o, _t, _r, _o, _p, _i, _c, _space, + _f, _i, _l, _t, _e, _r, _i, _n, _g, _space, _c, _h, _a, _n, _g, _e, _s, _space, _h, _o, _w, _space, + _t, _e, _x, _t, _u, _r, _e, _s, _space, _a, _r, _e, _space, _h, _a, _n, _d, _l, _e, _d + )); + printLine(); + printString(( + _i, _n, _space, _a, _space, _w, _a, _y, _space, _t, _h, _a, _t, _space, _c, _a, _u, _s, _e, _s, _space, + _a, _space, _l, _o, _t, _space, _o, _f, _space, _i, _s, _s, _u, _e, _s, _dot, _space, + _C, _o, _m, _p, _l, _e, _m, _e, _n, _t, _a, _r, _y, _space, _h, _a, _s, _space, _i, _t, _s, _space, + _o, _w, _n + )); + printLine(); + printString(( + _t, _e, _x, _t, _u, _r, _e, _space, _f, _i, _l, _t, _e, _r, _i, _n, _g, _space, + _a, _s, _space, _a, _n, _space, _o, _p, _t, _i, _o, _n, _space, _a, _n, _y, _w, _a, _y, _s, _dot, _space, + _Y, _o, _u, _space, _c, _a, _n, _space, _f, _i, _n, _d, _space, _t, _h, _a, _t, _space, _i, _n, _space + )); + printLine(); + printString(( + _S, _h, _a, _d, _e, _r, _space, _O, _p, _t, _i, _o, _n, _s, _space, _minus, _space, + _P, _e, _r, _f, _o, _r, _m, _a, _n, _c, _e, _space, _S, _e, _t, _t, _i, _n, _g, _s, _space, + _i, _f, _space, _y, _o, _u, _space, _w, _a, _n, _t, _space, _t, _e, _x, _t, _u, _r, _e, _space, + _f, _i, _l, _t, _e, _r, _i, _n, _g, _dot + )); +endText(color.rgb); \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textRendering/error_shadowdistance_acl.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textRendering/error_shadowdistance_acl.glsl new file mode 100644 index 0000000..ca01fa4 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textRendering/error_shadowdistance_acl.glsl @@ -0,0 +1,46 @@ +color.rgb = mix(color.rgb, vec3(0.0), 0.65); + +beginTextM(8, vec2(6, 10)); + text.fgCol = vec4(1.0, 0.0, 0.0, 1.0); + printString((_I, _m, _p, _o, _r, _t, _a, _n, _t, _space, _E, _r, _r, _o, _r)); +endText(color.rgb); + +beginTextM(4, vec2(15, 36)); + printLine(); + text.fgCol = vec4(vec3(1.0), 1.0); + printString(( + _T, _h, _e, _space, _quote, _A, _d, _v, _a, _n, _c, _e, _d, _space, _C, _o, _l, _o, _r, _e, _d, _space, + _L, _i, _g, _h, _t, _i, _n, _g, _quote + )); + printLine(); + printString(( + _s, _e, _t, _t, _i, _n, _g, _space, _m, _u, _s, _t, _space, _n, _o, _t, _space, _b, _e, _space, + _s, _e, _t, _space, _h, _i, _g, _h, _e, _r, _space, _t, _h, _a, _n + )); + printLine(); + printString(( + _t, _h, _e, _space, _quote, _S, _h, _a, _d, _o, _w, _space, _D, _i, _s, _t, _a, _n, _c, _e, _quote, _space, + _s, _e, _t, _t, _i, _n, _g, _dot + )); + printLine(); + printLine(); + printString(( + _G, _o, _space, _t, _o, _space, _E, _S, _C, _space, _gt, _space, _O, _p, _t, _i, _o, _n, _s, _space, _gt, _space, + _S, _h, _a, _d, _e, _r, _space, _S, _e, _t, _t, _i, _n, _g, _s + )); + printLine(); + printString(( + _gt, _space, _P, _e, _r, _f, _o, _r, _m, _a, _n, _c, _e, _space, _gt, _space, + _a, _n, _d, _space, _e, _i, _t, _h, _e, _r, _space, _i, _n, _c, _r, _e, _a, _s, _e + )); + printLine(); + printString(( + _t, _h, _e, _space, _S, _h, _a, _d, _o, _w, _space, _D, _i, _s, _t, _a, _n, _c, _e, _space, + _s, _e, _t, _t, _i, _n, _g, _space, _o, _r, _space, _r, _e, _d, _u, _c, _e + )); + printLine(); + printString(( + _t, _h, _e, _space, _A, _d, _v, _a, _n, _c, _e, _d, _space, _C, _o, _l, _o, _r, _e, _d, _space, + _L, _i, _g, _h, _t, _i, _n, _g, _space, _s, _e, _t, _t, _i, _n, _g + )); +endText(color.rgb); \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textRendering/textRenderer.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textRendering/textRenderer.glsl new file mode 100644 index 0000000..65b9a06 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textRendering/textRenderer.glsl @@ -0,0 +1,329 @@ +/* +-------------------------------------------------------------------------------- + + GLSL Debug Text Renderer by SixthSurge (updated 2023-04-08) + + Character set based on Monocraft by IdreesInc + https://github.com/IdreesInc/Monocraft + + With additional characters added by WoMspace + + Usage: + + // Call beginText to initialize the text renderer. You can scale the fragment position to adjust the size of the text + beginText(ivec2(gl_FragCoord.xy), ivec2(0, viewHeight)); + ^ fragment position ^ text box position (upper left corner) + + // You can print various data types + printBool(false); + printFloat(sqrt(-1.0)); // Prints "NaN" + printInt(42); + printVec3(skyColor); + + // ...or arbitrarily long strings + printString((_H, _e, _l, _l, _o, _comma, _space, _w, _o, _r, _l, _d)); + + // To start a new line, use + printLine(); + + // You can also configure the text color on the fly + text.fgCol = vec4(1.0, 0.0, 0.0, 1.0); + text.bgCol = vec4(0.0, 0.0, 0.0, 1.0); + + // ...as well as the number base and number of decimal places to print + text.base = 16; + text.fpPrecision = 4; + + // Finally, call endText to blend the current fragment color with the text + endText(fragColor); + + Important: any variables you display must be the same for all fragments, or + at least all of the fragments that the text covers. Otherwise, different + fragments will try to print different values, resulting in, well, a mess + +-------------------------------------------------------------------------------- +*/ + +#if !defined UTILITY_TEXTRENDERER_INCLUDED +#define UTILITY_TEXTRENDERER_INCLUDED + +// Characters + +const uint _A = 0x747f18c4u; +const uint _B = 0xf47d18f8u; +const uint _C = 0x746108b8u; +const uint _D = 0xf46318f8u; +const uint _E = 0xfc39087cu; +const uint _F = 0xfc390840u; +const uint _G = 0x7c2718b8u; +const uint _H = 0x8c7f18c4u; +const uint _I = 0x71084238u; +const uint _J = 0x084218b8u; +const uint _K = 0x8cb928c4u; +const uint _L = 0x8421087cu; +const uint _M = 0x8eeb18c4u; +const uint _N = 0x8e6b38c4u; +const uint _O = 0x746318b8u; +const uint _P = 0xf47d0840u; +const uint _Q = 0x74631934u; +const uint _R = 0xf47d18c4u; +const uint _S = 0x7c1c18b8u; +const uint _T = 0xf9084210u; +const uint _U = 0x8c6318b8u; +const uint _V = 0x8c62a510u; +const uint _W = 0x8c635dc4u; +const uint _X = 0x8a88a8c4u; +const uint _Y = 0x8a884210u; +const uint _Z = 0xf844447cu; +const uint _a = 0x0382f8bcu; +const uint _b = 0x85b318f8u; +const uint _c = 0x03a308b8u; +const uint _d = 0x0b6718bcu; +const uint _e = 0x03a3f83cu; +const uint _f = 0x323c8420u; +const uint _g = 0x03e2f0f8u; +const uint _h = 0x842d98c4u; +const uint _i = 0x40308418u; +const uint _j = 0x080218b8u; +const uint _k = 0x4254c524u; +const uint _l = 0x6108420cu; +const uint _m = 0x06ab5ac4u; +const uint _n = 0x07a318c4u; +const uint _o = 0x03a318b8u; +const uint _p = 0x05b31f40u; +const uint _q = 0x03671784u; +const uint _r = 0x05b30840u; +const uint _s = 0x03e0e0f8u; +const uint _t = 0x211c420cu; +const uint _u = 0x046318bcu; +const uint _v = 0x04631510u; +const uint _w = 0x04635abcu; +const uint _x = 0x04544544u; +const uint _y = 0x0462f0f8u; +const uint _z = 0x07c4447cu; +const uint _0 = 0x746b58b8u; +const uint _1 = 0x23084238u; +const uint _2 = 0x744c88fcu; +const uint _3 = 0x744c18b8u; +const uint _4 = 0x19531f84u; +const uint _5 = 0xfc3c18b8u; +const uint _6 = 0x3221e8b8u; +const uint _7 = 0xfc422210u; +const uint _8 = 0x745d18b8u; +const uint _9 = 0x745e1130u; +const uint _space = 0x0000000u; +const uint _dot = 0x000010u; +const uint _minus = 0x0000e000u; +const uint _comma = 0x00000220u; +const uint _colon = 0x02000020u; + +// Additional characters added by WoMspace <3 +const uint _under = 0x000007Cu; // _ +const uint _quote = 0x52800000u; // " +const uint _exclm = 0x21084010u; // ! +const uint _gt = 0x02082220u; // > +const uint _lt = 0x00888208u; // < +const uint _opsqr = 0x3908421Cu; // [ +const uint _clsqr = 0xE1084270u; // ] +const uint _opprn = 0x11084208u; // ( +const uint _clprn = 0x41084220u; // ) +const uint _block = 0xFFFFFFFCu; // █ +const uint _copyr = 0x03AB9AB8u; // ©️ + +const int charWidth = 5; +const int charHeight = 6; +const int charSpacing = 1; +const int lineSpacing = 1; + +const ivec2 charSize = ivec2(charWidth, charHeight); +const ivec2 spaceSize = charSize + ivec2(charSpacing, lineSpacing); + +// Text renderer + +struct Text { + vec4 result; // Output color from the text renderer + vec4 fgCol; // Text foreground color + vec4 bgCol; // Text background color + ivec2 fragPos; // The position of the fragment (can be scaled to adjust the size of the text) + ivec2 textPos; // The position of the top-left corner of the text + ivec2 charPos; // The position of the next character in the text + int base; // Number base + int fpPrecision; // Number of decimal places to print +} text; + +// Fills the global text object with default values +void beginText(ivec2 fragPos, ivec2 textPos) { + text.result = vec4(0.0); + text.fgCol = vec4(1.0); + text.bgCol = vec4(0.0, 0.0, 0.0, 0.6); + text.fragPos = fragPos; + text.textPos = textPos; + text.charPos = ivec2(0); + text.base = 10; + text.fpPrecision = 2; +} + +// Applies the rendered text to the fragment +void endText(inout vec3 fragColor) { + fragColor = mix(fragColor.rgb, text.result.rgb, text.result.a); +} + +void printChar(uint character) { + ivec2 pos = text.fragPos - text.textPos - spaceSize * text.charPos * ivec2(1, -1) + ivec2(0, spaceSize.y); + + uint index = uint(charWidth - pos.x + pos.y * charWidth + 1); // Edited + + // Draw background + if (clamp(pos, ivec2(0), spaceSize - 1) == pos) + text.result = mix(text.result, text.bgCol, text.bgCol.a); + + // Draw character + if (clamp(pos, ivec2(0), charSize - 1) == pos) + text.result = mix(text.result, text.fgCol, text.fgCol.a * float(character >> index & 1u)); + + // Advance to next character + text.charPos.x++; +} + +#define printString(string) { \ + uint[] characters = uint[] string; \ + for (int i = 0; i < characters.length(); ++i) printChar(characters[i]); \ +} + +void printUnsignedInt(uint value, int len) { + const uint[36] digits = uint[]( + _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, + _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, + _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, + _u, _v, _w, _x, _y, _z + ); + + // Advance to end of the number + text.charPos.x += len - 1; + + // Write number backwards + for (int i = 0; i < len; ++i) { + printChar(digits[int(value) % text.base]); // Edited + value /= uint(text.base); // Edited + text.charPos.x -= 2; + } + + // Return to end of the number + text.charPos.x += len + 1; +} + +void printUnsignedInt(uint value) { + float logValue = log(float(value)) + 1e-6; + float logBase = log(float(text.base)); + + int len = int(ceil(logValue / logBase)); + len = max(len, 1); + + printUnsignedInt(value, len); +} + +void printInt(int value) { + if (value < 0) printChar(_minus); + printUnsignedInt(uint(abs(value))); +} + +void printFloat(float value) { + if (value < 0.0) printChar(_minus); + + if (isnan(value)) { + printString((_N, _a, _N)); + } else if (isinf(value)) { + printString((_i, _n, _f)); + } else { + float v = abs(value) * pow(float(text.base), float(text.fpPrecision)); + float i, f = modf(floor(v + 0.5) / pow(float(text.base), float(text.fpPrecision)), i); + + uint integralPart = uint(i); + uint fractionalPart = uint(f * pow(float(text.base), float(text.fpPrecision)) + 0.5); + + printUnsignedInt(integralPart); + printChar(_dot); + printUnsignedInt(fractionalPart, text.fpPrecision); + } +} + +void printBool(bool value) { + if (value) { + printString((_t, _r, _u, _e)); + } else { + printString((_f, _a, _l, _s, _e)); + } +} + +void printVec2(vec2 value) { + printFloat(value.x); + printString((_comma, _space)); + printFloat(value.y); +} +void printVec3(vec3 value) { + printFloat(value.x); + printString((_comma, _space)); + printFloat(value.y); + printString((_comma, _space)); + printFloat(value.z); +} +void printVec4(vec4 value) { + printFloat(value.x); + printString((_comma, _space)); + printFloat(value.y); + printString((_comma, _space)); + printFloat(value.z); + printString((_comma, _space)); + printFloat(value.w); +} + +void printIvec2(ivec2 value) { + printInt(value.x); + printString((_comma, _space)); + printInt(value.y); +} +void printIvec3(ivec3 value) { + printInt(value.x); + printString((_comma, _space)); + printInt(value.y); + printString((_comma, _space)); + printInt(value.z); +} +void printIvec4(ivec4 value) { + printInt(value.x); + printString((_comma, _space)); + printInt(value.y); + printString((_comma, _space)); + printInt(value.z); + printString((_comma, _space)); + printInt(value.w); +} + +void printUvec2(uvec2 value) { + printUnsignedInt(value.x); + printString((_comma, _space)); + printUnsignedInt(value.y); +} +void printUvec3(uvec3 value) { + printUnsignedInt(value.x); + printString((_comma, _space)); + printUnsignedInt(value.y); + printString((_comma, _space)); + printUnsignedInt(value.z); +} +void printUvec4(uvec4 value) { + printUnsignedInt(value.x); + printString((_comma, _space)); + printUnsignedInt(value.y); + printString((_comma, _space)); + printUnsignedInt(value.z); + printString((_comma, _space)); + printUnsignedInt(value.w); +} + +void printLine() { + text.charPos.x = 0; + ++text.charPos.y; +} + +#endif // UTILITY_TEXTRENDERER_INCLUDED diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textures/cloud-water.png b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textures/cloud-water.png new file mode 100644 index 0000000000000000000000000000000000000000..1373f693daea1f292c768c732cc5a4776458666d GIT binary patch literal 104834 zcmWKXc{CJU6u@UUX3Q94-)9(%C0ll4X6$R0vCA$?_H31yvF|%YK8+FF=Su4? zaPxWMrYigc`ms4jsRK{-7ux5PAI!r$M}mhhC7TURzWn!moN1>ly0U@%eVDdy^(5{7 z^5$MhlAvKUY780_z|h+}3fwb7->e+4RE0}+=&hZ@>__Wc9m69$$R>^NB0IM18Yhph zab8q;a1^X?c$GuUQoI?>%zj$zyZK-1@Sb_;(IdH5{e(1*7GOL8+{@P^pvTpiGdQHG zhxqzk&*qE05$*^ZpW`4!KTsb%+TuNYb6KUnqy)#;;g&NS;sKvOR$gVQpQmHBM1Hi@ zkutGMHptt9{+VOnW&ed99qJ$Mr!xLf_LI_MI0q;8?Y@U$Qu)nLZYP3PgXT$ekPrqOqfh1@ALi;PrBW8 zl-1d1{J6ij=3;60Qr8ksQnuBKf&z9C@xE?tEb-=vrfjzPU@G*d^!7Pgt| zl#)9Q=SR*AitojyAFaA3J>umoP5;PI|8jqVSRrL-V_;$cE`$l|fRB-TpkWmA`or?1 z{gX{!*Dll;5su(zaWiB!rnmj`zQ)S31`mhC6~V!p30N2il*!~%uecTMFbr&g|GRDE z_6|N`(V>=mkjau~V&JL(xEm;PK#hS7q(b+Vi^MNE2nX6HTb-G}PA$1_-*t)*p^0?C zrfI(=Mk$rdyjU`S%YgE{jH{oV<q^A4C7YXEKV+w4AUr4!^9UeEAQ|nz>D-y` zGTf*-?75`j*GO|KXqgb*UKH61!i;d-%GDuVsK00*5FDu9Qcy_3<-o=$w?vhY=+Yp6 z?mQG`waxn59;>p#b_-SPs?L$}m+tut%GY^K-B* zFWF#ctVj|6T?5d?Po<=IJLk6JKK*L{prn8dcDTHWzfdwq)DDVjd(8d`{h66p)UYyh z1M`-5mt%ZDZ1#qNv?$hV04o6J!JA)d%1YT7a!r>YVt<%ysYr3Q)r@0GU4`+dl$m> zp%=mv<|UgIBTy4;jU<}bH)UpLnC=3r&}>%AfZB2U%70B65?s^ffDLXOD$enEn7ULkb7d zErH@8qh?wKBqJa88~q+J9dx&fj&^O~+l?u}o{&!VR+%Sz=7#b@!9MVojkSD&5*@^2 zfx<-om-Kk0FZGF!cZ|~7h4d4xUVOj$?8QbixfD(Y)xNLub4XiGe#(Gc!=Nba5;Gci z>(F&*VaDK|^iB+o+w1c)2)Db_oH-dS^f{Evgn#-R!=~~sLu%B8&-Cf^epX*^|2Ikp zjE8!L2vVv=#<$A)5XAZP)g-8fF(@hUH1jpYEG>lYt+zFwr)_K)dOw|{i9>YqZzU=U z$O|;wF==Jq>3AP=TyayoFt*Ds;pU{Rljey zd2(-zSoktWfT^yDb@mrF6e)PU4n6~biTVLZplWrhu+_s`+n%fhT*82*P$qelk^#M7 zZ2h3ZF@v8jMc`1NlK@%5sOrbLBihdu7qAb~P77UK?$u^ytgBWo;>+dVp#4IOP5zw+ zn$)Le&rXcx@9hh2%;$6Vm#WexOMNCR;`Z~`ILb=#?e+q(QdU%8CIDzLmCos9CID(T zM)U;0ia?yA`_;=a_7|_Ko600CTQG;DufI7d&+9V@4+=;J@&>ZQn6!u52aDe9zx)kO zm+k2VGT}?`9Or4#akP8e*CYd+5pzXwT+%{P2McYvrrR67EJLy+%AbxrN8n*xsD796 zm8z7J$>8-9)3>FM2RPa*d}#2h8@8?cRRa`JdHB#CLRt6w^@#6l^TpCV|8?2+#!tW?Cjs0?Yiy=H$I0RXNEv|S%dk^x^6l$C%;4qlIQUS~h8&E?5D6QwYP zOpWmm=zEtBOAoM`0_h5pWUrY$_@BAn}7F^CC&oOu$WyrQ9Xy zHVlA0!?1%$3lm%7DHqK9-aU~zOQ85RHUjXGYZh@QJ1*i7s74VM^*}uq2rB?s`jXve zaZ6LG1<>$Ku#?b-5%NW`>9Lga@RsJ+iqRskN=TfpB&e64im5O3n*AiRmmL+g_jPe% z3%W)`m0ku45!O(hu*r#DlCr%xdg&r-1-Jv=Lq?|h9hs<%s)%;btO9wpbkFcYLXb(o z(|Qc0ijyMX>1ar;8O!V0*WZa15tj~rU(CRXIO3Wc{w_S%FsU>d{AgpW#Zh909J-RUJpe7$m)^Ivgb_lqq@>2MR1o22n9=T;#W)Fdv!3P;5 zvV-*@n(QV?X(v&>SDHq21dU7YtJ3%T%O41h(8Mu5L0TA3} zDO~2TK;*!%IIpzH{@fFWclH^Eu>0ti)4di;0BIo*$8>dypY)5=!6Mn44q?~vtUKBV z``Ss}E2}maJ`TD9IZP~$AUf@Xy_)dzocY5Sh<5$BHF`$Ndzp`RU!L4wYi z5muzAkDZwNOhS@Gn<&p{VUAh;=^OImL(gqZpWZ(H++<2|ENjM|y8>EQzeyT@9i4uG z^0fq2Y^*W3RpisxuXw&$RLVpa9x|csc-S)^BJp z(S>G$gZs}4z@nfkM)-1t9IQ?o7zjEeqHiFcU-+_C$Qbei9XI_@n5kh?G2MJgb<`q% zvL?^3U|V2lgCs$vxY{fQzhGjHBGBlQuwB=fD>K``)}uqHl3JnA`^WiONsKz`ryhRg=xcwUd1M>l|fV zwzb+$naBNXpy+7i)I)eQ#LRa-^c-ZBp~JLU_xt93nXDU(w4U`9oIa;hK(^3<*s3>k zxlv(}$isx}H_)01ECZmuoz_A}op2yblH)$ujosGK<3ar_>LK4M0j_Ab9-$9RHjc&) zca1*mvAT~u+hH1;Zan!0TqBXi6>sSaC19!68GEInkR+EU)~lz>wf^vB+M2qZ!g6Ls zI|Q}idHP%$!F?y{kC`nFwfFC%B30TtKF7dpu9YEI`MB^QxeZJ3WbZ3GSR4R|1pxvB zOhoGRr;9FnovPJ1JcJqP&4}-1uFE-df1q!EhFb{*0vI$61?kuE0yTFz;103PCcMH~ zE>ieT*v-;Bk!Gn0m*|s1=}DwY2XsYl9mhI%&(^L`tZZc_cPXMpyi4#}L(5J7%wPO{ zDwNFiXQ>R;DuR8zo7iJTf9akHb$D8pxNeR^G~6IQ^4^51--h?H*2IdzcUjd{N_AlI z)sCNb@pIWtHhhKK$QiT4cyNSUDrKMbV*7A)>U)%^hfRoF7>;97kBo7@6rYTCL)+H} zrx!;t@2u?#E=WjWbthhP7E?p}QjX~6w*=&6Ws z63JIuH~K(3MD9Yp62^zKg>47Z;AG!?(?4jOJ><@ z7WMUs{MF8dMWwRO+mF~4{FlcEj3JoJ9m5ZxpYr&+^GrZ^h)_;if2|4~g7NbwJCwL? zSahy}u7)n6-YWJy&e_)=0_ibO_CUa!uRcqOKt^a&D9V|1f9|%1(!)bEVBbl>6r}?b zn*{oqvaS5r#B8@No^oTO@Xb1iUmZl7SPh-x&GPoQX; zcQ89Q0}3UP35e^Pm9*52f;PneOjdMAyARZhl~|9llJIIb%GFTTb23VxX{pZ&0n zzZ4o;a04W>2H)F3-&)#|JBZx-Ya6bp;i*U9=5W;Dxy7><9+lSrXh+TW7=aExvFI1h zJfx@?DP<99HP29Hd>A|i7f=8U?|#m8Wfg?^2{6K6NHo2~zbC}9J9X{G@jsXR%mjoy zBVh=|?Kh~%7a2{mZV+JEB-&4!3)oMQhG&30xR*O8e^S=W3TO(WwZo{|vLi3@ol(h| z8dZWM>cM~O`ovNI=T)ij45%-TJj}zE zRL+fi&2{Nv#{B8A4x~)YmeRRX^jOO<=ut201OrQDe_!AiAcAK2XGA-SsH6H04Vsgf z7gD6VV3_%H<{s-o+9Kf{_m9h(<-(}_u zNS;-LJ)9y-%^-zYpr)f?1!?zjG+0;T4ro!kLVNOv_7iMQ{;duo`4Q4Hfb$iFW8YbP zmCcy@D$_d@O{RcO;msw;NrUu3TATv^S{|u^mf^Y*SmyL9`Qej2cjOLMf3_^w)?iy&96>ipr~y>3>G53V|fB%{@Rv^C9j z4OxU!t@D0S8haUQ;j5M(_n)JjOt#~a_;If$t8|P|fT$)zvvoMs@FHJ|fOmduDG5g9 zt+v&4X}NOVXZsD*yk5O%Kuc9TaHFlY?e;`w91ca5f-FgeO$?`R7gg~eq@5{6u3K~n zb)LR&+@7ocY-oh07L8Ucd1!dME?FqVB`)VOGzS2Aw1jS@Tp>-hc(K4#Q!0?TH2o_9RFLpI~KE%RcVZ1S4n@%DILEN zV+nAu|8;B2(rMPAWa5&3k0Czds{ri0-#X>ve<=eAel4q{3P3t?4jW~@K3 z`91-wqlE!19om=bB8Y_(Ko~A0DyHq_Q-8vD4v(OO=piA*@XUhf=bed<9JVqi#AE3d zUL3m|(@whpZm*TrDTaGfC)$%a(Getj#nQ%#`aD?LNnQ+@@^0IfJrw+Fj0At{UuF6O zfMSzCcmlgse^cK;fb-VOkt4>bYg`P)1C@aD zT_%P3Jso_h+5-I za*PQ5^HE^f$|6Nk)xMKdl=U{v)Axn)tT1#=r+}woCxt!2E6MStA(DnHD&YxNJik#w zuhUO@K;jGGli*k#Q2+5q=ZIvfnr{<{YFL`_n`5YK$C}?AFtk6y833ex-jjwA-=kEHKt^g+x;_KfdD@6zSa@so@ptci&v8Vu0X|;ha{UI>>SO36YCgG7Fl2+8B1Q*=fS_U8o{5&IFoquM>0CpcY+$vL z8doS0EFcu<26`_Tvq|4|fP5Z;_;OyQx!T|8KR*)HH#onzw2E9;EEDSmcw%uZmTC%`O|OzG z0`164avJHk_A&S~y1ZWS3EwEeNwvzF@|Eh-LzUm^guLVyIr%4oJaVd3G=ZUEDQxB9 zt{!x=SDPyO^Un~}Ea}9Q#MspSCuijEtJ1XI<)1g_QZBto+|DXeUYI~jIiQC~6+r-c zNqY(QM0U^DXlnq_j08GqgT$v7uHO9X3Pjmwr*L@pCx(VIAs5JB?DaqJ1~+IBVi8t* zd~v|OFN!@;ZCX^X&|s-+I1r}24b{DT_4q4ykq${r?jr|J-#OoT-)h|iJ}EK|DdNIt zw$nEe-TL1Bv3!&oIQL2P{>uS^PPj@-%-}KSPqm0Tkjs)q2=*@7v!AV3k~m?bZE>Yu zs+5B#{YPtgp#MO`yFinzTvgw$W82s25Ak)wFEe%_C^2T1P&HR|6Z5uQCh;l1<9&v} zQbc2?eruw=;PZvleg(^syn$xVXk5W~mtlqo6L~-D&pVGVWqR$L*P%5R0|W9E48pHF z?<4lLcgosiu1Qu|p_kxRg?WrXXV2|FMSTZ}d*6yf14RISPhFGppcWRs=_7fMDJNe1 z!Cdz!R6YcCX1o#qiN5=fz6fAl%^z9br6ps!AI;^Jc6_osIKX|&{X!p(T$MG_R}Qce zfK&l(2ZxH$-aG0<5OSQrstxfZ+E{koqAvJesPyUU-xVD~>d1ZSB5*cf~CL(x+UC0gL4R-xMbb0~P`HwvSL1!Gv&sKnMI6!IYZ@f1`iTeWinX z>g*3ENA3NE{aVeyNRy^=!-NKKKzRl% zVMXM1+S?@^z)D2ro2-N!UR{NWGnT(Di>Ei3)d!IFY3Ch*uk}{V@GT?#IHKj8$o;tW zgu!2eZmwdWD{$s9`zf(UTqAcC(2Y-sFkiTdP`qw~^%nH)i^9`EJedPBl`ki~970_` zFP7EShYarPf63IoxxC-u-_S6+mgK&@rG0SNm-VKvu@{RV2@x}R^rT^&kSf(-XxECz z2e0jK0Ces^pUd~Z&gZv6Hkh|^vUIo^7?|8QpjZyYt$otsNAkc3`1RBe>_)bmo{2fy zTCeyx1&2qXw~LFu7Pbg4XR8gL7U|Dyvgh>|qNYRzMKasjM2)N|_gHzCXNj{!0(-*-x@qaraiJ3(jZX~IV5$E zR9+6j19NMtVM-xHlAIj394ZvdvmK}ODd`U=ZUPbMOT+3dy5>rg6~j+aFE`?>o7w~? zNDs83APXHanz1+BI^x)RzfY4=c4YRkWbmNX$wrAo$t6 zJtwVMs<0djnF9X>J$U!|dKhr=>)xsndn=W5J}SqK?-Nowqs=b456<~rJ`*_KSv$b5 zDiZlGJUf>gxd`ot|NSiDZwwIxWJx>BlfizMVYE-Y5-)YL+?m`9Xfc#jpvduTz_OzT zbh9h0^q!O6Hfljo!H4LL`!cK&`w!t{#?v)RE_WwT_;(H9#TC0gR}tD-I}^I=wooQ; zM?OgBBd#?32KBa4 z7v~M{#0X0P5sjxi_`+f+Ph(`1(@`=9XX*Q(f2lMG@X&Yk+2>s(QDYgjq;#{vm?|y7 z@uzYPZvd&z;=4t6oq#Q1wDW&LgzyDkIS?P|&ugujeAMdFSbu_HMVFPzHMq%~^8cNuumu~@ zH}JV}kT=iU*Sfc=-IJU-pWld)RtqKyR)CS=JnB`dPD;xy?*1(Jr!?pnx^{`^!Q06l z@mm~a&47;stT*(xavjy>>1?4SNu4QqPLbiP458R7#&|?>US@!IX%gar;HLJ1Ku?5@ zH$%$?z_@1omC0$FBv+2fv|+|MKYd9)NP4?sT=wZ4UtD_ZvP!eLIqzLJ9P+8R=)*)e zV>e8DjR~(6xjY>+inq4_QKjB$KDv#35?Y{OTUhk1sE6U>BBldxFGp{pj=Gonj7qQ5KOXhfr4O0XaW@hN(%lmLX>}ZWMNe^1>ZRAdo{U9& zl>N=sB7}*1RUiiRRwHM)SiJ6JBT$YcHx<~T-~ikQZJ8;5_Q-Ci4l{iYmpz_qbJLLr zquux>b1hv5hOd9mIlyHiBG@Eq8bH(#n+TA;>Bo?IYPc=c6YutAVv(jTgfys|*}DD# z9Nu;e6GUzIuMQYcd%SY_#3%CQm)alG+a`&#+@s*Dj~8zo_)6zq_B#zNK<_K`9ot@o z#vU)5wtgnwGMBNL#rc6%cZ^?C$?!=;TDr|Sfu-#^n?dyRysyLfy}OK~s|#0|{MeAJ z1~tSg-N2sEwz4xc!uyHrqT3+<$4bH8LoM$cW0?VWq*rIL`c1{KRG*zKZMQ|TxW|Bh zoKSdo{In>7H5h0~NFs^fd)%owY*(muuR;{3TJrmM%EikhU!`=K?o%tkvTk318J`8C zS{73QfCwDkXI*{3sUbo$dg43o;+ZyOlGEGY#s>b(u=>EOd|qVjw91tQEunl(LZKto z<8m9{8byCaxJdM`&4ERnwQ}5=#{23nM1YQnn0BbPH~E3wTshIxIj>{D%{I>ylgMKw zWzwq1gLKAM#t3uCkHT&++@hm0Wm-(|J-7B&`M*R>_|!*~ptd>>ZSETSUc|us{4iMp zA)j5YL^EcW?8C!jcmo|q!HxK{<$?Zd*iCA9pTCht;B=Ir98^V=g-P)ZQPZ6 zf0dmU4^6ZI)I5>1F=s|Ym@8|t#swL$R`E#1ALE?)6{2CNAnAsBxWC=uzrX#hshf+{ zB*+vD@N^~#+pfxG=AXp-#%Vz8;G!kluer43_QLCo$bww#u(!S>T~4#!uiNonIO(fv zEdLhb7ZlhaF)4+0h^$EZ9O4tB5rP^)XtQ8~I!Z66@?&C5+b`?PSGcda4w&a@UR?fu zqwM%(pnd}vz&sBXQqqjDlVML#&*j0hcwq%@~@xb zyLrpC`<>qv-Kn?r^gYsHX!wse=y{bN`(WbuCE)pTPmX_}5UA#ES-1Qs@%w$2Gxbhp@AWl|CGjWYy3Dj=c3*$mw1SUcAK{WG3l=qqmp8?we32rWfZ|2K24~2& zDcvhkiXHAYVrB{#_%k3h-ehq~OblKfoxIs5sfx(nuG!mrS{n!CC@^IXVi~JW4M-3+ zn({p}i=e!E=f<8~9|;nx6K*N%f#J`SFu58JfH-%kSCT>zT?{K?n*H@G+*y|)4#zt0 zqlb0Hcb>*s^R6GGLxd3QIrdfUz4^gb<2uB-7;>CgSp<_iS!}P{$$UxmK4G0hz7|gv^|Ao)LVouiF=zKi{lo0^kI;TJ%YX?*~LwQ z<3PXAYSE{}PIj)AemnbdaD{e*pyz2Y*N=MSuuk=qeQTf8486YQvi6APlZi!EXvL)#fO54y?YCUaq}Az`7FW>Z<=U~CZk9=A5jD6OrQSr4LsO#0#$XP$TSzxWka0MA~n>WJrvwyX2 zA;<{5cim5ad$;41LcNZ(V7`di3oB9K5VzA(3p7685_x{jzEjEwr?iJrdr@Eaw$QI} zP;m_iz;5jla1bQA`lM;4l=qvvPQTW3VTgw>{Vr#2eEPg%$nn=1gA@x^A3|9wU>bK-BHC5ssdOL;{TU+N-YX)EqmjkP1wus%rMOnL|Z?zT%-)il|K4`q@XO&BY z2=TxXwZ|Jy>Gh`4FD=p+?R|VE!AvQ{Z{scwh>m0IfW_&atgFyPs7h{S72)IHF%F@l zlLWp|z-%n&HAego-E)ASO!BM;1uuP&(izRbys!BTcK*E%=j3j*nq_H?vVWhDi_J#p zg1Lq-C8}1So^zfMB$KO7U7G@^Ar7HEA}ONnSfql9vm3VBLMya{UP7E|<{1*i++}|L zjps3C&*vTOqEde&)&-}|0B*4{&#P`KjoG^LMcZBAmw+}ZyKPxE$VVe<2dr~C2mTIU ze-JUWR#Hzv)42zEw*ldF652A4VGEvs58%2^H!FlFcwEkr3QQyWlH}w*hC-A*7e(*J zwZgO_>C!kE=M`RBCthMypDguRj8fyugB9SzknqCnH?X7g*}u}Z*zJb3M3WYOG?k1e z;G#2{G}!`ONa7Shp`P@Dm_}0e48Gzfm`fxwAgMCR?{@aT`?rqsDcd}(m3moI5#%%c z>MqG=@*(yYs>+nFd^17NYk|)N0E(E1n%)rH+e++7HeShk=zm^68YHuR;W*FU={cyo z&K=HUse&mgNuqD|{H>#_%LxMsSV9g=XjvF{g^pV z^0lO95O`!-Y`QFf*x8c0MUK;BcS87<0@qouPA&H4{7Qt^i+IIEdOhAXXarbl5dq2~ zKTFq$wVh*922zb6d(^?1I@*f5vlX+X(G(7DJ3z{1Ot!%Cdd66e8>~IeBj@=-g zzE%QU>`&$I-6~nB&DXi~cC^}U*lQvY;K7=ieC4;*a?4nwV%At^tf+oqB6H@6htJSo z)Sam9L&Voaiuei8&)HA`KG|C~Ie05ug(UzN;mzP5_`yZ`g=a6i(u2lTtva2jq6^4p z8(^;=jn9X$I^6f^h~*?NsA3U?w@N8AV=EYl+ykH zH6zhu*)b*YnES@!%AQg@gHo#xu}*UdHpPEj*}q^LMa~sXW%$5rO=&|IFK01m|BtZA zdQF8ZiVn_>z@I6CU+>_Izp#h2^tkPi;{uAI9kt$lbWQGw)!&x+YJIN5W9L#uIt+si zKvau>kMl516U-zLa^d&|E4UvB-fS*t!i(n-pu;n-5ZpE7ZsiL!+~7e&^j0LhyAXk< z8@Bf~YCv3QGLo$hXy<>86Kz?Y%748RMX#}vW(`5%_Ld9`c9VXXl>STnk4nj1X#5N5 zSw~&Cu^+3vNxBJo^*?zCIv4Y!(dMLt|vd)acQvQJD)qG2ATyGj@-nzHNwi^}Df^XY+hXc}r<7T_y0 zJP-ulWL-t}7%*LtHqXqYWSl?~mIju!PL+ir;!Z?7pHE<)XG_sGQiwQ- zI)JE|xeRNf5Dg%oGYiXdNFvCooPu^~FMu})S3)f02%R~4%=h&wXf1afS={0gN|yK( z_iU+q_k|_IO8V0uyR#l{zfefa0N@{_7Ln;Bf;b8LqULya8N<8 zhpLMX;+t5Lu#l7MZ&893y+CbwB=0bZK9BYUc|B>D57tJ{(>ef(IoM89U}pqkI6~k zzk4&ZK^M2TTqjENXV49Ia%ZyY=u;otTC7BbL@){Ec>qy3Vyy4s-+;_0eFVMQ--$$S zvcf5q_+!tMpW*>0|ZRUW!qVYmd9pP~C&N z5~Av*l+2g&_U!odH~Q$IyDK_4G~aPZt+#+C1lK02&J?auA_&@F|0ZbI{A*-a%n%y>{asu98+D2k&P zG{Dt);K?fKOrgin4H7(r^3IJ0{@vimi{pe^0Kb$dO5~0doy``RH3ih!y)~=#JbT#F z_(pD>BZTGNF@7$7Ng@0u;8>Pnu+m2b-4@w`i}t#*qeul2Gq*wy?WrqFIhZOSnvl$w zFcL7>{;sZFX)Gb<%`yp6$8xGy1XYr%%r=JJ@c7uyXoA1X_vAWq(`syi0;&s9o>~@Zv}W z!<)&EQ^*KRR&ToA1|DEm+SBL`rwO&sjVqJL-ugeFztCs2QS~5UzXJOV_dNTSSjN9} zACV+b(4hmrM9oyVqj^RhfltFJWm5jzu7>eN>|5rWaV@F014@raiX(OStldKp+YBM`$k{8PSbLV7|{G#vG1xYB9-nzUtI{2kib z0M~LKEAcX%XLed+Hs0<@tnDX}pHkaBiOoN^EEj%e>#jEctN3HCj+nJ^P@*kdhVm&J5)N$1f5rAR}k!GPU-T6bzl^7 zPBW6xDTZnDDb^eQ61&}U-y!X^vdWx@2llPzSIHnLz>Ch>8VD0~0xURP?SJ7WqtK&a< z@<>?XX>TPVInSuNXHnN=3T7;2-a+qx_{G4*ek~@#?C^-Wi#&3RG{dNeaX50<_H5x* z|1)im2Mm8NhWOHDSa0g|*zj5X*5{W<{nJ(l8~om1w-1{<@KBlh!9ac;hg0u({1ge^ zTJV)ma!)G$>&)65QV=skZO4x}ngZM=AW+Bjak1m#Nk-eVt724v`_SGyNplSC66LKj zGF*AIHc-qgv>uXmBdbncf_vpu`)@u%h8sSOkuK8G#lBNHB+V(eslO-q(1_hVxTj=g z>T~0%I8X1}Tu_7NdK1=(2b&ifB2`i&4KlrCk<{9S+Z{Y7HgN7($5W}7mOW$XjVG2~ z!mQKZ48_}52d@6SC-i`!p{w%gYu)H$5z9hqP^mK?v&!sNg0gYv4c!bU*aK)^@5+OJ z>TA(e_DJ@Pt6hIZmx!b|#{hU6^dTkJ}o(7VPPD+{yg2d!_r`s$?2>e-h8R^nffRfEh$dtRH*@<<;+x8xUN9Nx4k;3lA9H!zO& z5Qj9(?V**O&uZ;$nRLfwDMVlRSpbniLkc2l-u!L{{P$Ic<(HWOnzBb&)qVy8N?8Yn zpbHA)09aD(sEJOV9>_V}CCU1qGt0{S)}N|&ff#p;&9JZKn?u1tc%+~IHQ@OsX)NWHLpSwOFZUtV^ z&A!X-T%OlogMPtAWNQKNV`dGYB;ezvU_Yb66wbeC$M6OJ4X|(Orpdsg!6Fm%(?WjF zC|PU|tMzVN)5`=NnqYu78}|3~{i1=g0s5BwK3W_kY}6#Y5r1`{Cx;VnzY*g^Db_3oOPH>QOf(j3!0 z$OFfGPqEji$`$$(n_=yPL|mNmLC1_~BcI9`T+h45`n=ry$ebQW1$G_% z0rczRX;OP0T~^46`|+O(2q#|_zpROf4_5fFlYhI20RaM zgzHV%;viks=Xqbc9=ze6J>r~CIibMvQgYRtOoh}*_z+DvskC~oc=GT&bH||Rf40@q4vJI;@?-9+=xxWV}z^U3~_voyT zwn=JM(pYEn$;nvr){m-7cHP#I_9xwBstE{O~oG-m-$x;16@XUVz+4o`P}e#(ypCb0UxY~K+~(#2uHFt$gu zHJl>>@FMnj5di6@6MU*!y2xe$RaEpq^oL-KQWBsV&U49}Q8H++<(L27+2`w8JeVWU z`vRyLnA2{zdR_T#aLrw0aoLGhAst#krnKs#O5<^G%CYU_{;!;WF^_5GlB6~_9?Pd1 z!eXp*|9BgfLr;gq7p?5oTiRJkj9SE8C+C-NSkqAp4u3FruD z6coSfkgdQ#9WL{-pjF-8!yp0QYKVX&M-MvM!C9b+nt^=7_}7l~fwKqBG{8p$CXNLy zUsMIFUgj#?zq zue$?0+=2`f;T+-J^+`H{{XELSPdHzzl!_ zonROzKi$bvr)o|T3DC_jIz%tJ?EL`~0ZLD4Kx?y6yi!co7eL?(i?a-cWC7I+8%gtw zh&GPBz;FGXd^G6N>EkL#(id99$~_|{RaSE9vE`)F*@*Ol-}i>@ z3lRtn{h;;sC(cE0j=}+UUk9B^#1s49Q9<1e7qUG$(4*J!GCmi#+iCfTqiKPan+kx6 zem+#`<0;TL;()GT6y;~bL-r~RqG7C(#K*;k_k$vq{&3|eGJ0c~F*NNlBl zD#*5M!4A_E$jcf{K(hf*c8+XMn%+$I6URM~yP2vOd&Q)5X}{Do3C!RysEyRS?w|z^ zpura)Cjj*`lQaB4S^mzOO8B0he?tLPsA|iu_Qu@kK-w<DXaRAk`NUs!QvYY`6{|pBN=Coyzy5UNkiIQ=3=xu%{R01E5c1b)eT%OR@H^i>LhC_SC}Z2b+O-ka74W5PLe@%3i~kqts(Ol`hk8V3fRnIUE7R4 zhp`<44bYRfSA*hwdu zhm82U&y&B~i~yh6Lqlgp559|!uu_jWFOvAk2bXS|Z;(A0~W7w)~4LT`@{0M|Cf@>Dz2tJ}fS z3ga0*>Vh2}@w=aHxrwxj&v)3gTcK7+9ZiwYJN9Ern_oD#0WfdZK^@9Y zkg<=87|SA1>GlR! z=v9D553{f9XmP5DLXGBD~%ZD{x!#88=P_@1PnVuuh?!c9lE1Oap_ zZC<>X3lMIJ?Wp4vtJ`Jhl8$g#qT0pn&X-0pAo5?Myn|JkRq+V!y+Q?;=XM$}r zTm*h;qZ_)>$d(r@z|=Pq0?KR{M8ed&YJrFfp@mL=Fl0VijXLkf2CPd~_h2Ck zFy8Z>dlF`d@V@0+df+J~PbG%n4{%NrIC5=wYxN5|V{^{VO?xJizg#R@_*g5ZopBOq zpAnmQ7)S)#Rz`!;oTw0B`WuJ)tuM!a^{tC-blu-I!F!hEw$tA-dl+N-2=_Tci;Ij8I0zRbSu&un6Iq}SBQU8Thy&zJse{QrdZE`0iTpt6-G2*^WP2HU@7D%sikm#6%=?TPx(pqriY^y!@1yOx-1B250ey=Dn0dJW4?Ac9-?3I#gm zsH>tsC}s>>IuM70-I%fzecZ#xr=Euu1e*FJyXrP7V;OI*U-)m)k`5GWM0|eS!jcGK zKDpEZ!JmK4+-W5yOGm!Anbk8dCE_23iPk9>4#z50vl3H{}0R8p{=6oRd30D5^)rU=b0i3eigT@s%d zB}8O2x&fMl=B_aW8| z0x10E{Y}s&($4+r^2^k&aK9TpVJvLQ%4%&kV4_-lx)dBk-?&=x2!=$BrHqj@W&hJR zuAUV5`RC!zP2yJ20)+eWaJ`~zL8XRpP+ znRV8Ra;tZo{*`wh@X$8bbmM;~dtCz_Ahh3V9;FmL`xYyx=@d;jeQ_~nioc^EO=3j7 z_CXE1;vf)$=lQuG)H2OxdIvb1?N{m=S#}gtC;8I&kg-pimdHfCLY$p+%k68ThLyV~ zDPqb%Y$QdCU{dR)4KHu-FAzjJ7!nRW7g1ac+2{4D6J|gQa*;0qr99VsHe0!V3N+R) z;1eWo_{hlJ&hm-~5*UnMkN4v2k&kZK$r;kfkWQTsNMmRfTF@+|PlIrINHKx`)CNdV z)SzU5BD!bp%F=U}seh(FFOY09Gg9qLD}2n^7P-;#U|nq`(-Dw+j|RZt!~5Y6v{UhF zc?~X8E_9J*j#ODyEH;|1%)?oB=BteGs@OPM*)$5;lv#9H8~Fs#UH^JNQsBGBMd?Ss zqD89)#=GDAWN71~a#xJ=COHb{18$4)U%YHtzIM6Wo@T4z$wN2( zv=!et;Iek1;V@@bMeh-3Wr!3I-rY`HH*JQc$Q$9N3V=Bv8uZoKt@jd31;}Ctihz+< z3mYU=fnSlT=+fQt7+6Sb$)vohT^dezP2<8`Ad#Are*bOh_N>=QOI@z!n&wAirE{U8 z7+4-FfiFm3NC zhbiNHnDOaYT8<0kxb~Ov?}XNw4HGIfX%BOm|8)Y&gP@Bv zP_yFHmE?It4jhPAJIk`5tPc7BeLC7Gft1(4w6OL9zi5j9NQa?rUKmqihT~-58vI|f zPsA^Fda3#T6;OAR5Sij+>#6V*EWS@8Tw!-j)t~{kk;O#RIQ|^WGwZo2C~kjlES`Eu z+(P!Vd;#APV`=!bup9R;4B)Moo1}%$=af_|z^%+!L@+FXKP1$9yg8MF)fL{vP<{a( zNp{b?ovB=z5_2MUmy_=4RLWz#L`M1&Sw~h{l4OVT(vbaG61{5@{lr3-2iy1hIwP(x zoh);sw_H$IxJ|3GG*ieC9%X+{1fikuMO18qF)0wuGFcxbwQDKnd-F;Ds;R8;(;4!| z3P?8Du0N%vx7}A5FkakU4>L>ZTwI=uyu_wXXsXSVPE6fjhW!k`C6;INmZbARcJ1ju zdqxfShnHg@Z|p-K@aJQtS6!+11ez5KrAu?|vTW5n)1_C`9N5aaPmwR5@unhiRcCX< zM%<$N5HA*21L2dt*(`gq&85sovCpIJzC8*(FKBl|Vg@-gkM5#v!Cp|o1+7o1d4r>0 z(K{S-rwZ*|1eMW|NNvdFz;)8)=gCeH$o~!`Z?Kx#oWkA(*;0BOW!3uv`#kfjtouNc zK~DI)y(T`ms@IwW_23;*SBqNOC%w4~Wl9mm4>@pwA>aV}0M9n?FX=zl-Q=)^=djNk zE0w7Mk2ODl+*5M``PGug8H~i5yDooWnKTXs3cR>o=uyMn_7S>o^hO=hH$E^G&TVlKIqOUR74zbi#d5tL}o%Y51c zU8!M!najTd8u&duV{A@nIB8X-S?zudA@6>V(`_!3DJQ+a&OU<3!i_|RaC@~|c z^n8Brid&{{6#9xuFe5WPXVEcwx<_nl9*rF`irg7mqiK5O&DrkxGoTj?S3(We&}<-?jpXR^6_o?vr_NqQK>E#lj$eOk zNpUWdX+}O+;6z6-B${7)vfeaXXU}I#>hw*%y!8fFuEPQ0=$?^`Vm>Ts@OVGW} zGL^4_#$24-s8p*uImBr`Q@H@{7^WwlT{6o1w%_~qpl=(^IfZv!FFZL|jK49Y&{xlJ z0%$|d2M9qA7_uk<3&M8zq17Oz5ckRFL-53XXJKpnWY$lB zpOI&+>4u*hdA#$sNnYvs+eIN8#7oh^_Kz{j!pd?+;2&5k`{&vGk!qvDck;~am(xqW zfHH@xEZaC!KJ=($x&Lzg_51TH#`CiUDi{-eabB=R8>q=hOFz+?nwy#TV8fWGV`t|Wn62%d&t#NNA4l=k^x@;mn+Dqg!D>^Rna$O#H53Eh$>`B5QD>q<;O#58C6uBKpmF|O}DcAA;-JB zKR)_l4VjJtu0*}o^GbeeJ>W@It26@(%)CgA@q3nZ8&^mbYchP~S+Az0CL+sdT$}Hc zFgQ!1Wc_8X!Hdlx^7S5T`s1a4z@I6%V$hkma3Fh*k6?C1aVoCJ{zc}Ff)C3s>6@>B zNkPy%jr#$quF3EzmY6lsYYYPya#l&Tk&~rp+d4zXKp)LE3pXvmSg)eweQ2*0T3;p-nH)|=Z#8zvZrc1lZ7>+Hr{=J2VF(Fdivirf9%zod>TuX z&Dv!Ny#7{Nqzn_NrF7|L#)`DxWU~>`I>25>@PIV+WR~54n6$*0_Y$RLDqX6U0@Yxj z`jqhP11NPZJ_wv-w0u|HJ}t|XmaiSn7Fm~Mm~HXLAUb7i!?&J4MB>)@p&DDf=taJ; z`*YlAHvZO}BoH83n)--*CuJ4e$P)~)=tD12Bbn+!U3tzZ!?>%T%ThYUt1p^eER9|U zhcLn(YZy>y3BAuFYI{`7kBCE04y`W>e0zHiPed&u+XNQ4A%b*Z7}1dIE}XzM;pVT* zi`qc$pwyGkM$JhXnix<|HC$n!x{i_$p#v&sPF)p4Qz=HE)5g)p`!kPJ1R#MPo98%L za#_%{ktK3&){Uhjpa6mBlW-xqlCyL9Amza2@XzPXUk{nsI~O9b`k5^tm2sUnUsyEH z{p-Mb)imz8>zR6N4vQ7?DXZLI?SV_EHhupNX_HI@j6o*(XB`?)p1Kx1q3_&{Ez3CF zg_}`7lsit64~zIucnQtO^*TKh7o)#BYy!uCriF_}f21~8B)C!wt8$wkDIz3AI{733 z=nUbcNYRz4vRI9>>dUrr=PJ&0e4Qz{{_Y$A2OsF#4~WJ^^m zH8JOcbP;aGT`=}9>s>%Qq}#1%kF@;K=15JBUAQ?VKPRQqd(%^1yF#x-3&ht0H#z@o1e-*9uehFvUoWES+eR#?Sr4n5z4<#R?PPQNFzj z0JRIa>&9LDepb9yUo`+h`-RQUJLeOA;(w+R?Y{h%_FHyYdvi)?OKL(^#&%y>*4X~h zU#0K`rb*r{33VgQ{|1SXVN1U0QWbxXKv~?pnY;s}J4r(~OaYTiY$_xVJ7_r2Y9P!g zgjVij!HeQDKf~*d@Hc1tXO)q&^{n>}`xTBU_9P0MRu18IqCP<^(95n9_lXKAw=qDR zpFSWcfd{DVPPKMc_IB~tdWMxJL^4s$mW{Lt^g~S$1b(I+gNETr$y}4pR1(C5&fa~d zu5qEIx3esq4uSGU@H%>b_PD}yjwhdrJKRELgSQz8C(^_{i5c4kft}Lh>vR7;CFC6; zYgy(Wte`?^mS01n>OxiTarf*%6#B@41nk|w@BBVxlb7aa9-GwR-11N%XRfE0^9X4- z$|qluH4xlMo>F7MsJ&$dC*6zN+eay#)#lWpiaY$wsWXr!hloe>;X(hMGrj$a=6c?} z8Yr5hH%=-#|3=Hl6vXE80J_MEW? zzl}Ni82ATUpF|i-`Ei}=xooHS4y^O6pI2JzLML;X^&mTnz(!lg7fVU87A!d4H0Je$ zh{xXbzc>k1%~e6jzbOQ~SyG2^O#xw>iZkmGYi;Zf#Z~-*~%>8q0r`|YXm%y4TtDN!HJ*HQOn&nS!X0R1QrlVo(a zD!Zc95!#j%qdd#j#!^Fi;PZnnJd_=4p}YwIZm8-Get-*d){CpG`9_2ojPY+;fH59EheZpI1W6J|(a? zGm9^KcMrp!pWQnW>F5+uqCr@kQLeD2chFlenv%Bl<5`ug^Ie@a&ONqy+rl!`TkW-? z+K9Zw-U*+We(a?eTskD~MinUz&!27Y`q4mky)M2kaY~XR) z1>7IJ{GaBf7cULPgSV)WZJG+Y=KYsDp18s$4d&;E*lzTM* zUz|Vq7!GybsX9FpZQV@1=o9X{SH;!44^5ek=Qf=dD z^6I!+qt6VHT%=7|hhWPaB1j2)<#(r?Gn&T&BtiL+dTHEJ*k$=ky2hd0`MMt1PD<;^ zNZh!qv%3k0;2k875mVeH80cun-meIdkb`~hh~j3Q>0KY?Q`g+X5ZHr zWtT|Xavw?k+1sqZU zYtbKgHUAHJAiLwDG=Ug%_4rzK0kDwMih8mxo^q}b$rR{AHQw;f+uGf|7oIvFUjKn6sI0K0M-rgorx& z{4a7!%BIGbQ>3VtlI_Aa*};HP&jYih3^CRI4G1C~vL3BWR~G)>DBYmD`jJU{BR` za6ByqZ2xwO>Lt;7S<4%pw5kCC*+OaMnyG<(fRBVetURs?SSDG=Y7)(>Z`p{dC@9Q! z=1lSR#Cjp+gL;5_1w4zco6E$n*sdcfKc;%><#*l1EGKS{Qq`0ngH}tCKBfAJWV`JL z+Bup(l~&Kxt`dF3iyjNvs>QD9jzx^O?Ean+%%VtK%7PC)wy*k7U9i2{?@CO5sJwBL z0oM&oD&k$;PQTptvBM`IiX zk(R>1@^{J?r`?>nrOGPI&jY0wV@Q9_#@{erhe1S5Uy?u%14)Id@+RL}I;ud`i{)kC z^Jn5LpN0MX+dh(j)E_&p|mAKTD6fSHCH;RLC&3>d5+2Z)ITWlZv^l_pR zj`+)~8MP#PQ*I3>XkvVW(ptvqdlx~n{RFyD^Z+8wa# z9Q_V%F8{D|-{oxZDVwTlwu|J#T6^OR3%~ z>#XXcu-Md-P{5&^?>*?oKVAW5Bvb|~(hT(jezU(DSeQHRy|zG}O1Fz9dy|{xcH2ZZB8}`$$TO(Io*gQQvA}&+c4J+J$`-)x-}$Xe22|8Po1p zSk^~+Yqp+xuL)m_lx*iX_Aa+?u*}6JuKiYXyqI9mzzRwGB@fE5%gSj)8=SHx1@{b- zPmGeo3N;Fai*Nsk3^s)Zu{LX3(~51owb@bv6-RKnjV;8K$@?dtP(GxkgtMq-jd8M|q-Ap>w;jZ`=W7EW4>LwWZw5Ff>8{&1E^eL`sv4q?bH$znp2OB9ViA{xd;+J66R z@PVkCqG{h$ugF7B{Qyv{(UBIdum;K5jnQqZmE%7z%u6uTf2*n`11P*=6VNb=wJg9O zSvbn%$R;z%vQ2A`h&yxiqah}zF6w7{aR6j)V*>R<>J`_-`^sg+KfbN_rCL z?E;blg9ZOlR{`Rj^_$BI;f4#d7b0#gc_$OqiNL$(4_!WUfR^EKH#>3({N31vH&N>j zJM4&1pl4TY1~(r_q63n!zWH1rzEt6f;zc<{-g{;o5Pp3<$FkkO7xwGPfZh9-v#h3j zVYXnq$T5@dxuF^Dk1}lQoVB{?Np#~yg)m*?IQ2!Bo?()ESpXXK+OJ0;UB@m?ab;z* z_*xs!of6%CR%%%`=~(rq(B@atQ@Ywq{upefntU38~Z&Kfp}R?U9&7{ zmgZzgEV_5R>cfvSMDC#yUEfaS_l2Q-#ZLtlbg!&(OBUwSuJI4FKam+X5(|--pdch< z=?w@ozu3%(|Gq|AG>~*&r!Ppdk-c~o{*5|q7}hG;6*{_DJrAuqx~yR*osv{wao^XR znm`y%pA5qP;$f8sBq`}-DJC!wGs5od1wmNhlt|Mk)<fW$?~_adYBr zMn%7GnWbkidVz3y6@`#kG~I8f!wQ+NasOrJ6e4 z>>pSk#wN8$^nUEzrkL{(b4k3SVyncM+k(%quJE!-HwnA*V4vtQj8UWzK%|zsYx%Xu zM1jYaD`q1^oE|*Xl97D@{Kz)mf|*`8J@I}i!eOeJh6CO&~`GuI@{M4?{%cT za3N)#v4wYYJh`1vC}L%+C5jjo$Ct}rVb9scAcL;_4$%h2m1Pic{M9N+87uz<&nH1> zCz4JM;?kb(rnM)eDHoE``SFAI(T{pYC?o>jkr!;>Y}PvFsc>`0QX-1i4h z!kilIKVn$I-)%e{LdGbLi>ol>_B>ecSUq{KjeJ>k?{=_^Tobu?;W_uXaD2!KJp%cY zR)F`kOa~Nwf);|c7yK>l1+A3NyP4(f{W`Xis35U&wE z2jols+q4KUO>*hIaT}mPlKMl?7nzBob#bdkWbv1lS^zRqFVWU8Po2g>CBL`-fWym$ zG5puNtuix@ulE7$hA#?R_Px*m4t~ zb$nQu=%PEn(_F-LQsnKT2cOvlg`TXPF|H;z&=KaN-|sZMd!3T>{lq)^F=a_A`kZe) z+5^5h%^&Kb($!7}%<`;qKx$CCDPr2Qk6ouY)J_yCW2v6bfgXY=vg(+PJRa^C^e!sw1`%>WWNKow)h=@zlGM{_*L@pv; zTc5W@&;7AUxgpqc;+bOr))ijGg7^rKI$wWB@I-PUM#}l0V#yFL?zh;B<|>#?NaR8Jo5>ocP>W z=O~=6C;SX5g>ETX`o&<=JW+V^N6S+I3)z>0wGHf{@5cRl4;23W2krWo_EWEph3*KE z!RVTli&lJ5NsZAdB_k&BVh zp<_=Gt?$y+PglzCw06&?gZ$Ve@jGY@S>Z7A-v5XlOgF5(ey0)2j(WyUuh$~V_AA_ zR8{4RCm-CGuCUF|XB)j<#1WFwGD^;lQ5faC_Zh5E*-c}?>0#pz(lJYz2zPgA56E)lv`%v4*Q{$W-;s=l4rD z>fLi&$(`yKgfL7pPmI3tUKN3Dq1``t(IcUDZ7f5vRV)id>{Wz^fB#92zfKf7ow7C{ z^ULH?Pfb#efb50Wim|Z{NXG$_d)HnkbkA=Fj@N_5>!)t{{_FXhv~6QzEvaY+akKtv zGZvt!o-9&zI_|Al(3$>0VwTsoPK)rAc`=tm$;Vq>pYEs&=H!4s5Cq)ysy97LRT5QS zsK0w(S&wq&(Se`;nH3l{p3o$v5M`qyqoxO_Zqj$yfHtG|opf$bFmIf0<-6zoO#6JXUKeI%v&ST zf&07=2q%%MZ6nj~fN!a+?gILss7r#(^1=GaDon-9Si6cA5VxqaH$R7ff7!XO-&Lgs zT}aNbWC4rWP&seSg$x;l?=XBECzG?R-T<#QVhwlwDWg*}1C;{=8@#+j{f#oE?XcBy zATE*w24~YJ<7%#4?Rc2THSMc1cu}|*dLT055`0*32>vPX#-_yF@K$=5WlykH>ZLiW zcA-L~#SgcNWet!kOyBK!C-RDng^UHg_^~-A=?0+`*El0 z_V4daGX98R`9BOt&rytv7_f&=n~1 zuk7s_Qjb&qLtW*vU6>Q?Kq5LoKuz7+8-IcruG!kFqV|^AITryqddCv zVE!U5C4MeXRGYlqf|WgtOrn}icA(7*t`g3J&}s{aA~dSmmDM1*pNxzbNN~$N|HURy z_uQQq#LLu+oCiRi%uFexh%gi~B;>uYInImZ&go8{)QgGgFG^r_W zFaGv-*jCEtWAfLwV0ge8+*QbGi2k$ao|Q^Ey-xW^=yz|qdA%2!q?#v z_HaO3RfF>5Bowcws>>5-x?XcV{vdq@cA7QT?{kiG#jUbs+m7SD0kyk2Tfi^!QRU4; z7v>jd4biWt?o1x@hAhOA>b!_BNh1pYdZ;U0Cm<@K8S8RuXxOI3NOPHPTV{j+b@1(k zsKJ#FidTDEla=n9zOG(*=U3L@s+cFt=|cp5p~R&1$9yJg1fPt~NjCbiyp(+aO7h%v z;iVNr#1J}-d2KY8l8`?E-Oc9Q;gno>#heeH%CKN9;Sg6`1Qv__Cu#)wTk$g1w?Zxao2Jo@p?J2 zUtk~d9l&?+k>Q&{doGKmDJoz|xxBZeeqvK~o#W7O&L{djeZs;ob~&%Y=6B*YII-09 zl7XIcw>lAkd@mUSG8WcE+yVdTdG8dZBeHxlb;Ek7q1sj@Tg!YC@>7wQf;j&R;DoU` z`2hJr6VMp}-p}yPl0o|=U?W^EHPS4oS>SMH>mMV=huCVj&b|d(AC{H;6=PK1t$bT5 z@gq~vbyPx(3{#}2DH}_-uH!D{zp#_~4UF_by>#11;r4kZ>G*-+$wl-PUajMa^A(n9 z0LLiz)dIYJV_mo=xM0`)MFyoVl&AFLH4UK({R zmXd4BpO31}T1}T%blR2|Gf#1XCy2Yi>ntDa|tcz+iQ1n9yZF@NAT=mMRQsc(jy6D z5lHhzyEasM50@)yfVQeIuQj#7c_x6d(9y17ZU1W!_+B&kbqf#2g^f6kX;t$r+Gqy!_>64%OifxVBB^IO|I;XOytc&H55+jc5k0gsV_d}UzOXpV6K?2pNNzG`z><|z+k`L4 z^R=^$4x|2Up+5cc!KNwKbiX-syWjui8!?Qz^;3h0HAZ%}taDG8)8Fh1L*7a&doGOk z^svV*#v5OQDM4Hf~8=78CrF(jN zX5Evl8`=mLJ6_-$I!okZq3s^PDT=wk3KD#a%QWI zdumX6a6!>T9R1y^KY-tQH^U4dDv3r7Fh)mL%CbLYa_enE zUN-z!ojdp+n@A5@RVKD(-vxKV0kOV8L4EB$P+x4yDWi_qDdG(( z)Ukb=CrPO$B8!uysOPH{TR;8e>;&(4Zq=*o?HYT>`3$@oq(m?(ZsJ6K>z)QhT-luc zUckpHY&#yiiB-16kH1#=GdHHKYVxK()h>nikq%c?_%->|j#QqM)jL>;Y8379O4Uh8 zmFey4ENO$l76&#dhjpGhHwBlc(j@+Puqh4*mm`{p=0Dl9-7M9+HrsgajX2szdEC`E zI#J5tQJpTmI?XZU)W(njikJgVEcm&c^Zdk49wUE%!8Q3y7(q6&(os(r$4+)+|M!#r z5jl*#y^GWpE&!eeM(_(kyP=qgHDN7; zB2Y_XQEwCWX3nDFqOF#6X2A5t5qv?|MOz+aIP@cE<_B*b>b#FAd7=`|d!m!+i2hk? zakrTJ`^_E={h}n}q@W-laDdsJyLoT{37_>gmUp^mgjSxLcGO|orPEGfC;&M1qGoa4 z?I#=&FH^81mOE(^`FX-srac3ouA52M?f={|5*55SV$r}C{mcyyQwH=7!#;caPWuR2 z(uH0VErXPkzX-+~GSxQC+lrF9Wuu*Pyx7+ctatP_P?C`fLECRX^7vWF=LNDf%QTcwgN7b46{eo{7Efw3Yhpzr_;>*EOY8^u zq@={tdcN5VETD0tutl(1CXnK=Qy6GqQ|8*vGK)n zy7Gu*-V$fz2ClvYQ+_&#;?6Ihs>WQF-95B8Ng~pQT2?<=HtU#5lrTUZ$eDT4m{O`HWaf_!0v{eq+$pZgBHR#EqDEmA`< zzfwW$gXComNL3Rvt-YO-*cQ{6$bS@ZJMRgn8P>J$KdJJ9Qzq7;hPg{xn_(s@KzD-I z(N(jBdD~)!$?=>nrz)45(Guq>%7m)Bj$16{KTdqD=7XFZRyF}nt}0&#b^n(6{w@hE zRFEE;<4J7d7F^^~h53_srtNv7PoLbI0Kb#Lgg1F(eqEhupXaHvq8#JGp{99Go=+Q| zV>38SFuB6HC^yWFk&+BW4}Rls-z$tg(1k{QHaW>wGy+HSd06?1;3D|01gME+j6a>v z6R%RhQhR=w1{}hP>mBYI>EE<7Sh)Jj)0M@Twe-~Ien!i;K=12}Fv`7`ZZ6U7%u@0N z#=|nz>-kZ+nrunce%sSL%E7C-GAVf951>FAXe7&tyO}z#yA}N8CK2^&BG9s|BU z^=aiMeMc&odZ{gp8aD+}GI~~0*h9X4paJL%!z(ts23?e>mcz-;44tybDi}bUaow-W zlN1&rUy^!>eJj^itU7%ah`VWg;GzxdSZ}jFTV=~desMnU5!P$8=g~TvYal)GaxheL zNLc#4z|v45Fd^wH`!Fg{hN8$x0FI(m=M1nX+XcLok{!!D5aRPZOc(k)DHJ)_+Irp4qm(?VwBnJzc zb?v{$WxlB__{ud6w89y}cuxR2xfr&n?0xm>xRJzZj}vTXKET*th7aWhTG2?N5XnSN zAWmSr25?%1#JV>|FmKn4hBV6T$Zj8Y&odEf#80UVn0?&|B_aQe3!)#lY4p>=af}!L zW?gV;>kwkP9>(6qmZQS&og}*`XD9Gh=wcm)cxvxe&r!;RG7DBn${_isRy1Z><&TAa_z@!;~NB-Gi7}-uf$?CzAhQ!_S78e?LtPAXD7e7Ypg@ z+DPF|?uK=`A&RW%4)f+e43pjui;8lHV?Oxg7;$YFLHZr zOAfcEruYG!y$Q>XH$R&2WIxUDC`Cy2+uuuK5Aem840daRw{w?gs9 zq&6gJ8}${a@zF@9*Ki;*!+6g;x<++FQqP;aYb}tS>u*I>HoDvn!JW%qjpr}0D)e&Y zF91{lr=Uo<5j+f~f<$!Z266?H42@)#e(EVAXOJ6Eu?9{Y(6U^822pE*EK^^fVaGSK zs=WhTWV!k<{qPJ#Orip2X8c_D?1JahPwa&MKA!$%J>xtsprL1b$h(#{53>tusdCPH z1U{vg8N@tuDL0A;TN#f)9*+*)dd1W?R1rydvD{)zq(6-`1l^2{=U_4d&M2;2qt zohDUy7AK3zUcv&nHH_h(j6Ci`<1Z|}vPlkONNfUme`5s!qYB()olYIpWucykv#K5n z#^$E(3t_LjK8tnU92ehGVakLIQEw)oYh)Q6cB z?o<^fUXyDUHY{fLY)Nu;fZ~-ScC(YlA90X9qaw*Nq+gaDSlTe+8M(&!{hbdCV zTtgKWDYZarqYQoDEtTl4ina2+3g3KBNN8F^@b^llVz~m94L;U#S)C5l(0o89aDKM| zy}qwI6tyrIaE(I{bun7J4>&};zW6oNOXiem7aKHn^zt=5IO8MJb<>t<%XQ`U$KR}> zTx;NLa28}$*IQ@-B!p~;K$zEI7IqHBHsTJi-hOfzXbBV?+63F5d0xrKobdb6hP(N zuWd!D$q?lJtm(mf-p+GBQf;E@sZT$6luHL1`iM7QB;41%Z3`E z@$f1GaI?*UyO0wQMN{mIu$+tcFfwTKC;R9#&STjj+x?1=PRAZ!`s?}dZFi<{HhXO^ zn`#3Q>zRb{C!$#E$cV(yc%cTiE#Zk-5Gq&{?#OLV?g^J}6|#KFNlBnpKC#FKWf?!3 zf`A{vJLn`^OeB!_bn^n~*ihsJeBVe6Y-+E?ZdXgU%wuQ_Nur#BhO3Lx#erVT6VI^E zG_^MV1<$Zp2d#V&!Q11-q?o5d?uWPz1fC$8ID42q=W`pylESQSrWw>1TuOx025a{U zx#_8R)0AD~J^0=%@n5oKrcu%=cvm)Z_Q@+(_7086hq?S>*IwHNM(>3fUBC`2#<`?v zNKL^`L_9Zq&LOX~N~@Fl)btgyX-Myl&4e={JifdzA!dx`Cf8WyR42xM@wokl@=;>5|%`1utGWLl3&$Tp=m8s_2`<)r~8(D)mJ%nk?+Os zU|X9(wM^@kv#Bx6>xZ<{?G>6|>iW5}VtE^X)m@}FX}ll&hB->8x1v{ zsgs56Wv?Lio#K~msQp$k?Ywz5<0brY@5EgJgu)l=J!dAOK%iy99q-yG^5_HMt3g09 zIm&0%9Te=)`$gPH3At-hRH450#*~NTL4cUpu_Np#-*|G3_a+wC#a{hmum8;4PAmA( z?g!#dCiNI_JomAsi#byv;S0|Q2B(QKw6lH>z50XF+iO!RpzLMnWXgv&H)V%sAw1%G zyHN}AOP_B7!2?*k@vz&mSSdtCfXT4P{O@UX?_Aljbgezs{d*NEz4N!;7!Zh>zp|1w zEdt$S+ppXo6U3ek7$gg}-TlP%hp)XtM>4aDHcf1sN`@Hnx1IY|s*)lB+gl+Z+c`cc zPDk988bv+j5u4_#f7;m+QqzVQrVBjcrU}l|JMWeob>MxRafM^L0hb*jrb=W%oeK!7@*)aKlT=?b}VTmSm z%nPt+5IG0_#17B7+?;GOV8@j5qfDHCYV?$970iuVX_cx%g%{;xp3{#a&WTrlXF1%b z+Vm|QrI{^#kI1S1&G<`lr`4a;xOTv&5D11<18bS}+5b2(c>cS3&Lna{1HQ$yb~aHw zjRWlW%HN+Y7JQa#fxVdwptMaTBz`i6C~l4|+V=KcRXvmoYIr*!|FYs`q?8ZRLIPb; z+dc8*9$)yw3Py}1Jw}PIkn5OIR|lgFs#%DCn&JI}y_@2;-~qC4T8vW@yVaqiz$ z@Dj4QU@?x@TS&|b@{4J_Nwj-RdKIC!h|2ZN!BX4Wft1Phj)=0l{YS)``)Z2Sshr+q zlk;IKC>aY(lN3Yx6h)l0W2z+H@DH>uxH;2TyLjrcx*s+?N337IzS47q~$Ej~SM zO^&0IZk`8KGxpyW{Me354?cc`+HZgKxD0!MKh<5zdL}iE1oC2Q#^}s!NQ%mIsOm-3~4tR00dwWHY&1#3>A1$af3SwGIvt< zxj5h0n3agz@*>us32fl1_4t`mXu?l`%HPLnvDY{^A@?DpA3+{wKe4)Sk(gtWXHMFH z+T$r$W8hLP@+lEyO@)5N=TUh3cKGE9{4{tnDHT?a>=4wS#N`jN_#@bG`18s=K)7cP z_#;E>%UsDueFOisV}T9Z4xq&9 zJ<PIHyits4+M{&p~pzqBI3>`EW>z z<7xKCYZV>$-!sSvRR^g#-B&j#T}N?y2e*x4^)xxDf)(2I z-ASOnqWvZ>nKp1D9+Z78t179IlzKq*(u?Hd!Xw8Yq~$0D+pek=i>LkR3HouF(ZzqL ztY?`G5xI-zZ#xsG!rP4ng=~NR%45ldi1&BJy0YjG;2qiJlPB-?eaY1>)h6fFne3UH zx8g81s*_G7zsRq!bA&mP$dJeo-){io<-!Yw8PCu3Uxqe*&N-2Lb9c^q(Ns-ANFVG& zLLB$3>T6{oJLR4f5MT!MQ>GAl#&<=~(e-}-qHbr<+S)a z@t^0+rCS&|g0x{uA#1MDbIQwo6zOQ3$RAgnLK*hN5GGDlu3XR4NiFsa6+7zMy(j zyac{I=4!?#ULUxhA*RK!37esrclBY~Q$`e!K#4O@n>TXCNovp+)K^psAjPuSU*6Pi z_i1G2#EVNXFbNn58;Nevi6kpD3w?GG!UX~#1;1X+vda5UT)$u&(9Z}UaW+R;$Z#}N z9hM;*WMO1q%Zxw`?u%KwNWcp`!2&OdTf+)DbLQXW@{sEwj{`k-_&8i6r6}A>EJ|W&#dq_>T$;o>h{DdIBu|h#V>z@_y2&e-{AIwmX3P+ zln9AHG@^nS+v!OOpOk9sr3MA`>#-mRfmIZCb8=d30Z6bHjwd*A8cWnF ztbz9;Tj0s3P--Ayq&a_&mlf6x)>qhG(ftPZxn{dHLLiK4mjV!whEZ3TodrFN8X{x> z3DyN}8}yDUuDzI_Vp7tN4UHG{`iAcR1Nxt$o~BY5C{r|I=_oc($2FC|xT^6KC{YaL zLIP~eT(kDlpo0$ZJ}3^V*K<~tEme_auo)83nxw!$VrnX3X)6CT07b)d3kusn`==q` z<*xX8$8AFgcyv*VsRcC27C10NYG;uI9JDJq&*+h7$=q;VW@!bH~jrUErSZ61a~_eS ztHu{_<=Gk~d&7O9qEiuA3ywQpUg7@#lQ*=!!MfQ^qJzSSf$)?S3wL24jX$O8i?QNVR`U&1O(- zDKCX{z+1rYB3=^q9SCqhb&(yjfd-`mYofI3m~twyG_lx8sSrt!UZ`3qEtETzP$VWPCnaFr@RxV|@&@;JxV^!;5q*K) ziRIJ#M+B1G2&qJr9FhWEXuWF}kg%bqxWI`%gno2ld(t!raJUpMKE<>-@u!xke;@`I zu?46JHbDf+xJJwg(D}9C+2GGR^*ZpnpZpSNzAr^lHlnags)D+BDjY54Kj5g5e-E6`|VL}!mP*4$+gHkZ&pEDY%An8=hg4I%( z8+?)V4N(Wmg4R$5WB}7Z5i~7W9aH%61Obtt05xb0_fGT%DUh)WV;DsZ!w~-UGF{c5 z@ctdzFVjM_iA3}Qdxrx6tP)|+1e@Hu=^+XvuGh>r$rG?R58RYG7r*Rs>{1O`8S)u1 z1-O|kQdBdKWJ*&{ou@*YC~rklO6k zBgqgz3v>~J8;NsxSF({Ywy2tO_6aWZJJONI@X;Kv3(p7?8023t^tRDcLfVA4iaI8&Xz%dJq;g-xN5rdr@QFjT_@^Ju9SOy3va3-n) z|NM!^e^SdIP*1R-Kz-7Ui-VYBj4?%3AfTV@F`eSVrDqhS2~1ha-cSYRbrXN668PB7s@qo^#%6jK@L4VG7Ydxz}}w>ykgWIzc*R1>r? zYZIfx*&b~nx=;fGfO$p}BGGA$U8vHk685!U(gKOt8h-7l-=S_03tAiMAQfRDBMAZ< zBWV`OZ6u)vlEFp;_*fv{aPMe)pcsG=O!4^zq-QF$fWt^q0hw?J9=3m$YAd|{6Za=A z0(v&`=!k(ia1El2>Qn|`fg&kG(I`QNaX`x0P@BX$@VZLBE%0u%A4E6Gj?$<=*u|R?L6YiNX5{{$}!!SAoL#F}2301;?K~|70>~*7-I~6OgPUT4! z*>Ig3VFJgrdJ25M!M884z5?QO?TX-1eo2js1sxM*B4&lgT=eCq0Z`BoDr>eVFas|K z^n}EGH*rsCd7yDX9wvw8sP84C?4!ge(LT>mooR)@tEg>vR;Z9lKA%5@u_b;r{IlUN z9UC|j+K!u%jkxA0;;IipYxv6>Y`;N&gXM;*Gra~V>=nJfpf7LW7c>^gKsJg(%~$$$FuiyYSOD@oYrUa79nS1B z)I^**VcWrp48j+Md(AUB3YtLy0u|O#;(0&~Q5}AL!&^|_e!zC1?*9$WB=-aB2lh`_ z?b3PJZF4TkwJ`$SftGJ9mb2?9>53o6U7dF!031yA#TPm1?_+o7!VN6 zEUVNvNWsxgbRQl`9ay7O!!Up$JOZ-e6xUiaxmuIgO)mZ-@)EhHI97P_AR9kxV0LAh8+@;pYohVH@uQ z+5-KF^h6|Jltqn#G-_=YLcdvh5wRc|9J+SoheQBT5Kqt(DNuA!Lu$lCSt0?zD6}8Y z&!S~si(YMnq0Kfq8;m==zo3^62gr3{Vmyd$L=ZIM5rl;>7y^(qSI$EWK^Zd5NL3y< zcB}#H&<`$N%!%JQCNnTh4-imBPEBWJD7n%u3BIBI8{7`6^S{E5$zy*|{x0zyjpxLz zpSWaBf*p#BeYgOJaBuLkz}FXi7qKTaqgJSuRYT!}=mDpvQ%CI+t{Sal%N`|;w8PhA zAqM#@cHnU!l88y*kyv>o6p(`P2Hs(OV1Gb;fDSA`4c`K82d1tKNqvQF725*A zoJ15lR@l#3dx;cI+c`uDr*H)>uIaJ}eR}@e8J^(^9HG(`0l2kk1OgP$7xeN~{_<_M zR|U%g4m1+=fx;++!i1RYIwq8JLa%5AE$8~OxEOe%g+z!k@fPD#YCov$0DpRN{`nL9 zmwkKcVp=oyr^HOjgs9e0Y(xbBs%gy2q@V=Zbm8=?V=uEJ-=`tnv3L7uB0J>5#l!G~ zdcxQtn)UuJ-M<=d5(`8phG05!2a*5`6u7Rj;|^-VO(2lW`C=IMLTds8DlZNPpL_Xd zU8w>shL?f1Mi4MejJTF{Xt>D=nP?)SAvc7OKb1cgqiTe0$|6%9Nj-KdcHDOC17048 z1Q+DB0-P!=PzytdF=sm}0m%gz5rLM~W|Q4<4;hdgaIEnBidlhQIFC~YF;M6f3?u^E zC3H@qX%*3oV{o0!L?I+VM!msyLv4YWiz_W`!~yPz<)l_h$fRlzHNhTbgh5!7%tEnY zI*Mj1gwL=oP2R=v26@2o3+flt2abUkK_pb-7O34|U1y%1ClM)BT`WXT2R~AX(TUMuJy6sP z>B|xlCh%npfM#83z)a#KBkIIl;4D0f*b|N&vqK*Eao{Mi98{!1GAMk_P=sXler}t= zX@mg*4WFGNf&!{F+!n|cY6TidcqDuTtk%`a63nOxR;UdEcz;p6zv4o&XP;e=Kwtt8 zMhLiuVmJ|gz_}nb0N~0u4ST_!&<656N4Aj6)`j{!4^Olfyg+QAGVxpxpfWm&$X(F~ z!DQ@S8j&3wG#c6<7SOXSBhB!?j>GXhNDb9;U>~?0u+N45*M64(0xI- zZH7O8eNv{(>`M zJfZ)9{0ZKn$t;=4G zR`3RSgSJ83zzeF5-H-#nEa-KCHbGVqlJKcm+Joqz4K)10VqV3 zqlRJ(D-VeiX(q}*LOh}5Idy6HqfvLm`=J8DV8dCws;T_ZgfcN8fDnXzE-kLmdRR~ze}Ff^i}CpnVKCqZ{R_N(h1Yk=5XWa&OeA>zPF$O}5f&0)8wuG>Qs(proNwny*YOE5qYi7`l^&pk*8z;HAnps(O@J*i3NSK&g$%vJEkwukL_MS)0~N@1 z{xBqPbkJfVg;SQXuYC(f^9r=Utxy70oae)W3l|)?H9HpRHgmOSq1+J$gaHh-&w}K5 z;^V-_$^Abr{3?QIaO?2e(6)%JqYzvQiz;#26yN{?s++Om{U-j};Pw}Ow?2)MzzGI0 zSD*a9bOX|mr)ODlZn8xImho!5G`ub*7TF7U{S+2pHMNOckve4HW)y}nYJ%C;W0?%f zB}s|e%rWWx?e8n^}m%r##_gxu`vmb=fi2w#+8U_l9NI0PRJuK~TV1Qrmm-r)TU zdU-braTMePTId07fQpO$!9u!*9WI7;+yWsi0E>%z4TV4p<4TIUXwZk?+b*X z4umoD)dV4~-256hM}jS^#lpL2VOCI&KY>6JC@hc-Bse7$xceGN0ZPJ`Avn=iIB`_z zdP~?yj*xpZ(E*H}f`PITYO^5Ip#odzIdDEm9x!i$#xPX^W62(-Z>bicvYp$iPE ztCfQjxnvvRYpx2R(crH){092^fM%$HEC2)uA$6paPNe|?$8|6zkWSZgeXjvsLIO|W zl#m<{27{j1Wz|GJ27v?I1-Fxcv!QIrX<90V&;w#AqVEcWI17Iw9Os}8q2@-YjUskn zPc-6+zM5cJp>I?QjfFTCoExqc|Bt};!r#858pt^rd>YY2R00?DR0s*5IQwelYO^31 zl2f>Z%~|xk#%=cw&%|xMHwCOKdjIm-5|yNpJ{gzD05`Y~h!X&TC_xK|h9m+}=FF8* z3E*1LVMEBQt5}w4+&j2KE}#z_52S$&!Un_=*9ta-dcb<1u@hdTiaC#ABH~j>qC?wa zVre<+I8erWqA?hm#F6*`{sP2;>y9(++(quF4opG_B=99JK?zntm+(1GjaZ)0<6qD_ zv=yQY1p;hC&Nov)FWeIgEM3>oiLMi~UST z(4iVI2}bBvbkv%ob)A(~hj8J*DwTo)OkulH)IchXkw9E8D3B2aEdi;@giQfb;Ar?B za0kT+-3^o>xmg;D1N2zcIy4QMOgL#JnoXNLeSO{3#_HHbd>qo_0nY~<5A1_lJFzaf zL;yB0WE~;0!|{T*Z+I!Z`~nBH&HncsU}}cI6o5dI2;q=v4fjUMasv+Gy6SVfh@nkN zJUgs~mw@dCZ}0H(0x;XL*43i3*}G^tXF?1B)-~XxshnH^K}fTpnTR_3k-?zVvix^j&;lkD8U8+He>;1f=Nj?Nk&O5pzFYEQM-v&pa2Wb9&edCjDeD= zUii%AVpeaBoQEMr&ch5SLTaLBb1uuY9r?1ORwz&{u2rQ>gnvw&3c zga>2r39v>6;0ktHQoZ4B=%NrVpfG7sO)_942}VG!@V3DFJG$KgP!1xEvOc8>Y^i`} zhhDH4032uu)VtlfKn68J&ELFQ=yuoJl;!6!H0av%>Jg5FJ7E@27J z;UjZEb*O$ZO~;Jnnu%2eN!YZS8-C{mtOY1&1f?J_ z5*(AyG7tPbVXHf2Qb6`7Mu%k$yaedlKaUgJHpT}ueIFpcZ z1P&mIl9>+7vQ-n(8JKD!c!C}%K0pf$CMo7&_lHd45Y{XpZLjF-8{8U_!Jw)MQaQk7 z04#I@ju53l5vmZ%LL>@7n^v{j*|t=~fm{x!f>5+(MG!h0%f>dYx_5$RZ3e0@2ZGnrFu0aC4}YXo-44Z>D$A zHAi_5!z1vcQ_n@^f|gjrRjH`N=T_s9-~uK56#nxCzX+BzA=xlBStn-R^NJHrEmuM> zyn&lIp&m|)T%Zgo00^NHZrdlg=5_}QjWLz}5}XJ?zz`fA)`1p-j4U{s)E9(QRfM1- z2!pE;T{s$MwsgsJTpdr?vz>+#Ly&zgC>^jFcPlW)Si&>yfd<(x@(`G9+kSS-h@lI( zbxy##@Co*cAeN123*|ro#MQPe01LZeR-pzKJ}dXn1M}U~AEG6W1m@>LR9D&EsztCi zG+PKB2d<>B3}iIC+^F?t`h53D_@utN!&C75dG5|Lvi|2cYMtI+U?fEZg$O0q4^W9{ zxEhtEOp|@!C8*_&m-kP|=gWcupiVfeC_~}Pvw{^sH)@I!rijVlBNu9cmqNV&p)_i< zZCOp>3E*&3>kZ8cFE*5^s&fehUS7@cO*H0UxNyJx6dbc+Sk!?Xx`fp)_qsprY~JQ$G>p9Zw@Gk=v6 zEOaWl8ysJ7egjEJ$i}B&0I*G_7~}I=i7{@%>w?>Cb!LarVZ^5ZvO$IrdRfiuDh%2a zjkyrEK84dWUt4z2=w=9RDWVJ|rP0UKoHPz#>G;{P!X=AJbnL21qyox5!A@1kB~xI- zXw+EX_JsR^+Q66sE+r2{V9n2NfCe)3M9TrL>ob@C%MhGQNLtpJHgsYLd7PjnN+JLW zNhg>5OPQXkW@Jd?)?EyNdg66>0vYT|6{aMrcl@$Y_ZwbTIpWG{ z&8K9?;|{+99lx-ir%kkh0!dIb(1Hji1WPL5INsAKLH~x@ zE3}1>z$e&b0ELZgj6$>pu^@+>o;ZMEk3-6V@uba4+yTvi_oByfav1HW{!fRu!j=%(4kQAE=;0^vp| zMyCz4EQeYYO9Tyh!E~ouE7sPC0eT+rcv6oY<-y3LJqPrI@;*U9r{}+_^=vWMg>Mk; z`aGN>P=F`EXdEIZb()PA;bj3`SbVjHLP$o}P31IE1OaS_T;TnjS_LPjS6 zrcF;tJ7Jm4qJkJj^+w#g{cL!bI1XF~?t`erkywRnyNn9Cu9VGYqDfcyQaB7QkWfru z*BnABF9a*p0&ZY|5|oHU09RTJWxxjJh__G^kx3oENMbc6PQqFMVrgg%N(r76_PG7y3-x-#OP`_m*-q0{Qn#T5AHpAo z#WDvaAxRgrY@-NdX~xiK4Ez}ASHWRQMYUqksdyt_f5-1%;q3+59n}i%$bl_%T2Bw` z9paF?K;2HsN1|hgeZbhIao{|l``YC<*@zecC(x4F;x4C%Vh0WgRQdmFfpt251&C_r%X( z_FX<{x=9EiYIZUjQh)>l7zb>5tr62ndm|Je8l1d)1doa zaD{$YKyR?c?C0qUZ#_|D+ootYT5U8hv~8iSjh0=@v$N!&`Ip*w(8l4O4~2iw#&=W) zia@i7Th$1{H7t$+N_;8*`Ld%)uPfXaqFrq}l?YE4IY)*$CkD@1bqZXw(3VgG^#&(v zF@bE!S8-3W^)bZ9Pq-fzO}JfTo185|1lMqmT8P%6EhbjUAN4lqzilCXd(F8b=(O0Ix?7A$>$3!i785(`)Y zR^!~k2SmU$f^dL?j=-bPBjE#FLNcV_u?XGq&2k+m)9U+O>^L8Zo{14! z0;^H$9p7K@vcM$Pu$tsVeQYIqq~U>Rd$pBr-IS!u12@EGtcJfNac z_c!YG@A&pru)rd;2rxJ$3^JTJ*%ajLpUzcZZYk1cAL6mg$0wHDb>JmW+&ym75J*S@ z3-5{h^8}+{0dSE$E**}A%gV&b{$5}uIb7An~41a;9lVsIaph5r?rYtDw zBdK4z^_ubu+J$X%qEW7{E=Z>*MvKgCk-AYDN{Eh@z-yz@#IvyF3Q*b8NJyt6LrB7w zNWqXP1b_j~fw2(1VZ>!J0i9yN0w63f0Lp+`07D&idgAvJN8qjG+@X$ZTd{#(yLtU3 z7NAyOHCsw|A%M|vLG4C6R)$0YM%CbXhhv2tc;Dsz_&eS|)f*C(|Ns1o~t#}je~@4$c!YQ8r@5C#PRW`>{7!f{}X z@s*whs1N9gs{_*rXhpFQZKYx*`a-paEIAvv<65Aek{@_{T94C$A;nu;ur8?>nZz~V8}+b<61f9h7DCUJ2(q&tI&el zCceF+FJB0)FbX~%z(CEYrlO_M0SsOI`DdilZ9urpET~Ck;#A&lVj3d{*ti5AA=d%z z1CV7f*DyRnlI#c+CAWre9aaO0@D-VLLpPD8c3*8d1l3U5ij-UF#O-pj{)`g#rThdm ziOJ1y{Wm}Y%LXClt02VnL(BrGV7Gh>7=>-oJx8hshW}Z99jfOOzZjg*QoIOm(}3rK z+=wHoNx+H$&NH-t*2xj@g#LJkeZ!9z^nBuRU=_YMxXqylHHdD-tjt6gBZPwUbvpML z!o$!y>^7|gXVD8yG7W2#JQAO~{#gwt&CE9M{ z`vS)+w4bp4rCOf25@Z~5wotZ4Wy38deb$O&!`g7HkSl68;_C~wwF?G48u9}7L0~AO z1X3s)E=;AIKmpytg+~exlmq7wPFD|V>DY^Wo;Ly{_;ui)KVaD*LXK`ZK&J>RBo!#o z8gN4_XC&&G@-Pc(g;Hm#Dd{BW7i0$s#SXEHC`>`|DFAB5n^1=crn?2@g)^0~BqTVo z`q*Hh)7cal*gO8Yp&t)C1_aoJ=kFC@u!RixS=6KOTS6~bjb0iwBc3qF%2fd+umBK3 zt)X>8eZ?vCY|xL1hC7T8!B}uB2;&x0`5HtBHOmbutZI^i>vR`(PshTVpseU%7m~1iTQG2CsZMW(&%~MzQeIYC3V`M zn(0^v1Kv8UuVMgxU>^tr;8FMq6&F82n>}PL6R6Vekawuf&?O*F8uM-(;Iee)cU5*; z9-@vp43!Hk2W$=01+vOlUU-(FWzZb4j)N$pW@0H?bhTRCBh?)AQP$%SKZWy!Tz}#( zKXKnFYzJhU)NU=v=+xF+TT>BOHZcUidqeN#h!g`To3xm%HLZ1ZLsF13d3IjxtDR>1 zNZA8Eb5QJ(BXPf&p4=L<(}aH=_f6Z}Lzpm)R_{DQR!7UYHneC+V}4!0+wxaL#>O1SEpjKQEQhoJ3P zz^|mfKhZjHGcL}QkOE5R^C~K*W2!Vu&b8t@a^aerna^oUwaZYpK{WY6)P#|$fd&^o-^}Na4&hp$-C?`oSb+cv zW8p#=mM5rP`1=CIwJDLD#0L~exB`#F`+<)^xv;=MNw^0-clLj~!^;==5Js>JG_5%$ z>KQ}}JZk|pt*E&Xaff}wM~8u!J!D6sSnvcY=`iHLmBuAa{6LhcG#VZChTE0ULPH1$ zWI-8Jhy>L%1Q2ZyEs1DEKNQRAa3>xI><_c=;+gQ{j>il6qUzVpJDKhQx8LAwRhV$OFcc%0X1e?l=?YI59Yw(+KEO z5VaR|r1&DZnOFuf3@sr7df+}xTSRrl#IM{M^r^RnIE4Bk>p-L+byd8v9Y_(l2{o?$ zWU`b1pt5Eg%VAUL8ERWtXsqZtEm|f@a2j$de_xHf&h`z%a8FN7G z_}t8jsnDk+)G?^anSJmntx=1pCU{%%w+&XKABM*U+rYP<*Dm=Kb*z(}M!*7WG%Xa} zDnuspH5F5^9O#z#Sm7ve0oIvDoW&-5@xlpkfDjJOg*6CCG-LpfjX05viM)dzs9|*x z7CZ+!hMYMUW|Z@fRiifY{#1F8va1Ev7jo;kKPd)P&5q8$3Y)MAg!oP$cf)}6}VT5fJ3UGwf zAU5GuSY_K+=O)ex%Yd*+iD68kWe^RZxnd#OT{_;Wx?viH6)hfJ%`&&fP^RLs*&}m7>aA zOHE`irn>R1%U^G>1^9VYNq@aU32r~J25KE*#WXC>$U#&V(Nb<8;^JpJZ)7W2urh=e ztQEOo0wJ(ZXCYrvAqp_If@?V?0z;gN&*v39TSG=VOzn`5S?ol(fq`jfaxeT>Cv&Bi z!O&23yVj=a2c_g9ENQqc^6w44{X)+|Ho{yRZ&p}=^hAs;kR6Q`k0dk27-;PH`2l^% ztIt60RAVgJ!S!~-Lb|#~kH8-dUJU^T%SN&YBNbj7z6EXu5(K`Ar(9B!1O|=7Jz-m| zdRHv()cT4ZcX%w=K-L5wfor1o3}pyrl=4T1uK^3p9|Q(CAp`_m2ruSnybJ9+)TPUG~5#GEAj#HrzmwL?x%G34jo+g%2>2+X8nZ5|1FJevl>l7$_6x z)r+2@t99dPMGGlG1GOC?D2z=Ql|f}>Ob?)=Bg~L^zQ6#$R*Izo9WJl0)AM7WRt)uJ z+J+PYw?YjVVU8w_8y+WQ`-vH3K%uGpCYgVZrtH|ahQGepuQ!Rf29x?6Mg8@~j4ob( z!M)*igA(=t&4N#q9VPX`%nEGHfu}g2hH;86xZg~^h}^&(p{rmF*H;2UMuPKmHWVet zxeJ_}Qb>iI=qQLLvcWT`3ZgUd?INuSJS_4lvdX!Z#@*zLRcm36D@7t?1*{3bE$HP> zIDR4v6i5NvYVMLGR6`d}wlEE1BWQ38ygy(7b>P=;Cy0G z!8y+$2!jQZQ43-VyqxJPDzMJqzgB-qQA~nRl&?g);ny4H#nz^fa8Du<4^5RYv+aF# zYyb;v@Q;8$SM>ITe(guF&xVFEr;qcj0bvhOu`0HeQiG=;utBblN2h9~YNy!AHgJgY zf)hNRs6Vk2VHqe*<;7s@$lO z)1TpOQBIfYRDMDB!nYNFedUvA^JF8Ek;F`Obae6j3fmW>Lugw5y-lSm@FAbMI5xww zYt|bE&Jv#VXD_=L4R%2mATFh!SIdBiK=SFaq!3byA(Tnz#Hts#5Cs4we002TP>pJ! zID=*E3391ysv+`_M|9QgN%^2+VBqr1g4cq#PUt`(=$)tqmKEJ4)(*oE;>yg=+R;Wl zSNuGz{V8Ii|GeV29j|3a$)J*qpu)0DwK)o1ffbk;0Xzk-i4k^O>ot1AYlnbx5i)=P zESV_L8Y~UA7tkAOFGPQ_mlZdl8)v~`Y~wJNP;q)oToa2?2{Lu+!Y=q%hp&S7x+?qt z7+-(DW%=C9L!foR*Eyr7IZ(r*uWKuURF!udSN`h^yM`hjD&2+pG>-}b74gSo^#FsTA>1-3FDXC ze_b0^sS8cm8>|fi$U@Y$iW{sGR8`1h7EOljY}hxK4^<3R3`*(JEGn%Hf4j@Sy_&TP z8w@g%rVVQb3$+*IP5jzXeMkBQ35>uoQ<5WL|G@ba0hIxU$^r~=f{cWgClc^nFn|OS zvyu&x&{W!Gh3$siQ0~A7;eoEFglt2JU>Y(eyKhltzy@QWI9HHaRi+SG8}*RKCKa}~ zT@`g1f!5#+VojVyYoe9}m!pOBQlJ4g;xzO*+nL}H01S&^Xtq`IN5ipVhH4!+?2_aN zK4rzr9c!5kniG0F0zMA7KR^ixBM>0lDnVUm7XV|;Dc1Xj^o@w$;MWVMq9tI!*D#PT{V9-^Zb!!@U(`LQ5H{Cu165!e zZlVHegm^6Q7RZHapgeFLz(AdeDFGOG7`#IOIxC-nyB;oyE4w?t_GJ(NVYs%)K-m_k zS=TIThueaB0}!@b86l~)i%{VZ-dEIS4%QA#VSBa>1G>P4@*K=4Tt#6?SOR7>)|qyh zvgcb{sp=F1w_PRUW&NBd`1{}C{wfFrrw|v31=<=~SEvq;j`lzuf*;_5Uf2Q0hJOj3 z0zWYW`(leCd|F+i70Saz7tyI`_Ibc7fIxtIhp!vFy%E_RA5RIP`U!qQSS7v{4jZcU3dAj@yR&9cweQD$cq=djan73t0Yw*T10U zbvQHSJdhLHSm1NJRcmwg*B7+DSSfTIC@orno1B0-l>?*G+0BmUHT5YVV@1(ST7Etu z9ykO4tHT%IB|(Mx6t2Gu%A`%}4fjx`!KJ_$iEHf$1}+{eJ|)0SK!;pm46Ge;fxJy; zeBcRoqZb@INC3vjfoOrVnXV66;S;=IX3j(d3jiY^=2h4NNt)PrB2aIzu3~K$>G!+2HB_KniR!3c2tH8%h2j@zhi2#jGE|u?DC0cg)+tv~ zF3LWYLI&J|Qm2j^cBAN&9!A`R8R4PMh;1%xDE0mjPL~F8}_DUT>1*FobbbNO>dbPV8S${6g(Jdiek)xI7K(i7zn2Vw{LF zQ3OTD4yt#&Y;!I@@B!9=<0<=t>JQNl=*F0kPymad3tGY0k&9M?szm7At&dZ11eJ}V zu)x&m&1BBu&4%lSKQa1777d6S#5>{*#trt4EL?);9ghat@Yg?KIi?}DeI#y%Xrgb> z?x4k#L=MR&dJtO?Wd#K?)CO%ueTD4kXc(}QoD!9!3iTjEXmVAkf{Yc^@vnvYXNR{1 zwqKwF#{oJh4m8_(>LM4@#vpA%2nj{ZR(IGTnE)_GFeB{OH|za(Y59V6N1w(|91l2t zV19sp!0`j>JB|r`zfvLyT}Gg5$DvQL?AFCg$2S21Hj+&wmJxu3mQIWf+9$LSEpS_4 z*w)wa@?X|?h`C$t^5Xs!d{P`4O_mj88wsF{W*!!G?dKzf3EXDS|BM7`eqY`0 zo7mpq>u>Pw9j(js_(GQu2pN=RWr_s4r8SWN4P@|#;o}YS#Q*Iv3oGE(vHSFL4ZCsG zH9(v;Tv7|OG?4)bPT>Ih0>6E=zPw7U5k>(7n$JlDf$~P|H$q=gdl1V{D}F%jNDyjp zvJ78iy%)1~G+5S8AuamL3264$nXB`%?rcBwC;j7EB!1zgh{006O-u{5`3wwYrdtwQ7?W80m+?%*{{3_@Jsm?N6W_|fh{{44i+0ca5210^B^Xr(YxnDoj^h&H1#ZlV4)wc#P=_1 z{U@asvwgbAzuTtv_(>WHWRj7xPv@~KbD%mT838I# z`J^RdocBXeKMj92{Dx^MG$;yTTu_N<1#N%}12K67)eBZj4!k#rfaMPBSK|IR>g@|{ zZ4d=EnpbQ%3Xg;=Di>9LLG?n8H@Lsy_9yl)%+Hf%&mhq?s52Z`!hS(412yAiMg0ct zRcaer7StBx8#*@Hvk@}Ve)8ob3P?Co`f)&nyx#0*laA$NC6&EnA2ZrQ$o<2xZTa)-(g#bYq8A~IRqip zLqts*(nSmC&xIIowAkh{kU}*GAGWQzNK?upLTH%`$A++MOI1R)B}oFip`Q)^EAaaY z@d5Fq7>I;<@H5L%r4V=xXan{GGC`)=g0o|H*$qn=aYZ6Gc>VH8_r2U90(mOdHBk-= zZ~z#|SV93F3;y#P+*Wu$B-_dz`YtMwhg8GLX#_9`XhOY7N@8im?Lo-2e9+WUbl6Qj zOB!ivsGP8X3G54n?zwXj8-qzye>U`vcpsR7I4F)e|1h8p=m&Ozzye1Qt)V3`1qtX4 z=^w=HZ+LwtVxmf8hc?hGl2ZeF8kjnbb5dF8SYUj`+lK3b>!&LJ#BYBIJ)kF)1}xpY zHF({iy+MB=Zm(u}MS2msp%S58EuKVt5Hg|ZM=h|R3XPek9|vwWEg(0X8)S+c-~)T$ zK5QMb5+A!f9%eb@06Cz9uZRF~HNpV71!lEl!+Z)_#Ouxa$5-j=3vx#p#Ic|OT6aZD zuxU&%jeQmc0mLEL1rgVh18$(@58~+x|g|V^KswfNf?&vEa(az3* zMOYZ?R8WA-g1@#;c`Hm%{sl4d{wGhKO|^hFi8^yaT_f<4WX0J^!vePs>mBZ2;q5DW zdxNzBr$^2C911bLTt84tPyoUa*n!JV4yls9dZu4Qn&!)>2X<& zZVg2d^^<03O4NW@h*}^yyH7w+YJe~z44zS|ZH#1ueiZ%#SPNoM41z({AaXjrWl%~C zC`4ifqq5t{~zYYBMCcb>Lwl@@?)LSfz)SE*hNFsxH3Q>d~$UABx)Fxzhxki_=!w}X% zIc1-rBgP%P2pW`d0VIAN@bMwH9pW%GaP3kJOimRPD4=)n99``j)CRSJ!$gz5zKXxy zp$G9a5hg5aUx+Mm8$=A`M3oaj5y%Z3kigNP+mx^^$yckWKqJuc8yqXV{sFgN5C#dK z0CyX7;i*bodlI(}U*FM}yA-m{%|1Gl8PW79VF)*RXwG|>w%ctajihhG(Neuk)MY9$ zu9Bh!u`FuQeELFhF8371qyoV-hQRj*e>T_z2KK-UBnc;5u0Y+0tB4BV2Gxto!Wd}K z-eCJ1y!;*AzMyr*VaNgG>}Ln^Kn6&H1Q*gYDt)d{tA?4C^+$?d1MZ2Qh1!7Fp-y9U z$Ws~0MF_lfya{)Mf0;t3N7ZBwvN|eB1!^(*3p;Wn6tg34f^r%uCVlq~{#U@=a38Y> zIFJXGiTE@CS_=bBK<~t|LH`Zf-)Q3-8n1*`OI+1XMr+55q~L<|3;URaB-` zsdL@9qM`2Dh1>A)8~#|JfBYZt@4%N0?wg2!kkydlKpLV!5DquR1KJY;h%t}`YM}mE z02B=&06YqONb5kZ|9QrM0F{X*(Xci&Uhwf1jWU{5q&oPw!~rDWQ^|xnc!g{t!=zCG zFDv|hNB1DAh)6;>5K0lpYzP zKk-u7KykiweF4U>baa0;-(IC!&8wPba)gNkh3J@&<5LDqbH3I*!z#GsLCwQ0D3p|8pS|LLvVPB)LOW<|E z-0}Ja`aj_IAH? zD&-p3d3r-^V~iK<^biv%-+!tsa(V-@lSsGLlhTfQPZ1dNU zUlRHNB`~lP&Dx1Jqop8(+e%x%;N>?fzRAABXoMThqU}lSF}qbY^L^nJuw7|+Mo(0c znZ*3MY$7`5h7xod?n*em;LhJ5+SxC(lt>_KVTC;Nd=vrlB#_K8L%sv4U`wkLxwVV7!An-Ca_vg*aCjP!AqmHfuh`c zCz@#rWYAI8kf=bb&-@oPz#t3iQ=D*>u?xvUQ~3b{a-hcxR2VmS|1KC;fd(!(sF-{0 zH~9Lh*lq+jqE?5ST8bvqNVh0;m0K(IFkR5wGyq4^kE9(#aU70gC)T7XP-|8TAQWYK zh-yJl1Q3Ey5Cl;s%9J1)xCBEu4OQeHhBxD{X)>im?sE1*D%=8LsK7BJ!DRv8puI!= z1KNLs<#(dJV0DfDKw-5s-a4Vf@Vx&3YRd#Y5cR`v7_5Dc__B4 zz3l1zD+w1xAyVZBoOP2-#%KD3Yd|x#E*fJc$AXvsDXn8QaQnOxaLsXm0VEv(k5~NM zARfR2{DJ)dgb$(kOow9og4QpDUSyx!hXT1~T_S0%6EuUMkdML%Zk95sOgKStm2#GB zh`!)uMe4{P7qUOEW!x7z6!Np7bx2BN8ymTdQ>sLoIh6~+$*KZl&cF8p@3;z$0dteD z1(xgx5$8VqCe$Ge0h+b|2^kEqG~^CmP_8JusJMvMO4#MIrl2vXI;CLB(W^P4(T#gq-J;9%O7|nx_MNsr(Q}uMCqbeR(VJK| zgU~@MQ!)ZtKmke4*jO7wi6; z#6LiPBkB#jLIGu{sr(XDGucFTlO-}yrEv-+*OHDYPD}wsVeGQ2R6hp%81Pb{1{vZ4 zT44*%P86N@BNXl*z}=nW9LL!^cQ)DCDrb-E6|z@nhKOX`;q1MVRA;2K$_^Q4geVco zN@sn@C}hv?eSf$=;O>5Tp7-;9yW3!)%nHqa%?C7ZGEToe0Bw;JI`c7BPO(~oEc z66@n8rf_zGSPF_@U`WPeEq_CigBX`E!xs&^zf(pfTWc|~3+DIK-@PnRrJ@SvKnhZb zeqyV0Q}jjr07Rg8;|J+vH0$Ntxy+wFT_aM$aqZ?V228R54FG5E&U!qqKy8XBe-``L zt+MVgqpN#aCi(>Q$CT$ku9D8OUze9N6P`i|$z1Xpx$6lN*Ay3pUtN8X)a)!e1I@k@ z**?itezbp+q)g`?aQlV?5d0eaF}B8+Fi{~c`9@Qtit%4taa+__pmTCdw)!6#$|KMN z)0$piJX_vUueG16f0)jdasMy#Xq-Fpu!x$)%HhemBxNavP8K820>lC*>-}|;f4`{q zdV{1MwRoM(u=t8QkCA$%m2N;RKW}1~-#4i*x9QMe74OMtHz1_hD$>lN6Cq*zo!h`A zIghZgV{cVpk**2nje5)|?d@V8g6I}JnC8IU&t|fOvw1pqwFEA zbqZ&t@Bd;DXxJ&;`wVg`J0n(BR0LN^p;rbEP4M5_f+M(YFhN@1p*ulXt5-}oL&Wc* z!r0U}f zmq4gdu`bb8Pyd(m_^sVJLBFjBW532PU`|ss3b!GSYKdCyhqUfoQ}L|hrD!=vohO3Z z?-&x*%gMs!42?8^f`bCfV-)ot>7lS*7~>lel&#U*=yBA;6W!ICwRy7-Slr9P!Rqtn zzsEwmbKN`lmPF;n=Eu`pI#O4!2RzV+9crA<(y%kq)F#OZ#>*50V!+EQT=K1c7TSwm z6xp~V(2tDBX%%gHAG$mcKf;;huCvP$bK$nYfcSGvujpV0jPUBo8zW@aoTp6r!OaF+IN zK}sGYSjgd$d-QI0_)s3K;fnb*Xw%G!3EJWRt)X;g`OJ~5~^PTAeUXl zliJM~@`?wn8)zTW|M4S8hll8wMPUb1Ua4JE`$K)G@#t&E7u!ffcj1nlB2r5v7pBnv z1Eoq&vVOnLjdar%*Em{zYqrz;$z_@c?l!3Vn)ify>ps(KKkC~$v3Z_v!R*fkpuJ$4 zwHy_(exs+7|C4}X!PciMv(hS~GNqL-soqHwy7_;a%e%!eod@`9?M0<6V zSrs6>=tz8hpKG1z^_wueK_U5Gg(7s}>y`7>U>7A+F9nrye~+Q>5Su zB5^S&F*AlFuq7P>A$!M~I`FHkM?Yp@vy6D z)9-gwVH9i}PlLGTY%R%UHg-{F_$a1+rfg);usLp+_g#hZxC2%M;dR(H)vx{%|9;J-O=}Zl+ffMFIYu>u&tEolVLralMyTTd5X=t(&Ybc%!Ly z>W;mS6kg9mlKflqWsQsq^H zrd8(jJq(`_=mx3I9WUK`y05g46w7cpi<0Rey0HvMlVpPcB%V+WGgmvDxJ_>@tiayl6(t_yReBcdq__@}mSq|tGzX;a4mL>E3FeJez7WSFeTA{SM2CYIZkl80>xaY1;tDsBup|9BlcpDSo$`y-Bcx8>8 zRyt#=2al`_EZa`tA*7G`V7YZJ?+{J9I;mF=sFt}9FJ4kUU6m*v5FpHo%Kl0d_Uibu z5uE5sWQzN( zokyCK&W&+TT8G9#n+k){LdUI--Pd#OFB9^)A=bA0G#Pii3*8LXkyS|i2}AQD+kimLCOO8Nr3tK?)TfH50~SR;ycS_x3ICVgU&*^NJj z(DCG6Pe$t$H`P->Eo`e{c&`zUEGl`$;)1L1X~0F472IAd1j#Uo@Eq=S9KIQ{JOLHv zee`chi#Q`A&TOUBTw@lZTaUzT0a|tMlxZ!)N8767{raIy!@YcJTLWC8=FOm+S*RO( z5S(%DWHLIK5=(H!g+<=fVd<)^`&Gx@rttRA6Y){udXO$q+?H*hPkQHGqD_HC5bjvs zSpV-r@)~VDZ0Yc)h2fj=Y8C|yKvib2t>JmFiSnkwP#y|p@2TboKrD*dVf9G$OL9(+ zs$d-f=%~aWzev$~Y+ME_{drzh8?${e{%^s$q*t^&)b>*Jw<*Sc3vGiLO+{2XTqKHSPajrrG`2R{XSdQbNWp7 zt!}@oH%aQ_^XvrSVf>g*gpl)A>Ka-l;a+0vTu|;QS!gqUb~ov{JHtmAMxBt7q#JP+ z4N3BOpX31I&xU2L-Wi{_;9mzmhuAUvkl4si&G`hEfCVtvwp6pW)r`??A++MP^#XF# zN;2~4!(uT;dJjsK=J{-DKpaKdOviUMq+1zksza{hBZ%LU;np$v?>^noHps(y zcF4~a05l0SN@cH0p6bpc{fdmW#~})l$cf=_4t4HTlV*@isHQGhQHCk{_U<6_`#9Ce zc1MKJZ-+o}6*IaT6eC5}XGtAuMsOH{Yt-~u&^=b8p$tOsU6x*3i|H=u{^hFkE$Cq3 z*#q$S*ANoA|6jf`{qI%N@^~hmWZyxqJSsOc6FKG&fe^_7*U4OE>LNc@qQX6s;lddz zHN|^}Tp1lLOJZkh#Nh+H|2yfD&>VXYAF5%G3dVYr@u0WR;Lf+&?9HZI#2onJbmWq$!Scq= zG5@t*U(yftk0Z>@njckAV8#D>*PjP6l`3>7Fc+{T9l@fa;yg>XE7Ao8?c>&U`82^? zDl_rH8NMQq*=7{1VusFtDefjb{%K9ukU;2BRxNksm{~L7ck%uvH=1$g0R+dP2%p{IiyA-@0<*Q>u?xeZ)IlUM7H#;am=3 z%zGdAUEh;Bm_{s%iZQ5!9cIF8M^-(y_Xa0kWQ4{!Am>6l^#eJ@RDEEb-Ov2z^sJr5pL&ql8{)SydgG}*XtCv zaFx+@0g{x~2B&E^TOQ!ksf&K!%S)CQ8Kz6Kk86nqt5g08JNI`xkQM3DgVwaFD&QP+ zfs(X!%x7Ded8j|JF%KQ#zt}>Ys@LY2A!8oAG%X?bYVIW#|9z-RQ;-_)Vh_hl0A-ZF zC}@8oo%)x5rFocS)@IFo!`Du!hCGl z>LjJ&Ca*9^clhdSLbt+3Og`N7TO7e|c_`kxUxbXs#EHR2^iW7+iy zWk3$UkdXmpvY;V9rS4EgR+(fQaaupFx7=RV;<1@SUG-s;+li*4Isg*SI5`FHctog!oSRiRM`ECOCs#} zkYWGm3Q@o=&y^3KA&gg+S(f!3>!_vhfL19-rz@g>X=vI!(m08M^dR8}^%ORb!yR{B z6X{IXZak(@o3xB#j-H=F-769X7ncpZ?NBwLa%%xL^R4Twhi0>Qm0KCXbB!{YPadk8 z5N<$ahLqz}yCV10$V!YW)S0u)BW24eh*|{zw(MmKin8O4d4l^vzpJf~v|7?q6EIlH zwj?;5V({{Y|M=$`sCCXuDoot@#7@k;m9U*B*@~aPYJ(M9wOs}&8H0cI5M=`cUg;7Y zO$dsFmwC!D&WQ5}J?Vi91D@pe+hY{EjJ`P|^!J#3wU{7qQ6MCbcf0ZN-@j(m*Km5z zTt(~5bj*=VpZ2^d(#AeXmBAk7HqpC1t2}^kgY+briGXTPu$8FRJUN^32?)jO+K>2!Xyr)=v^BtT*k z8v&-nouql?Ie&EC=(lON9u!AjFnD8kl-fHoaDUkH21Rn|cX<~Qg`Fm{D$EvIZRuaq zLKbK+EIo)xe9C<-R$j=JD7LY_(q$a~W>++i+LbW%+Eb_2ka|4|RF7 zjr3IoVYME%LH{kVh&UFrsVO3ctt(!9*6mZCVAWbI55@~*Ye-9@Y02i3fscab{``sC zNJBz=YTF$kfr673-Ed=t&l!_&L_Zkj!0?%v9SmZBxxlxew11`+ajyiXWx%#^!%;<% zUlof69wgZJL3@9+zHLn6%46uq4iK;0d#)nO0#I8+9|Mu>s|}9Yyp2M|Q*QMD0K3SF zrgdMU7=0D5GDY&NO?YQt!A>NeZhaREQ6_@IuZMu%fvf`m8)Vey9UrUjc}LY}n>fzw z$6?mR#(&?|+J*Hy;7!Qh#RJ|Joe%)%v`)S}3eK954Skg;Sc49hkM}bFs0{K&mVj!JYt1|u<6#i z7>ofvO%68by|Jhg8Ou$H+W@@dj;7_HPK$+<4lw@4k(N8#2* zjXf;f|9t-kyce71ANNsflKOa+3t_?aItvt0a-5e#Lo=1}9&C@QuxH_XI28r;7w?{B z1sEB{cfCd9##$Ah2*_*mys)K~lSiR!q0S?2l}y&hqWc|-7rNDe zNk4#Rm?y5Zua*}Q9>5i$| zKY%N7!2S+2yG6OYBnbOQy?%yLr19%BC|8B9t%&h(AAYE1XuB$(dea(4zVJmv1<9j8 zcQ6$%SvG_uC(w2&kZJ{av9BN^+*+I7n%)YejK`ME#3USlrLX=}U`F#J*xG)0l;Rm$ zF;(aVzOx_kVKgMk(46-0DZE<&O{32D@U9zvfnkXCAj21j43EU0nLbeo;l#klF(OSE z*W*wO?U7D%?OP%1Yl>#EIcwH+(QFe<^Y~B}W&$u=F#6AQ_ez9?V}CnV@pDQCDpa1U z|7I3FB>{6^Pa<4a6ij-v1BwKR5aPWFs%fnH=stc{@p&Ep7q&pP-{KPE0z;yutUffg z$x{UVn&UiA4QKXn))Z}I7F?v)R6C`B--;3eHr608Ld&Tjbk@m7t}mtc$o%tF_u|DX ztD6WI*c`X@xK?GwqgS_&rOQL zy@MUZ7K1-_J$uAFg9Hn06m~{lvx+oRNP<>L2_&Rv^n2=SL5o`?Glid&W!$ad?Zzww zRDjJm0GRmDj03iP&1;0wk5aM|6-3C>WC{6%e62mKn`Q&(JLvc;d9657)_c^RqBd6C zfSS1>;8k>zj7x5)O_~e|;ABHCHa|rTV(nj=@E#q2L*i!5Liv$bOcII5r=WIZyij=~ zs&UyckObYpRJ|R}hmHt}&AEQ((c6EdH3Eg!q)NY#do+`&HHwWgORcOG%^?xLBe~gM zOznw%$D)L$?v#<9k$3;zSI2ZytW6{kMdX86rUBh z#ynF}gHQ?(w(uGI8WBHegd6^Q^dD$c9@8)7C>9HlKHTMZs{j^mUOE4ME0okP>C%7x zuvnYF^`QETGSez@K!$Fdvh$VE%<+dE^}8W+=ITVO4EzQTVuhVTav|)1bXz3xt$vQ9 zj9-734ymk@H1;(&1;>8BKT_!>Bdyyyk@6dv+<#2h)q|u%xHie%NP5A2ylx-mD*iCR zT`1Jde6PJdoE(0rU8FGQ7_EEA6_=-H(dTi)2Uh^f?|E#YAV6b(!#BB)5a}kb6MKj$ zglKgW(fs$5bb8`peE`q2+5`v9LBAL&VG4u5h}Io>3Ydb{jSR9BkomlYCKH>j;|WZhHaQql|yUqJQ+ZKVXk^M}Y%E1K8H`&@!SIye-wMPeqE z=^cM+=e+edt!Zofytl^#R*Rv@cOX0(Cd>9X6D@Pb!!z*(@GWEcdZ};UvePq)1oH5{ zC!)h9D=#!C01+4%X3(M(RdX1#w_fdWpr`M0NvpORJ=4f(@bFf#xKc%j)74Ns+Zdd_F8(R z^>9ZF_cz{yYfq_j{&UgoQ&(b9>WCy=62;@kMLWLEmt%QZ9vXeq@NBhReNG6?_3dLM zX`%pMT++mbbz~MRJ`k>1NjC^>kmRCR#%K3i2U1-a%S+l<$UiNz7X346j(vWCv_?Fq zIiWs0+C=GUAlS2T9`bZjbcmUpLcuQj|DxIl3ai7yf09Oka#c(A1*MGxI1exC9K`~a zOEdZBb>4#CI1B7UzumMR7tY4fTMp7Ts}r8`Zi*en>sLbkVVzR_T=EQ12=+-|^-s1t zk(d&S(8XHIda}+uWJrb*{of*^J`If_Jb|KDG|lT?rtmr4zVEk0uuEJN%y;Hk|1&`k3zgZ$qeVf=ABEv>h8U-dvBNL$X!$FO~!q!;M8~Hh0ReFW40VpEFaMc zih-`2l_7sFo)7;Lv9z|;Z&^e(z6m_#kEk4>n=W#8cH|}^?=sX&jNQ#;8sy0n2%>G2 zXn?{gL`gF{&SBxrz6QAR9EmtTStw-P6kVD70mKc*k-B<**|ZMce4cLmAoua(`gzt) z+Ge}oPa&X0S?o;UhbUcuG=q@|iw%GzY*aR17Z+S69vJeYoz(oPOoj>sv@5&{Ru-+= zGA#EiXI}c;W~{huGm*ouYDIlyY3?Q3Ra4h#|G>HYNV=(Ok->71H-p{qs(05E9n<^e z?w>?|J1&ykcp5yu=35&)p`GfW1RVX~@P}~?R@cotAVW5VpE3pi;^pmF8-CsA-aU9; zYS~9*e2Lyf5D8?J=@C$N6%3u<`G>0!`NQXRhf!0S*T3|!%NZq4k3~2j&n%<5|xv zm>~7!=gwim;~qa{;n5-$NtK7bz4uutYw^a=6RjQQ@K?XOS@`bu7>uk2dz(ErQ@ND1 za`lrcxG%TlFpg@*cR{-a-nF#AeM_b#bCOI5EY|41`bD?SD^T}`^-Pu5Gj0cR6NFUf zs@Oiovgnh=zjvf4caY(bw43U=Wtbvln5(nNwl*OphjN1?obSH$J?;5cXwT18GB$0m6&Kb{YEN!#K4l* zrR)}gskBG^Z|l#UnDhP%z_LtUl1%OIQzFcP#n@?kcF777=mJ`r1x5qyMZZkRP74$VK>*G*nMT6u~QP*Is!SJeZX$>cl#D=LnDovuM%EV_cXY0*EV zo1r1gLNUONjzOAdqYn8ev1gVCPkLx7Vsj4-znI1PJi>WCOh{-jb}d3tju(Yz|J%ji zyg%RR;y*xT7dYCowv__GA?UcWNY2y|*XsV8jERGe0-k1DRmdd_uH8@Ig0eRN{F3P^ zS<)aD8eJh9zKQpU3AW5j$sq`ZQibLg=H^mm%a6hZxX4HHX&G_mak|5vA7smjlnNFv z#x&bXn3h!8fZ=rKojtp}`;<`2LSNe|2M_Y=qn(HjyLsPAR+O1zny1i1p&z(eBLz#w zw`i+PRk4yvsf=InJp-Xk#$^my)d z0AISYl&(eU54e^(FT825v}p}RWB-yTQOK^&wke%ORqyBK1yN*=>>lsh7jtLpK|YyF z@O$;uIS{>N-xRbr57WBG7PjnJ+A{@qVy|=Mxf?K_-aEzxEfW<)KHo9Wh{k7%M4mG( zE6DuR^#$Ea82!9;4_>hkI>Za6IW- z={-yKf2+uNe{|wC0(*+c{UDu`YSuaJ&l@crE|M9UI&?|yh?GKJHHI0#y$1fDXeZH; z(Fs>g8j~N^Us+;8_nAFhj3+FnJ}TKhrV-J(OaCJ%DT*XZ5FRMPhi&%8FfdS`0v$B(O5w)Y5+iOSD%(i>J}KXZ_JIjh#VS6~@o=jWge zhAs8o5z}x32}l|a63Ft$EH&u|q5$j>{zt!;X=8$-iP;@qP>v!%(?P2ld+d?ty` z9O_-RR1q2TW}%ycH{)wxKmxddNWtNNS}Js)3!u=X;&Q8>e7#QaM?cB^>jpoU}tPB!KNzOfmA|;s0l!W;?Cb zD{WQVy0Cb{`rwM`NZnzRXSEmMo(!E(?D;uuaPuYF-hoBrJu*W#zR-r&a7whET9?7HcRIPw6xOjw>CR! z?)=JzPfSu)l_5yh^Wy$8C3n?P?)|p&vXqE!(w9S<)g&zPP|Z(L@6G5oqm#I?=qQ9j5 zs~*T}bpycS@E?yh;E4;qS~8?1)KV^^l3qxg+%Kd zS`U4fZtUITW!RL`$>uAoE5IcM6(I}rVJ8^=)w%BdjJPj6h)bfJ$i$AV+{r$!U*0X2 z#A7GS2LAo+rlWXy`>>p{1hdkSlA>F0eg^z1(j@XJLq3q1?IG6So;&nOm~3 z)HV9kgAr~7cGvD?e%NPXURUtdkAxbJ(cS-$mvt2AahKezl~n#k^3G$hG7Z^6e;X5n zK1T7y^eXSjYMUUmoO^hm?zr0GA(0{H7clB7Y4ysNwiL`P%&->gj;`MA=S`RN9kJZy zWB=&Cf`j8OGUlWS&Q>va8{%tuAvCC*=>K0i3W5gw4GX^#?u-V+572{wCXtP|zN-+GHUEPeju z$R5cd008vU^*kv31Ns{mvZPvP+*SvjB*|h6}O@jcYT?i?>5TogD`L0qUG6PPA|!S4>^U3BCFyT4|IQaYhJ0XC`~I(8t;pk zpc8r_*$G}*Upy(G#VlazouD|q-WDzOEyHIf9}OX&jkvvxQ379GReU%sZ-BFE63Q&c zgXAZG3r=Idt`eM_YqQGBS@m_oD{`6Sx9aBojMtnv38C{gRqtBZcFlJz(Et@Q$P!@7 zjQY=6E*Eun^0s$6zCq?o#YmSH*7{iH;3D5geP>R3o+&ZVcg%V5AoXAs<}Y2S!&PX` zg!%eiS2}PW3pfSOF?3ww_pu6o5=a>|`=3%e4RgkIf2{}IeIrVxz-=`OCI|}s^3lz< ztx2_@&1oIFKw(B)bygchFL4*ZgUw`j0e4!Q0v?z)*;;9`jGsTKd{!XJBqkc?HEzNq zlR%&(QkgK~iOt0N&&9{YXL-5trrE_%&k#AADu0&it93Ni{(&8_40>Btr?>*@RgLEh zmsXdwkHZXOX@!-OsG_|m{Yi)YAfK-@tH1F9lb+PkT|iHG~|bd~-P9$v3XaAPljy^+V=b&F=e>QdVpV%px;R_t*C_3!DX+QXI+ z$07ka>G9e~nd$ogmF$sme9LnV?sMO`yQEdqdNzGT;L96V36w%Mh9>42-r7k24Wni5 zR%BSuNGkbt1atI2l#NSfnYUNxDa{MrpQW5d)+ht*6nn)EDS9rc9jSk7!apB1vCJyP ze)_o%I$GP3zU!ui3;N7in%u^?L4;qpsrI3;`X!{VZbD3 zxkW*deLXzx6nG{*-`%$tx5WO9o`cCjvxsl+AYtKBV?IWtp~oGcssd3ScNEf%C7a13 zZ0C@-eA}lrt9)Nx%^s)FZ@SbZNxSl7GwGzii>TJ*vT-;BU6Ck#Me z_$IHdELI0)aK$k-1#?ocHc=f>IkPoEcyUR-LXW>RmD8!K4rly`l4Iv&B$%#d&h=-U z$4-|hawrj4?KqHN#*!2S3%->t=H=Bj_?);CIU0QB7bqVRa(w!xZTqTuLJn+>O6Ejc za9U~Tn12aY`U5@^z8IXlztH_iNl7Qv9xRJr^RA-~My8boG6yq4*EMQ+-H>goU5M-m|a3pKuE8 z7aIyoT@e+uf_yaH_N;l7!n;zBv1bh8(WMa zwy0E{t)$<(k}Gv-sP*9CWBni&QPckfrh&5wN8Hf?==1&)&<0k)>$aEnqTH9&kQCL2 z6TU}p?NQEf=FCokyC?I5cioYC%i1I90l~gi>nsB%Da3aG=LfB|Sveg*6gEb<>DA<> zbkfgBm35yEVTU=O~_1>dti=qp;ILvMqVg=;llk zIjqTIFwL1RH5qvQ&kA?&80@e4_h>~i|h)?4+LPS(gLtzM09P@0`p4UIbPW9)`8T;|or{qtg z+R6K9bgs9S!^A6KWY8~u&Q?0wH1I#xkGy2wmSLT`9(*u&H~b`4oTUG?V+u$yqR;+} zI}b&i#d}92$IAqRkb?aOy$O`*RE}8yjwx_NqGMplc}L$r*7LX}wH@v3A=?`s^)l_3ut^Hz^Q&CHWS0CkQu8lfG*e#MLieQthG%$q1llblfx_7Rs zp#))a?c@SA$h@t#rIz+7k?(WAa{WmB>UUf6uIU%6*!}=p-uK`K+-Mvcv(q@%SGOWh zVUQj#A@8#hq_3ydY2tGuWOKdtjw^p^Ly`c#E&;bFe_%tbhje|$;l-#$u@ZrH);SaW zuZ5%vW@Lps=Xz@U|<#zj<Ob2rY2i93MXGkQ<)z~>gLc9YO!7I)g)v}}=2a0{6BoO=LJ zU~WraDdp4I)H`z&Umghb=2mkJKsx{&77M5cn|2t@AJxqDiO_ncy5J>(3>@@ zA;ec`W+khCw0=E7!6K~nR=5f`jHOA*=>Ci>2P=OQMQK8A>+ry?(eB5$+NWEg-Udn> zi|WTfdnrVS_uKR`CVEn%OB-=h)J`zWasWy-=}DV9%?Z*M?jBea;zlf9@ZSSv97Cbmos zaUh+<_vH2iyjCC!P$4$~(urHEIBpeK$hu@c78!LmqnUbr-Zh<_LKNyy+&^PKevV52L z&~^cr$nnK0uD427xJBK;mTEZ1yY46Heb}_kjuisBXj)$*AgEe%mX8)F!=Q7tEI_@Q zz~t*@6rh5B?P{@XW=0ZDv}E5KVg^eFy6Pl$l^!%&{|C~86(>4q9lCtG<@WhE$0Y7) zhW#LzJU$q2XWYLLl?7)K#jddvx{E6}AUptE~2x z%G0%{Jmfv@^=5s)n{+A~P&8mk#ZAA(Q2siQp2Hv=Dd);%hrG%4?RtARahvrBhBT3o z%_o8C;AV&|X0HGoQHIH|RbVOkVUnEf821L2ACkHuT>L|&k3^*q2&P2ajbA9uzE_ig zWkDTnEbjjhsnJ#~n)#soXXu^T6^JiJbKAx8N6>(=GEkbkBMSTUgLjfXi%yf3XtI8< z0gukUt}}bJWD3jHhjZY9O~*T#jrl^4%ooE3N;aSqgl}TZW&bjJ^o4<|jLllfO|2Z3 z@3HpU*K}4tZMfSFz{a4LbZ4R6SlDCRhLDnzEW!M-t|T@aMCI4M*{o$th$ukUBv9i^ z_0501s7_|RSI2*~0gSNmWT+d5C(!%j%Gv~Mnn=rKVZC&dFwaQ6ly$SlpvOqahxo0& z-l3GbUCB2)gaygSA!VXox3j);&V7C?z9h1*j*l9QAgN}Bt*dz-`+1BF$?TYL&?hJ=LR`2t~XK^5YkPl99yl%rtYG!R$n zR#&cm=x*$?wRWOW66km7y9$XbpE0VYHM%xx1=Lb8v_P#{S6xV%WtuJl`@ zDE31(<$Fz~vMu_=*bqyxA~dfXrE0r1k`tXERW9|RY%bR(!4t z!VoJFigw(fZN0~NEc)p~4Ryw=!dHr>j#(k`#4lsLz)C1*+S;8-NXGgig?t@05K05)`*$V!KA@czW;jJs`h|cuG0jO$n7Q2^si{wtRyeeqVOfaqz`%SgKTrNH zgGQ)1Qanv$7raY9_c!niI%_7eG_~l>5gXR$zhIR1Rx55QVah*%MB~A{`n4M7X~pJk z(u0$=r@J*KIVS9;U(2=lRv#iVZWNM~VHGP-F3!w0(l!kJa7TR1JXlyb*#-guPKaWQ zvuMP5@b|Q?$ERk&v2=^En~f&X&GC=^=ymkD_npKp{n@zUJ8xJ%0?Zc8Sz4jqyuKaZm(rPWw)>c0_@VliZKPnwx#=@0sqM5QxZ#Zishke3-ca+ZrPWP%4aNpIy%j5EL5V$iK&D!rhmsFw!c_=_+A~dxf{^PU;xY zm9Y(emOd2h4uO?|?NzJ1Om6lyS@kIkg7N2$Arm0t&%u}66Ke@p6Q z24@=--@50lWbA#D&eOF_roiQbC)EE|5*=_Ho~}ERUZ6A4HuWJ3<7(chAgINE=`-0? zwr27e#e(ymG%!ynOLFxY6#UF(;pV+=CMEjdvcWw>MeC$<3Yg0-Al&YxAAgoc?f zW1cc>iEJgl5G(VI;IYaPk9Fh1kgxVfmu*4ouek*nvj9wxaY`zr2hG z>66QNt|euOe2MJ9giDC>!K*ncXJ_@)Xf0GJG!~U(K*Qw+Q*hk;Cj2s1{6+Q3LqSPq z-O7R3!*^(B(kgogZhy-7daUL^71J4tDu4HocymXYz*GF$0Mnr`$s}niA74|I@X0o6q$?zL3iw5m@*7NeI5}mT| zy4*UG*g_@OgzrvaO&kS8?`di&H07f)=u@+DvEgj7`;27-ihy9h%d1~I?qgszD%?8$ zHHG7s9EkO^aF>_T!+ck;Ytu0|nlCL!`=mte3LJB4@DyK%pVVTX+=ycA?k3Z??UWN{ zd^k#N2b^U{dQ^+9A8#dd?vyB6R4KB9w3g9a9pNV8hFa-Yq#JwFDio3iV}Zs4#Pau!2`U7Fn4p!!DzlYg z4%#Kwf6x1KBO@_a{THT>PryNlN1p-KE%$*P66+(pU7c`X2%I(ESYNb=gVyJI&B*?# zdrK#^hm*`Er@{C7G9JRPcszr;HH}VQ5OOn4pL+ zDp8s!DE$lnnjbEOzQUY>LrIyuN6uas@RR<0IPd%PorHBtV=P1~PoWJ&(qE#V{{ZPp zChk#)6zzY{-sbsm!?D!(o!mbI+PsQGt%Wcvz?l-c8QpBY?JTEW$;DyCL?6_0=0o$u zKls6p=hNhBcXXugzT(2<6ogJ9rOQ5xnlaH3KqP8%M9gss23G+#XF7D)%bHb9s0KVYj!wa6HjYOoizroihAODSncaCpZa^6A@XKr z*_eHr;(N`z0G)WW2=T2*Ne1^iMJ>%HW;{sB><#0(i$=j#zxWB@z`f^UoWS05O7*^b z`RLbTS1G)TN{_rpfi(OF<5B8_2Z0z zx(>sQB!q+&;#H-7X>E_O8Qim1IQUy2wf51oYnq1g&%9)ze)6(^^QqHH|5FvE>U|fk z6u|xcvhqd#o^uq7UqCb8u(0=LR&1Yd%z2 z%NbMU(Yf`giPuWnh%q(?gP>z20v2HRG^81+&Q|pLEkO!`Yc~bvu(SwLR9|;geG~LA zo?0LNrAbQirv!~``7*v4xBjBSBo${Svfe)~k%%9Co+-pWmiA4zKc(CiEkBm|-J) zy6t)u0f>yJ%i%Y|9dpQ#V`CT>-HETDAGtoJ%Jj;@_A)tD8jIc(A;IqOPPG3N;S>{d z=gp~xXPi$f&UlEOo*jB#PrAMEdCsxplDDPX?m{ZkZI!tl9>ms;2kIU#xx%Gp2F0)b z83#~b{>9VFq3Nu|te**)y>hZJkf7e$p8csPG(}7$Ei6u%H{GzokL=4!TGWb+xVahI zbE7FQ7d!(d_i}@7IxZu>XY_@GUUfXmCxOQ?t=BBE@UAdh;OdMN$dJI5@~MmrV3kJ~ zWZ@%OCk|f>#g&fE)6b7ZCqm5zg9b%;`lynXeJw7h8I~Wk0hO%^HC5c6dWOvL~$I&W$1Tn)7CVN9Zr`)2A zy%X2n-FN0l_iPXuf}&e@6#4jJ7JFV7kraw-9S;^7Fq~L&DQUYilLe}hc?o>n?3sT@ zFIC@g*kD2@XG3|Rvc7$mcZzTCjCp~r^(Vqj{8+=KDAmT`AHI!QK}21p?FQ{jkh&2p z?p63X%kpE*${s)t0->oL=M0LzwbOp*Sss-vy^s36aTb-cN>-LCJw?v<~33mUnf2PDkiG>IniQ2 zyGg-2Ds12ERmZ7E*|qfj>rT<12AwCP%v^nTCmBbWv56vV#T1lO{4|szlbylpRy##Y}r=qTiMR`8;B-_z%;y4)~Egh2ZX3;JXl*evpdIo+a zHP;fZ=+gHtR+@a8ruE^~O|D1y!xI$o+@+Lq6iDBDEL{E5=%6t-bN8T0O>S5vO)pD1 zt(4sLQiWjOw1P(b^9(~)8o`WsxhCU$SSQaIwU4lJmQfSRgp8bV*K&Q)cqmd@=F>03 z0~*lSrpfG06y@Hapem?n0E-4jLixx=UCeut*VxF<5j_gRPEwP@Uxb7_n2m))r7D=B z#DZnN82IWmA^wA^9Z~5CWarcgSUI*X+0VQKpTh>gVf?duEO}90+^^kjv zRNuF(Cc&_{WJ%oaj7Gt=sovzQ(U%SVSvgzjUc%YjeZd)oG&zFSm*HWvc%@)1OIDjp>`#8EOUU zX^Gpjk8?Y51�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 Rm)ZaT002ovPDHLkV1g%Aiqil9 literal 0 HcmV?d00001 diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textures/cloud-water.png.mcmeta b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textures/cloud-water.png.mcmeta new file mode 100644 index 0000000..dc33bdf --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textures/cloud-water.png.mcmeta @@ -0,0 +1,7 @@ +{ + "texture": + { + "blur": true, + "clamp": false + } +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textures/cucumber.png b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/textures/cucumber.png new file mode 100644 index 0000000000000000000000000000000000000000..43e1c54b0e0db7d364892f5d0ee90f7042da1972 GIT binary patch literal 2952 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

k>(DbnrAid8hX)J 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 -1 || defined LIGHTSHAFTS_ACTIVE || defined FF_BLOCKLIGHT + uniform sampler2D shadowcolor0; + uniform sampler2D shadowcolor1; + + uniform sampler2DShadow shadowtex1; + + #ifdef COMPOSITE + uniform sampler2D shadowtex0; + #else + uniform sampler2DShadow shadowtex0; + #endif +#endif + +#if !defined DH_TERRAIN && !defined DH_WATER + uniform mat4 gbufferProjection; + uniform mat4 gbufferProjectionInverse; +#endif + +#ifdef DISTANT_HORIZONS + uniform int dhRenderDistance; + + uniform mat4 dhProjection; + uniform mat4 dhProjectionInverse; + + uniform sampler2D dhDepthTex; + uniform sampler2D dhDepthTex1; +#endif + +#if COLORED_LIGHTING_INTERNAL > 0 + uniform usampler3D voxel_sampler; + uniform sampler3D floodfill_sampler; + uniform sampler3D floodfill_sampler_copy; +#endif + +#ifdef PUDDLE_VOXELIZATION + uniform usampler2D puddle_sampler; +#endif + +/*----------------------------------------------------------------------------- + ___ _ _ ___ _____ ___ __ __ _ _ _ _ ___ ___ ___ ___ __ __ ___ + / __| | | / __|_ _/ _ \| \/ | | | | | \| |_ _| __/ _ \| _ \ \/ / __| +| (__| |_| \__ \ | || (_) | |\/| | | |_| | .` || || _| (_) | / |\/| \__ \ + \___|\___/|___/ |_| \___/|_| |_| \___/|_|\_|___|_| \___/|_|_\_| |_|___/ + +-----------------------------------------------------------------------------*/ + +uniform float framemod8; +uniform float isEyeInCave; +uniform float inDry; +uniform float inRainy; +uniform float inSnowy; +uniform float velocity; +uniform float starter; +uniform float frameTimeSmooth; +uniform float eyeBrightnessM; +uniform float eyeBrightnessM2; +uniform float rainFactor; +uniform float inBasaltDeltas; +uniform float inCrimsonForest; +uniform float inNetherWastes; +uniform float inSoulValley; +uniform float inWarpedForest; +uniform float inPaleGarden; \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/util/commonFunctions.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/util/commonFunctions.glsl new file mode 100644 index 0000000..f99f0e2 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/util/commonFunctions.glsl @@ -0,0 +1,259 @@ +#ifdef VERTEX_SHADER + vec2 GetLightMapCoordinates() { + vec2 lmCoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy; + return clamp((lmCoord - 0.03125) * 1.06667, 0.0, 1.0); + } + vec3 GetSunVector() { + const vec2 sunRotationData = vec2(cos(sunPathRotation * 0.01745329251994), -sin(sunPathRotation * 0.01745329251994)); + #ifdef OVERWORLD + float ang = fract(timeAngle - 0.25); + ang = (ang + (cos(ang * 3.14159265358979) * -0.5 + 0.5 - ang) / 3.0) * 6.28318530717959; + return normalize((gbufferModelView * vec4(vec3(-sin(ang), cos(ang) * sunRotationData) * 2000.0, 1.0)).xyz); + #elif defined END + float ang = 0.0; + return normalize((gbufferModelView * vec4(vec3(0.0, sunRotationData * 2000.0), 1.0)).xyz); + #else + return vec3(0.0); + #endif + } +#endif + +float GetLuminance(vec3 color) { + return dot(color, vec3(0.299, 0.587, 0.114)); +} + +vec3 DoLuminanceCorrection(vec3 color) { + return color / GetLuminance(color); +} + +float GetBiasFactor(float NdotLM) { + float NdotLM2 = NdotLM * NdotLM; + return 1.25 * (1.0 - NdotLM2 * NdotLM2) / NdotLM; +} + +float GetHorizonFactor(float XdotU) { + #ifdef SUN_MOON_HORIZON + float horizon = clamp((XdotU + 0.1) * 10.0, 0.0, 1.0); + horizon *= horizon; + return horizon * horizon * (3.0 - 2.0 * horizon); + #else + float horizon = min(XdotU + 1.0, 1.0); + horizon *= horizon; + horizon *= horizon; + return horizon * horizon; + #endif +} + +bool CheckForColor(vec3 albedo, vec3 check) { // Thanks to Builderb0y + vec3 dif = albedo - check * 0.003921568; + return dif == clamp(dif, vec3(-0.001), vec3(0.001)); +} + +bool CheckForStick(vec3 albedo) { + return CheckForColor(albedo, vec3(40, 30, 11)) || + CheckForColor(albedo, vec3(73, 54, 21)) || + CheckForColor(albedo, vec3(104, 78, 30)) || + CheckForColor(albedo, vec3(137, 103, 39)); +} + +float GetMaxColorDif(vec3 color) { + vec3 dif = abs(vec3(color.r - color.g, color.g - color.b, color.r - color.b)); + return max(dif.r, max(dif.g, dif.b)); +} + +int min1(int x) { + return min(x, 1); +} +float min1(float x) { + return min(x, 1.0); +} +int max0(int x) { + return max(x, 0); +} +float max0(float x) { + return max(x, 0.0); +} +int clamp01(int x) { + return clamp(x, 0, 1); +} +float clamp01(float x) { + return clamp(x, 0.0, 1.0); +} +vec2 clamp01(vec2 x) { + return clamp(x, vec2(0.0), vec2(1.0)); +} +vec3 clamp01(vec3 x) { + return clamp(x, vec3(0.0), vec3(1.0)); +} + +int pow2(int x) { + return x * x; +} +float pow2(float x) { + return x * x; +} +vec2 pow2(vec2 x) { + return x * x; +} +vec3 pow2(vec3 x) { + return x * x; +} +vec4 pow2(vec4 x) { + return x * x; +} + +int pow3(int x) { + return pow2(x) * x; +} +float pow3(float x) { + return pow2(x) * x; +} +vec2 pow3(vec2 x) { + return pow2(x) * x; +} +vec3 pow3(vec3 x) { + return pow2(x) * x; +} +vec4 pow3(vec4 x) { + return pow2(x) * x; +} + +float pow1_5(float x) { // Faster pow(x, 1.5) approximation (that isn't accurate at all) if x is between 0 and 1 + return x - x * pow2(1.0 - x); // Thanks to SixthSurge +} +vec2 pow1_5(vec2 x) { + return x - x * pow2(1.0 - x); +} +vec3 pow1_5(vec3 x) { + return x - x * pow2(1.0 - x); +} +vec4 pow1_5(vec4 x) { + return x - x * pow2(1.0 - x); +} + +float sqrt1(float x) { // Faster sqrt() approximation (that isn't accurate at all) if x is between 0 and 1 + return x * (2.0 - x); // Thanks to Builderb0y +} +vec2 sqrt1(vec2 x) { + return x * (2.0 - x); +} +vec3 sqrt1(vec3 x) { + return x * (2.0 - x); +} +vec4 sqrt1(vec4 x) { + return x * (2.0 - x); +} +float sqrt2(float x) { + x = 1.0 - x; + x *= x; + x *= x; + return 1.0 - x; +} +vec2 sqrt2(vec2 x) { + x = 1.0 - x; + x *= x; + x *= x; + return 1.0 - x; +} +vec3 sqrt2(vec3 x) { + x = 1.0 - x; + x *= x; + x *= x; + return 1.0 - x; +} +vec4 sqrt2(vec4 x) { + x = 1.0 - x; + x *= x; + x *= x; + return 1.0 - x; +} +float sqrt3(float x) { + x = 1.0 - x; + x *= x; + x *= x; + x *= x; + return 1.0 - x; +} +vec2 sqrt3(vec2 x) { + x = 1.0 - x; + x *= x; + x *= x; + x *= x; + return 1.0 - x; +} +vec3 sqrt3(vec3 x) { + x = 1.0 - x; + x *= x; + x *= x; + x *= x; + return 1.0 - x; +} +vec4 sqrt3(vec4 x) { + x = 1.0 - x; + x *= x; + x *= x; + x *= x; + return 1.0 - x; +} +float sqrt4(float x) { + x = 1.0 - x; + x *= x; + x *= x; + x *= x; + x *= x; + return 1.0 - x; +} +vec2 sqrt4(vec2 x) { + x = 1.0 - x; + x *= x; + x *= x; + x *= x; + x *= x; + return 1.0 - x; +} +vec3 sqrt4(vec3 x) { + x = 1.0 - x; + x *= x; + x *= x; + x *= x; + x *= x; + return 1.0 - x; +} +vec4 sqrt4(vec4 x) { + x = 1.0 - x; + x *= x; + x *= x; + x *= x; + x *= x; + return 1.0 - x; +} + +float smoothstep1(float x) { + return x * x * (3.0 - 2.0 * x); +} +vec2 smoothstep1(vec2 x) { + return x * x * (3.0 - 2.0 * x); +} +vec3 smoothstep1(vec3 x) { + return x * x * (3.0 - 2.0 * x); +} +vec4 smoothstep1(vec4 x) { + return x * x * (3.0 - 2.0 * x); +} + +vec3 rgb2hsv(vec3 c) +{ + vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g)); + vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r)); + + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); +} +vec3 hsv2rgb(vec3 c) +{ + vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/util/dFdxdFdy.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/util/dFdxdFdy.glsl new file mode 100644 index 0000000..03b4bbb --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/util/dFdxdFdy.glsl @@ -0,0 +1,6 @@ +#ifndef INCLUDE_DFDX_DFDY + #define INCLUDE_DFDX_DFDY + + vec2 dcdx = dFdx(texCoord.xy); + vec2 dcdy = dFdy(texCoord.xy); +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/util/dither.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/util/dither.glsl new file mode 100644 index 0000000..1d6981f --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/util/dither.glsl @@ -0,0 +1,13 @@ +#ifndef INCLUDE_DITHER + #define INCLUDE_DITHER + + // Thanks to Jessie for dithering + float Bayer2 (vec2 c) { c = 0.5 * floor(c); return fract(1.5 * fract(c.y) + c.x); } + float Bayer4 (vec2 c) { return 0.25 * Bayer2 (0.5 * c) + Bayer2(c); } + float Bayer8 (vec2 c) { return 0.25 * Bayer4 (0.5 * c) + Bayer2(c); } + float Bayer16 (vec2 c) { return 0.25 * Bayer8 (0.5 * c) + Bayer2(c); } + float Bayer32 (vec2 c) { return 0.25 * Bayer16 (0.5 * c) + Bayer2(c); } + float Bayer64 (vec2 c) { return 0.25 * Bayer32 (0.5 * c) + Bayer2(c); } + float Bayer128(vec2 c) { return 0.25 * Bayer64 (0.5 * c) + Bayer2(c); } + float Bayer256(vec2 c) { return 0.25 * Bayer128(0.5 * c) + Bayer2(c); } +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/util/miplevel.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/util/miplevel.glsl new file mode 100644 index 0000000..6f973ef --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/util/miplevel.glsl @@ -0,0 +1,15 @@ +vec2 midCoordPos = absMidCoordPos * signMidCoordPos; + +#include "/lib/util/dFdxdFdy.glsl" + +vec2 mipx = dcdx / absMidCoordPos * 8.0; +vec2 mipy = dcdy / absMidCoordPos * 8.0; + +float mipDelta = max(dot(mipx, mipx), dot(mipy, mipy)); +float miplevel = max(0.5 * log2(mipDelta), 0.0); + +#if !defined GBUFFERS_ENTITIES && !defined GBUFFERS_HAND + vec2 atlasSizeM = atlasSize; +#else + vec2 atlasSizeM = atlasSize.x + atlasSize.y > 0.5 ? atlasSize : textureSize(tex, 0); +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/util/spaceConversion.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/util/spaceConversion.glsl new file mode 100644 index 0000000..b53bfd5 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/lib/util/spaceConversion.glsl @@ -0,0 +1,28 @@ +#define diagonal3(m) vec3((m)[0].x, (m)[1].y, m[2].z) +#define projMAD(m, v) (diagonal3(m) * (v) + (m)[3].xyz) + +vec3 ScreenToView(vec3 pos) { + vec4 iProjDiag = vec4(gbufferProjectionInverse[0].x, + gbufferProjectionInverse[1].y, + gbufferProjectionInverse[2].zw); + vec3 p3 = pos * 2.0 - 1.0; + vec4 viewPos = iProjDiag * p3.xyzz + gbufferProjectionInverse[3]; + return viewPos.xyz / viewPos.w; +} + +vec3 ViewToPlayer(vec3 pos) { + return mat3(gbufferModelViewInverse) * pos + gbufferModelViewInverse[3].xyz; +} + +vec3 PlayerToShadow(vec3 pos) { + vec3 shadowpos = mat3(shadowModelView) * pos + shadowModelView[3].xyz; + return projMAD(shadowProjection, shadowpos); +} + +vec3 ShadowClipToShadowView(vec3 pos) { + return mat3(shadowProjectionInverse) * pos; +} + +vec3 ShadowViewToPlayer(vec3 pos) { + return mat3(shadowModelViewInverse) * pos; +} \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/composite.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/composite.glsl new file mode 100644 index 0000000..d1c9b8e --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/composite.glsl @@ -0,0 +1,268 @@ +///////////////////////////////////// +// Complementary Shaders by EminGT // +///////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader////////// +#ifdef FRAGMENT_SHADER + +noperspective in vec2 texCoord; + +flat in vec3 upVec, sunVec; + +#ifdef LIGHTSHAFTS_ACTIVE + flat in float vlFactor; +#endif + +//Pipeline Constants// + +//Common Variables// +float SdotU = dot(sunVec, upVec); +float sunFactor = SdotU < 0.0 ? clamp(SdotU + 0.375, 0.0, 0.75) / 0.75 : clamp(SdotU + 0.03125, 0.0, 0.0625) / 0.0625; +float sunVisibility = clamp(SdotU + 0.0625, 0.0, 0.125) / 0.125; +float sunVisibility2 = sunVisibility * sunVisibility; + +vec2 view = vec2(viewWidth, viewHeight); + +#ifdef OVERWORLD + vec3 lightVec = sunVec * ((timeAngle < 0.5325 || timeAngle > 0.9675) ? 1.0 : -1.0); +#else + vec3 lightVec = sunVec; +#endif + +#ifdef LIGHTSHAFTS_ACTIVE + float shadowTimeVar1 = abs(sunVisibility - 0.5) * 2.0; + float shadowTimeVar2 = shadowTimeVar1 * shadowTimeVar1; + float shadowTime = shadowTimeVar2 * shadowTimeVar2; + float vlTime = min(abs(SdotU) - 0.05, 0.15) / 0.15; +#endif + +//Common Functions// + +//Includes// +#include "/lib/atmospherics/fog/waterFog.glsl" +#include "/lib/atmospherics/fog/caveFactor.glsl" + +#ifdef BLOOM_FOG_COMPOSITE + #include "/lib/atmospherics/fog/bloomFog.glsl" +#endif + +#ifdef LIGHTSHAFTS_ACTIVE + #ifdef END + #include "/lib/atmospherics/enderBeams.glsl" + #endif + #include "/lib/atmospherics/volumetricLight.glsl" +#endif + +#if WATER_MAT_QUALITY >= 3 || defined NETHER_STORM || defined COLORED_LIGHT_FOG + #include "/lib/util/spaceConversion.glsl" +#endif + +#if WATER_MAT_QUALITY >= 3 + #include "/lib/materials/materialMethods/refraction.glsl" +#endif + +#ifdef NETHER_STORM + #include "/lib/atmospherics/netherStorm.glsl" +#endif + +#ifdef ATM_COLOR_MULTS + #include "/lib/colors/colorMultipliers.glsl" +#endif +#ifdef MOON_PHASE_INF_ATMOSPHERE + #include "/lib/colors/moonPhaseInfluence.glsl" +#endif + +#if RAINBOWS > 0 && defined OVERWORLD + #include "/lib/atmospherics/rainbow.glsl" +#endif + +#ifdef COLORED_LIGHT_FOG + #include "/lib/misc/voxelization.glsl" + #include "/lib/atmospherics/fog/coloredLightFog.glsl" +#endif + +//Program// +void main() { + vec3 color = texelFetch(colortex0, texelCoord, 0).rgb; + float z0 = texelFetch(depthtex0, texelCoord, 0).r; + float z1 = texelFetch(depthtex1, texelCoord, 0).r; + + vec4 screenPos = vec4(texCoord, z0, 1.0); + vec4 viewPos = gbufferProjectionInverse * (screenPos * 2.0 - 1.0); + viewPos /= viewPos.w; + float lViewPos = length(viewPos.xyz); + + #if defined DISTANT_HORIZONS && !defined OVERWORLD + float z0DH = texelFetch(dhDepthTex, texelCoord, 0).r; + vec4 screenPosDH = vec4(texCoord, z0DH, 1.0); + vec4 viewPosDH = dhProjectionInverse * (screenPosDH * 2.0 - 1.0); + viewPosDH /= viewPosDH.w; + lViewPos = min(lViewPos, length(viewPosDH.xyz)); + #endif + + float dither = texture2D(noisetex, texCoord * view / 128.0).b; + #ifdef TAA + dither = fract(dither + goldenRatio * mod(float(frameCounter), 3600.0)); + #endif + + /* TM5723: The "1.0 - translucentMult" trick is done because of the default color attachment + value being vec3(0.0). This makes it vec3(1.0) to avoid issues especially on improved glass */ + vec3 translucentMult = 1.0 - texelFetch(colortex3, texelCoord, 0).rgb; //TM5723 + vec4 volumetricEffect = vec4(0.0); + + #if WATER_MAT_QUALITY >= 3 + DoRefraction(color, z0, z1, viewPos.xyz, lViewPos); + #endif + + vec4 screenPos1 = vec4(texCoord, z1, 1.0); + vec4 viewPos1 = gbufferProjectionInverse * (screenPos1 * 2.0 - 1.0); + viewPos1 /= viewPos1.w; + float lViewPos1 = length(viewPos1.xyz); + + #if defined DISTANT_HORIZONS && !defined OVERWORLD + float z1DH = texelFetch(dhDepthTex1, texelCoord, 0).r; + vec4 screenPos1DH = vec4(texCoord, z1DH, 1.0); + vec4 viewPos1DH = dhProjectionInverse * (screenPos1DH * 2.0 - 1.0); + viewPos1DH /= viewPos1DH.w; + lViewPos1 = min(lViewPos1, length(viewPos1DH.xyz)); + #endif + + #if defined LIGHTSHAFTS_ACTIVE || RAINBOWS > 0 && defined OVERWORLD + vec3 nViewPos = normalize(viewPos1.xyz); + float VdotL = dot(nViewPos, lightVec); + #endif + + #if defined NETHER_STORM || defined COLORED_LIGHT_FOG + vec3 playerPos = ViewToPlayer(viewPos1.xyz); + vec3 nPlayerPos = normalize(playerPos); + #endif + + #if RAINBOWS > 0 && defined OVERWORLD + if (isEyeInWater == 0) color += GetRainbow(translucentMult, z0, z1, lViewPos, lViewPos1, VdotL, dither); + #endif + + #ifdef LIGHTSHAFTS_ACTIVE + float vlFactorM = vlFactor; + float VdotU = dot(nViewPos, upVec); + + volumetricEffect = GetVolumetricLight(color, vlFactorM, translucentMult, lViewPos, lViewPos1, nViewPos, VdotL, VdotU, texCoord, z0, z1, dither); + #endif + + #ifdef NETHER_STORM + volumetricEffect = GetNetherStorm(color, translucentMult, nPlayerPos, playerPos, lViewPos, lViewPos1, dither); + #endif + + #ifdef ATM_COLOR_MULTS + volumetricEffect.rgb *= GetAtmColorMult(); + #endif + #ifdef MOON_PHASE_INF_ATMOSPHERE + volumetricEffect.rgb *= moonPhaseInfluence; + #endif + + #ifdef NETHER_STORM + color = mix(color, volumetricEffect.rgb, volumetricEffect.a); + #endif + + #ifdef COLORED_LIGHT_FOG + vec3 lightFog = GetColoredLightFog(nPlayerPos, translucentMult, lViewPos, lViewPos1, dither); + float lightFogMult = COLORED_LIGHT_FOG_I; + //if (heldItemId == 40000 && heldItemId2 != 40000) lightFogMult = 0.0; // Hold spider eye to disable light fog + + #ifdef OVERWORLD + lightFogMult *= 0.2 + 0.6 * mix(1.0, 1.0 - sunFactor * invRainFactor, eyeBrightnessM); + #endif + + color /= 1.0 + pow2(GetLuminance(lightFog)) * lightFogMult * 2.0; + color += lightFog * lightFogMult * 0.5; + #endif + + if (isEyeInWater == 1) { + if (z0 == 1.0) color.rgb = waterFogColor; + + vec3 underwaterMult = vec3(0.80, 0.87, 0.97); + color.rgb *= underwaterMult * 0.85; + volumetricEffect.rgb *= pow2(underwaterMult * 0.71); + } else { + if (isEyeInWater == 2) { + if (z1 == 1.0) color.rgb = fogColor * 5.0; + + volumetricEffect.rgb *= 0.0; + } + } + + color = pow(color, vec3(2.2)); + + #ifdef LIGHTSHAFTS_ACTIVE + #ifdef END + volumetricEffect.rgb *= volumetricEffect.rgb; + #endif + + color += volumetricEffect.rgb; + #endif + + #ifdef BLOOM_FOG_COMPOSITE + color *= GetBloomFog(lViewPos); // Reminder: Bloom Fog can move between composite1-2-3 + #endif + + /* DRAWBUFFERS:0 */ + gl_FragData[0] = vec4(color, 1.0); + + // supposed to be #if defined LIGHTSHAFTS_ACTIVE && (LIGHTSHAFT_BEHAVIOUR == 1 && SHADOW_QUALITY >= 1 || defined END) + #if LIGHTSHAFT_QUALI_DEFINE > 0 && LIGHTSHAFT_BEHAVIOUR == 1 && SHADOW_QUALITY >= 1 && defined OVERWORLD || defined END + #if LENSFLARE_MODE > 0 || defined ENTITY_TAA_NOISY_CLOUD_FIX + if (viewWidth + viewHeight - gl_FragCoord.x - gl_FragCoord.y > 1.5) + vlFactorM = texelFetch(colortex4, texelCoord, 0).r; + #endif + + /* DRAWBUFFERS:04 */ + gl_FragData[1] = vec4(vlFactorM, 0.0, 0.0, 1.0); + #endif +} + +#endif + +//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader////////// +#ifdef VERTEX_SHADER + +noperspective out vec2 texCoord; + +flat out vec3 upVec, sunVec; + +#ifdef LIGHTSHAFTS_ACTIVE + flat out float vlFactor; +#endif + +//Attributes// + +//Common Variables// + +//Common Functions// + +//Includes// + +//Program// +void main() { + gl_Position = ftransform(); + + texCoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + + upVec = normalize(gbufferModelView[1].xyz); + sunVec = GetSunVector(); + + #ifdef LIGHTSHAFTS_ACTIVE + #if LIGHTSHAFT_BEHAVIOUR == 1 && SHADOW_QUALITY >= 1 || defined END + vlFactor = texelFetch(colortex4, ivec2(viewWidth-1, viewHeight-1), 0).r; + #else + #if LIGHTSHAFT_BEHAVIOUR == 2 + vlFactor = 0.0; + #elif LIGHTSHAFT_BEHAVIOUR == 3 + vlFactor = 1.0; + #endif + #endif + #endif +} + +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/composite2.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/composite2.glsl new file mode 100644 index 0000000..5bd9bd7 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/composite2.glsl @@ -0,0 +1,141 @@ +///////////////////////////////////// +// Complementary Shaders by EminGT // +///////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader////////// +#ifdef FRAGMENT_SHADER + +#ifdef MOTION_BLURRING + noperspective in vec2 texCoord; + + #ifdef BLOOM_FOG_COMPOSITE2 + flat in vec3 upVec, sunVec; + #endif +#endif + +//Pipeline Constants// + +//Common Variables// +#if defined MOTION_BLURRING && defined BLOOM_FOG_COMPOSITE2 + float SdotU = dot(sunVec, upVec); + float sunFactor = SdotU < 0.0 ? clamp(SdotU + 0.375, 0.0, 0.75) / 0.75 : clamp(SdotU + 0.03125, 0.0, 0.0625) / 0.0625; +#endif + +//Common Functions// +#ifdef MOTION_BLURRING + vec3 MotionBlur(vec3 color, float z, float dither) { + if (z > 0.56) { + float mbwg = 0.0; + vec2 doublePixel = 2.0 / vec2(viewWidth, viewHeight); + vec3 mblur = vec3(0.0); + + vec4 currentPosition = vec4(texCoord, z, 1.0) * 2.0 - 1.0; + + vec4 viewPos = gbufferProjectionInverse * currentPosition; + viewPos = gbufferModelViewInverse * viewPos; + viewPos /= viewPos.w; + + vec3 cameraOffset = cameraPosition - previousCameraPosition; + + vec4 previousPosition = viewPos + vec4(cameraOffset, 0.0); + previousPosition = gbufferPreviousModelView * previousPosition; + previousPosition = gbufferPreviousProjection * previousPosition; + previousPosition /= previousPosition.w; + + vec2 velocity = (currentPosition - previousPosition).xy; + velocity = velocity / (1.0 + length(velocity)) * MOTION_BLURRING_STRENGTH * 0.02; + + vec2 coord = texCoord - velocity * (3.5 + dither); + for (int i = 0; i < 9; i++, coord += velocity) { + vec2 coordb = clamp(coord, doublePixel, 1.0 - doublePixel); + mblur += texture2DLod(colortex0, coordb, 0).rgb; + mbwg += 1.0; + } + mblur /= mbwg; + + return mblur; + } else return color; + } +#endif + +//Includes// +#ifdef MOTION_BLURRING + #include "/lib/util/dither.glsl" + + #ifdef BLOOM_FOG_COMPOSITE2 + #include "/lib/atmospherics/fog/bloomFog.glsl" + #endif +#endif + +//Program// +void main() { + vec3 color = texelFetch(colortex0, texelCoord, 0).rgb; + + #ifdef MOTION_BLURRING + float z = texture2D(depthtex1, texCoord).x; + float dither = Bayer64(gl_FragCoord.xy); + + color = MotionBlur(color, z, dither); + + #ifdef BLOOM_FOG_COMPOSITE2 + float z0 = texelFetch(depthtex0, texelCoord, 0).r; + vec4 screenPos = vec4(texCoord, z0, 1.0); + vec4 viewPos = gbufferProjectionInverse * (screenPos * 2.0 - 1.0); + viewPos /= viewPos.w; + float lViewPos = length(viewPos.xyz); + + #if defined DISTANT_HORIZONS && defined NETHER + float z0DH = texelFetch(dhDepthTex, texelCoord, 0).r; + vec4 screenPosDH = vec4(texCoord, z0DH, 1.0); + vec4 viewPosDH = dhProjectionInverse * (screenPosDH * 2.0 - 1.0); + viewPosDH /= viewPosDH.w; + lViewPos = min(lViewPos, length(viewPosDH.xyz)); + #endif + + color *= GetBloomFog(lViewPos); // Reminder: Bloom Fog can move between composite1-2-3 + #endif + #endif + + /* DRAWBUFFERS:0 */ + gl_FragData[0] = vec4(color, 1.0); +} + +#endif + +//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader////////// +#ifdef VERTEX_SHADER + +#ifdef MOTION_BLURRING + noperspective out vec2 texCoord; + + #ifdef BLOOM_FOG_COMPOSITE2 + flat out vec3 upVec, sunVec; + #endif +#endif + +//Attributes// + +//Common Variables// + +//Common Functions// + +//Includes// + +//Program// +void main() { + gl_Position = ftransform(); + + #ifdef MOTION_BLURRING + texCoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + + #ifdef BLOOM_FOG_COMPOSITE2 + upVec = normalize(gbufferModelView[1].xyz); + sunVec = GetSunVector(); + #endif + #endif +} + +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/composite3.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/composite3.glsl new file mode 100644 index 0000000..8659e3e --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/composite3.glsl @@ -0,0 +1,188 @@ +///////////////////////////////////// +// Complementary Shaders by EminGT // +///////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader////////// +#ifdef FRAGMENT_SHADER + +#if WORLD_BLUR > 0 + noperspective in vec2 texCoord; + + flat in vec3 upVec, sunVec; +#endif + +//Pipeline Constants// +#if WORLD_BLUR > 0 + const bool colortex0MipmapEnabled = true; +#endif + +//Common Variables// +#if WORLD_BLUR > 0 + #if WORLD_BLUR == 2 && WB_DOF_FOCUS >= 0 + #if WB_DOF_FOCUS == 0 + uniform float centerDepthSmooth; + #else + float centerDepthSmooth = (far * (WB_DOF_FOCUS - near)) / (WB_DOF_FOCUS * (far - near)); + #endif + #endif +#endif + +#if WORLD_BLUR > 0 + float SdotU = dot(sunVec, upVec); + float sunFactor = SdotU < 0.0 ? clamp(SdotU + 0.375, 0.0, 0.75) / 0.75 : clamp(SdotU + 0.03125, 0.0, 0.0625) / 0.0625; + + vec2 dofOffsets[18] = vec2[18]( + vec2( 0.0 , 0.25 ), + vec2(-0.2165 , 0.125 ), + vec2(-0.2165 , -0.125 ), + vec2( 0 , -0.25 ), + vec2( 0.2165 , -0.125 ), + vec2( 0.2165 , 0.125 ), + vec2( 0 , 0.5 ), + vec2(-0.25 , 0.433 ), + vec2(-0.433 , 0.25 ), + vec2(-0.5 , 0 ), + vec2(-0.433 , -0.25 ), + vec2(-0.25 , -0.433 ), + vec2( 0 , -0.5 ), + vec2( 0.25 , -0.433 ), + vec2( 0.433 , -0.2 ), + vec2( 0.5 , 0 ), + vec2( 0.433 , 0.25 ), + vec2( 0.25 , 0.433 ) + ); +#endif + +//Common Functions// +#if WORLD_BLUR > 0 + void DoWorldBlur(inout vec3 color, float z1, float lViewPos0) { + if (z1 < 0.56) return; + vec3 dof = vec3(0.0); + vec2 dofScale = vec2(1.0, aspectRatio); + + #if WORLD_BLUR == 1 // Distance Blur + #ifdef OVERWORLD + float dbMult; + if (isEyeInWater == 0) { + dbMult = mix(WB_DB_NIGHT_I, WB_DB_DAY_I, sunFactor * eyeBrightnessM); + dbMult = mix(dbMult, WB_DB_RAIN_I, rainFactor * eyeBrightnessM); + } else dbMult = WB_DB_WATER_I; + #elif defined NETHER + float dbMult = WB_DB_NETHER_I; + #elif defined END + float dbMult = WB_DB_END_I; + #endif + float coc = clamp(lViewPos0 * 0.001, 0.0, 0.1) * dbMult * 0.03; + #elif WORLD_BLUR == 2 // Depth Of Field + #if WB_DOF_FOCUS >= 0 + float coc = max(abs(z1 - centerDepthSmooth) * 0.125 * WB_DOF_I - 0.0001, 0.0); + #elif WB_DOF_FOCUS == -1 + float coc = clamp(abs(lViewPos0 * 0.005 - pow2(vsBrightness)), 0.0, 0.1) * WB_DOF_I * 0.03; + #endif + #endif + coc = coc / sqrt(coc * coc + 0.1); + + #ifdef WB_FOV_SCALED + coc *= gbufferProjection[1][1] * 0.8; + #endif + #ifdef WB_CHROMATIC + float midDistX = texCoord.x - 0.5; + float midDistY = texCoord.y - 0.5; + vec2 chromaticScale = vec2(midDistX, midDistY); + chromaticScale = sign(chromaticScale) * sqrt(abs(chromaticScale)); + chromaticScale *= vec2(1.0, viewHeight / viewWidth); + vec2 aberration = (15.0 / vec2(viewWidth, viewHeight)) * chromaticScale * coc; + #endif + #ifdef WB_ANAMORPHIC + dofScale *= vec2(0.5, 1.5); + #endif + + if (coc * 0.5 > 1.0 / max(viewWidth, viewHeight)) { + for (int i = 0; i < 18; i++) { + vec2 offset = dofOffsets[i] * coc * 0.0085 * dofScale; + float lod = log2(viewHeight * aspectRatio * coc * 0.75 / 320.0); + #ifndef WB_CHROMATIC + dof += texture2DLod(colortex0, texCoord + offset, lod).rgb; + #else + dof += vec3(texture2DLod(colortex0, texCoord + offset + aberration, lod).r, + texture2DLod(colortex0, texCoord + offset , lod).g, + texture2DLod(colortex0, texCoord + offset - aberration, lod).b); + #endif + } + dof /= 18.0; + color = dof; + } + } +#endif + +//Includes// +#if WORLD_BLUR > 0 && defined BLOOM_FOG_COMPOSITE3 + #include "/lib/atmospherics/fog/bloomFog.glsl" +#endif + +//Program// +void main() { + vec3 color = texelFetch(colortex0, texelCoord, 0).rgb; + + #if WORLD_BLUR > 0 + float z1 = texelFetch(depthtex1, texelCoord, 0).r; + float z0 = texelFetch(depthtex0, texelCoord, 0).r; + + vec4 screenPos = vec4(texCoord, z0, 1.0); + vec4 viewPos = gbufferProjectionInverse * (screenPos * 2.0 - 1.0); + viewPos /= viewPos.w; + float lViewPos = length(viewPos.xyz); + + #if defined DISTANT_HORIZONS && defined NETHER + float z0DH = texelFetch(dhDepthTex, texelCoord, 0).r; + vec4 screenPosDH = vec4(texCoord, z0DH, 1.0); + vec4 viewPosDH = dhProjectionInverse * (screenPosDH * 2.0 - 1.0); + viewPosDH /= viewPosDH.w; + lViewPos = min(lViewPos, length(viewPosDH.xyz)); + #endif + + DoWorldBlur(color, z1, lViewPos); + + #ifdef BLOOM_FOG_COMPOSITE3 + color *= GetBloomFog(lViewPos); // Reminder: Bloom Fog can move between composite1-2-3 + #endif + #endif + + /* DRAWBUFFERS:0 */ + gl_FragData[0] = vec4(color, 1.0); +} + +#endif + +//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader////////// +#ifdef VERTEX_SHADER + +#if WORLD_BLUR > 0 + noperspective out vec2 texCoord; + + flat out vec3 upVec, sunVec; +#endif + +//Attributes// + +//Common Variables// + +//Common Functions// + +//Includes// + +//Program// +void main() { + gl_Position = ftransform(); + + #if WORLD_BLUR > 0 + texCoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + upVec = normalize(gbufferModelView[1].xyz); + sunVec = GetSunVector(); + #endif +} + +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/composite4.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/composite4.glsl new file mode 100644 index 0000000..799674e --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/composite4.glsl @@ -0,0 +1,96 @@ +///////////////////////////////////// +// Complementary Shaders by EminGT // +///////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//Varyings// +varying vec2 texCoord; + +//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader////////// +#ifdef FRAGMENT_SHADER + +//Pipeline Constants// +const bool colortex0MipmapEnabled = true; + +//Common Variables// +float weight[7] = float[7](1.0, 6.0, 15.0, 20.0, 15.0, 6.0, 1.0); + +vec2 view = vec2(viewWidth, viewHeight); + +//Common Functions// +vec3 BloomTile(float lod, vec2 offset, vec2 scaledCoord) { + vec3 bloom = vec3(0.0); + float scale = exp2(lod); + vec2 coord = (scaledCoord - offset) * scale; + float padding = 0.5 + 0.005 * scale; + + if (abs(coord.x - 0.5) < padding && abs(coord.y - 0.5) < padding) { + for (int i = -3; i <= 3; i++) { + for (int j = -3; j <= 3; j++) { + float wg = weight[i + 3] * weight[j + 3]; + vec2 pixelOffset = vec2(i, j) / view; + vec2 bloomCoord = (scaledCoord - offset + pixelOffset) * scale; + bloom += texture2D(colortex0, bloomCoord).rgb * wg; + } + } + bloom /= 4096.0; + } + + return pow(bloom / 128.0, vec3(0.25)); +} + +//Includes// + +//Program// +void main() { + vec3 blur = vec3(0.0); + + #ifdef BLOOM + vec2 scaledCoord = texCoord * max(vec2(viewWidth, viewHeight) / vec2(1920.0, 1080.0), vec2(1.0)); + + #if defined OVERWORLD || defined END + blur += BloomTile(2.0, vec2(0.0 , 0.0 ), scaledCoord); + blur += BloomTile(3.0, vec2(0.0 , 0.26 ), scaledCoord); + blur += BloomTile(4.0, vec2(0.135 , 0.26 ), scaledCoord); + blur += BloomTile(5.0, vec2(0.2075 , 0.26 ), scaledCoord) * 0.8; + blur += BloomTile(6.0, vec2(0.135 , 0.3325), scaledCoord) * 0.8; + blur += BloomTile(7.0, vec2(0.160625 , 0.3325), scaledCoord) * 0.6; + blur += BloomTile(8.0, vec2(0.1784375, 0.3325), scaledCoord) * 0.4; + #else + blur += BloomTile(2.0, vec2(0.0 , 0.0 ), scaledCoord); + blur += BloomTile(3.0, vec2(0.0 , 0.26 ), scaledCoord); + blur += BloomTile(4.0, vec2(0.135 , 0.26 ), scaledCoord); + blur += BloomTile(5.0, vec2(0.2075 , 0.26 ), scaledCoord); + blur += BloomTile(6.0, vec2(0.135 , 0.3325), scaledCoord); + blur += BloomTile(7.0, vec2(0.160625 , 0.3325), scaledCoord); + blur += BloomTile(8.0, vec2(0.1784375, 0.3325), scaledCoord) * 0.6; + #endif + #endif + + /* DRAWBUFFERS:3 */ + gl_FragData[0] = vec4(blur, 1.0); +} + +#endif + +//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader////////// +#ifdef VERTEX_SHADER + +//Attributes// + +//Common Variables// + +//Common Functions// + +//Includes// + +//Program// +void main() { + texCoord = gl_MultiTexCoord0.xy; + + gl_Position = ftransform(); +} + +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/composite5.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/composite5.glsl new file mode 100644 index 0000000..e9ab167 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/composite5.glsl @@ -0,0 +1,222 @@ +///////////////////////////////////// +// Complementary Shaders by EminGT // +///////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader////////// +#ifdef FRAGMENT_SHADER + +noperspective in vec2 texCoord; + +#if defined BLOOM_FOG || LENSFLARE_MODE > 0 && defined OVERWORLD + flat in vec3 upVec, sunVec; +#endif + +//Pipeline Constants// + +//Common Variables// +float pw = 1.0 / viewWidth; +float ph = 1.0 / viewHeight; + +vec2 view = vec2(viewWidth, viewHeight); + +#if defined BLOOM_FOG || LENSFLARE_MODE > 0 && defined OVERWORLD + float SdotU = dot(sunVec, upVec); + float sunFactor = SdotU < 0.0 ? clamp(SdotU + 0.375, 0.0, 0.75) / 0.75 : clamp(SdotU + 0.03125, 0.0, 0.0625) / 0.0625; +#endif + +//Common Functions// +void DoBSLTonemap(inout vec3 color) { + color = T_EXPOSURE * color; + color = color / pow(pow(color, vec3(TM_WHITE_CURVE)) + 1.0, vec3(1.0 / TM_WHITE_CURVE)); + color = pow(color, mix(vec3(T_LOWER_CURVE), vec3(T_UPPER_CURVE), sqrt(color))); + + color = pow(color, vec3(1.0 / 2.2)); +} + +void DoBSLColorSaturation(inout vec3 color) { + float grayVibrance = (color.r + color.g + color.b) / 3.0; + float graySaturation = grayVibrance; + if (T_SATURATION < 1.00) graySaturation = dot(color, vec3(0.299, 0.587, 0.114)); + + float mn = min(color.r, min(color.g, color.b)); + float mx = max(color.r, max(color.g, color.b)); + float sat = (1.0 - (mx - mn)) * (1.0 - mx) * grayVibrance * 5.0; + vec3 lightness = vec3((mn + mx) * 0.5); + + color = mix(color, mix(color, lightness, 1.0 - T_VIBRANCE), sat); + color = mix(color, lightness, (1.0 - lightness) * (2.0 - T_VIBRANCE) / 2.0 * abs(T_VIBRANCE - 1.0)); + color = color * T_SATURATION - graySaturation * (T_SATURATION - 1.0); +} + +#ifdef BLOOM + vec2 rescale = max(vec2(viewWidth, viewHeight) / vec2(1920.0, 1080.0), vec2(1.0)); + vec3 GetBloomTile(float lod, vec2 coord, vec2 offset) { + float scale = exp2(lod); + vec2 bloomCoord = coord / scale + offset; + bloomCoord = clamp(bloomCoord, offset, 1.0 / scale + offset); + + vec3 bloom = texture2D(colortex3, bloomCoord / rescale).rgb; + bloom *= bloom; + bloom *= bloom; + return bloom * 128.0; + } + + void DoBloom(inout vec3 color, vec2 coord, float dither, float lViewPos) { + vec3 blur1 = GetBloomTile(2.0, coord, vec2(0.0 , 0.0 )); + vec3 blur2 = GetBloomTile(3.0, coord, vec2(0.0 , 0.26 )); + vec3 blur3 = GetBloomTile(4.0, coord, vec2(0.135 , 0.26 )); + vec3 blur4 = GetBloomTile(5.0, coord, vec2(0.2075 , 0.26 )); + vec3 blur5 = GetBloomTile(6.0, coord, vec2(0.135 , 0.3325)); + vec3 blur6 = GetBloomTile(7.0, coord, vec2(0.160625 , 0.3325)); + vec3 blur7 = GetBloomTile(8.0, coord, vec2(0.1784375, 0.3325)); + + vec3 blur = (blur1 + blur2 + blur3 + blur4 + blur5 + blur6 + blur7) * 0.14; + + float bloomStrength = BLOOM_STRENGTH + 0.2 * darknessFactor; + + #if defined BLOOM_FOG && defined NETHER && defined BORDER_FOG + float farM = min(renderDistance, NETHER_VIEW_LIMIT); // consistency9023HFUE85JG + float netherBloom = lViewPos / clamp(farM, 96.0, 256.0); + netherBloom *= netherBloom; + netherBloom *= netherBloom; + netherBloom = 1.0 - exp(-8.0 * netherBloom); + netherBloom *= 1.0 - maxBlindnessDarkness; + bloomStrength = mix(bloomStrength * 0.7, bloomStrength * 1.8, netherBloom); + #endif + + color = mix(color, blur, bloomStrength); + //color += blur * bloomStrength * (ditherFactor.x + ditherFactor.y); + } +#endif + +//Includes// +#ifdef BLOOM_FOG + #include "/lib/atmospherics/fog/bloomFog.glsl" +#endif + +#ifdef BLOOM + #include "/lib/util/dither.glsl" +#endif + +#if LENSFLARE_MODE > 0 && defined OVERWORLD + #include "/lib/misc/lensFlare.glsl" +#endif + +//Program// +void main() { + vec3 color = texture2D(colortex0, texCoord).rgb; + + #if defined BLOOM_FOG || LENSFLARE_MODE > 0 && defined OVERWORLD + float z0 = texture2D(depthtex0, texCoord).r; + + vec4 screenPos = vec4(texCoord, z0, 1.0); + vec4 viewPos = gbufferProjectionInverse * (screenPos * 2.0 - 1.0); + viewPos /= viewPos.w; + float lViewPos = length(viewPos.xyz); + + #if defined DISTANT_HORIZONS && defined NETHER + float z0DH = texelFetch(dhDepthTex, texelCoord, 0).r; + vec4 screenPosDH = vec4(texCoord, z0DH, 1.0); + vec4 viewPosDH = dhProjectionInverse * (screenPosDH * 2.0 - 1.0); + viewPosDH /= viewPosDH.w; + lViewPos = min(lViewPos, length(viewPosDH.xyz)); + #endif + #else + float lViewPos = 0.0; + #endif + + float dither = texture2D(noisetex, texCoord * view / 128.0).b; + #ifdef TAA + dither = fract(dither + goldenRatio * mod(float(frameCounter), 3600.0)); + #endif + + #ifdef BLOOM_FOG + color /= GetBloomFog(lViewPos); + #endif + + #ifdef BLOOM + DoBloom(color, texCoord, dither, lViewPos); + #endif + + #ifdef COLORGRADING + color = + pow(color.r, GR_RC) * vec3(GR_RR, GR_RG, GR_RB) + + pow(color.g, GR_GC) * vec3(GR_GR, GR_GG, GR_GB) + + pow(color.b, GR_BC) * vec3(GR_BR, GR_BG, GR_BB); + color *= 0.01; + #endif + + DoBSLTonemap(color); + + #if defined GREEN_SCREEN_LIME || SELECT_OUTLINE == 4 + int materialMaskInt = int(texelFetch(colortex6, texelCoord, 0).g * 255.1); + #endif + + #ifdef GREEN_SCREEN_LIME + if (materialMaskInt == 240) { // Green Screen Lime Blocks + color = vec3(0.0, 1.0, 0.0); + } + #endif + + #if SELECT_OUTLINE == 4 + if (materialMaskInt == 252) { // Versatile Selection Outline + float colorMF = 1.0 - dot(color, vec3(0.25, 0.45, 0.1)); + colorMF = smoothstep1(smoothstep1(smoothstep1(smoothstep1(smoothstep1(colorMF))))); + color = mix(color, 3.0 * (color + 0.2) * vec3(colorMF * SELECT_OUTLINE_I), 0.3); + } + #endif + + #if LENSFLARE_MODE > 0 && defined OVERWORLD + DoLensFlare(color, viewPos.xyz, dither); + #endif + + DoBSLColorSaturation(color); + + #ifdef VIGNETTE_R + vec2 texCoordMin = texCoord.xy - 0.5; + float vignette = 1.0 - dot(texCoordMin, texCoordMin) * (1.0 - GetLuminance(color)); + color *= vignette; + #endif + + float filmGrain = dither; + color += vec3((filmGrain - 0.25) / 128.0); + + /* DRAWBUFFERS:3 */ + gl_FragData[0] = vec4(color, 1.0); +} + +#endif + +//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader////////// +#ifdef VERTEX_SHADER + +noperspective out vec2 texCoord; + +#if defined BLOOM_FOG || LENSFLARE_MODE > 0 && defined OVERWORLD + flat out vec3 upVec, sunVec; +#endif + +//Attributes// + +//Common Variables// + +//Common Functions// + +//Includes// + +//Program// +void main() { + gl_Position = ftransform(); + + texCoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + + #if defined BLOOM_FOG || LENSFLARE_MODE > 0 && defined OVERWORLD + upVec = normalize(gbufferModelView[1].xyz); + sunVec = GetSunVector(); + #endif +} + +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/composite6.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/composite6.glsl new file mode 100644 index 0000000..c374d8d --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/composite6.glsl @@ -0,0 +1,79 @@ +///////////////////////////////////// +// Complementary Shaders by EminGT // +///////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader////////// +#ifdef FRAGMENT_SHADER + +noperspective in vec2 texCoord; + +//Pipeline Constants// +#include "/lib/pipelineSettings.glsl" + +const bool colortex3MipmapEnabled = true; + +//Common Variables// +vec2 view = vec2(viewWidth, viewHeight); + +//Common Functions// +float GetLinearDepth(float depth) { + return (2.0 * near) / (far + near - depth * (far - near)); +} + +//Includes// +#ifdef TAA + #include "/lib/antialiasing/taa.glsl" +#endif + +//Program// +void main() { + vec3 color = texelFetch(colortex3, texelCoord, 0).rgb; + + vec3 temp = vec3(0.0); + float z1 = 0.0; + + #if defined TAA || defined TEMPORAL_FILTER + z1 = texelFetch(depthtex1, texelCoord, 0).r; + #endif + + #ifdef TAA + DoTAA(color, temp, z1); + #endif + + /* DRAWBUFFERS:32 */ + gl_FragData[0] = vec4(color, 1.0); + gl_FragData[1] = vec4(temp, 1.0); + + // Supposed to be #ifdef TEMPORAL_FILTER but Optifine bad + #if BLOCK_REFLECT_QUALITY >= 3 && RP_MODE >= 1 + /* DRAWBUFFERS:321 */ + gl_FragData[2] = vec4(z1, 1.0, 1.0, 1.0); + #endif +} + +#endif + +//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader////////// +#ifdef VERTEX_SHADER + +noperspective out vec2 texCoord; + +//Attributes// + +//Common Variables// + +//Common Functions// + +//Includes// + +//Program// +void main() { + gl_Position = ftransform(); + + texCoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; +} + +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/composite7.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/composite7.glsl new file mode 100644 index 0000000..c16c5f4 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/composite7.glsl @@ -0,0 +1,58 @@ +///////////////////////////////////// +// Complementary Shaders by EminGT // +///////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader////////// +#ifdef FRAGMENT_SHADER + +noperspective in vec2 texCoord; + +//Pipeline Constants// + +//Common Variables// + +//Common Functions// + +//Includes// +#if FXAA_DEFINE == 1 + #include "/lib/antialiasing/fxaa.glsl" +#endif + +//Program// +void main() { + vec3 color = texelFetch(colortex3, texelCoord, 0).rgb; + + #if FXAA_DEFINE == 1 + FXAA311(color); + #endif + + /* DRAWBUFFERS:3 */ + gl_FragData[0] = vec4(color, 1.0); +} + +#endif + +//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader////////// +#ifdef VERTEX_SHADER + +noperspective out vec2 texCoord; + +//Attributes// + +//Common Variables// + +//Common Functions// + +//Includes// + +//Program// +void main() { + gl_Position = ftransform(); + + texCoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; +} + +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/deferred1.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/deferred1.glsl new file mode 100644 index 0000000..ff37b95 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/deferred1.glsl @@ -0,0 +1,548 @@ +///////////////////////////////////// +// Complementary Shaders by EminGT // +///////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader////////// +#ifdef FRAGMENT_SHADER + +noperspective in vec2 texCoord; + +flat in vec3 upVec, sunVec; + +#if defined LIGHTSHAFTS_ACTIVE && (LIGHTSHAFT_BEHAVIOUR == 1 && SHADOW_QUALITY >= 1 || defined END) + flat in float vlFactor; +#endif + +//Pipeline Constants// +const bool colortex0MipmapEnabled = true; + +//Common Variables// +float SdotU = dot(sunVec, upVec); +float sunFactor = SdotU < 0.0 ? clamp(SdotU + 0.375, 0.0, 0.75) / 0.75 : clamp(SdotU + 0.03125, 0.0, 0.0625) / 0.0625; +float sunVisibility = clamp(SdotU + 0.0625, 0.0, 0.125) / 0.125; +float sunVisibility2 = sunVisibility * sunVisibility; +float shadowTimeVar1 = abs(sunVisibility - 0.5) * 2.0; +float shadowTimeVar2 = shadowTimeVar1 * shadowTimeVar1; +float shadowTime = shadowTimeVar2 * shadowTimeVar2; +float farMinusNear = far - near; + +vec2 view = vec2(viewWidth, viewHeight); + +#ifdef OVERWORLD + vec3 lightVec = sunVec * ((timeAngle < 0.5325 || timeAngle > 0.9675) ? 1.0 : -1.0); +#else + vec3 lightVec = sunVec; +#endif + +#if defined LIGHTSHAFTS_ACTIVE && (LIGHTSHAFT_BEHAVIOUR == 1 && SHADOW_QUALITY >= 1 || defined END) +#else + float vlFactor = 0.0; +#endif + +//Common Functions// +float GetLinearDepth(float depth) { + return (2.0 * near) / (far + near - depth * farMinusNear); +} + +#if SSAO_QUALI > 0 + vec2 OffsetDist(float x, int s) { + float n = fract(x * 1.414) * 3.1415; + return pow2(vec2(cos(n), sin(n)) * x / s); + } + + float DoAmbientOcclusion(float z0, float linearZ0, float dither) { + if (z0 < 0.56) return 1.0; + float ao = 0.0; + + #if SSAO_QUALI == 2 + int samples = 4; + float scm = 0.4; + #elif SSAO_QUALI == 3 + int samples = 12; + float scm = 0.6; + #endif + + #define SSAO_I_FACTOR 0.004 + + float sampleDepth = 0.0, angle = 0.0, dist = 0.0; + float fovScale = gbufferProjection[1][1]; + float distScale = max(farMinusNear * linearZ0 + near, 3.0); + vec2 scale = vec2(scm / aspectRatio, scm) * fovScale / distScale; + + for (int i = 1; i <= samples; i++) { + vec2 offset = OffsetDist(i + dither, samples) * scale; + if (i % 2 == 0) offset.y = -offset.y; + + vec2 coord1 = texCoord + offset; + vec2 coord2 = texCoord - offset; + + sampleDepth = GetLinearDepth(texture2D(depthtex0, coord1).r); + float aosample = farMinusNear * (linearZ0 - sampleDepth) * 2.0; + angle = clamp(0.5 - aosample, 0.0, 1.0); + dist = clamp(0.5 * aosample - 1.0, 0.0, 1.0); + + sampleDepth = GetLinearDepth(texture2D(depthtex0, coord2).r); + aosample = farMinusNear * (linearZ0 - sampleDepth) * 2.0; + angle += clamp(0.5 - aosample, 0.0, 1.0); + dist += clamp(0.5 * aosample - 1.0, 0.0, 1.0); + + ao += clamp(angle + dist, 0.0, 1.0); + } + ao /= samples; + + #define SSAO_IM SSAO_I * SSAO_I_FACTOR + return pow(ao, SSAO_IM); + } +#endif + +#ifdef TEMPORAL_FILTER + float GetApproxDistance(float depth) { + return near * far / (far - depth * far); + } + + // Previous frame reprojection from Chocapic13 + vec2 Reprojection(vec3 pos, vec3 cameraOffset) { + pos = pos * 2.0 - 1.0; + + vec4 viewPosPrev = gbufferProjectionInverse * vec4(pos, 1.0); + viewPosPrev /= viewPosPrev.w; + viewPosPrev = gbufferModelViewInverse * viewPosPrev; + + vec4 previousPosition = viewPosPrev + vec4(cameraOffset, 0.0); + previousPosition = gbufferPreviousModelView * previousPosition; + previousPosition = gbufferPreviousProjection * previousPosition; + return previousPosition.xy / previousPosition.w * 0.5 + 0.5; + } + + vec3 FHalfReprojection(vec3 pos) { + pos = pos * 2.0 - 1.0; + + vec4 viewPosPrev = gbufferProjectionInverse * vec4(pos, 1.0); + viewPosPrev /= viewPosPrev.w; + viewPosPrev = gbufferModelViewInverse * viewPosPrev; + + return viewPosPrev.xyz; + } + + vec2 SHalfReprojection(vec3 playerPos, vec3 cameraOffset) { + vec4 proPos = vec4(playerPos + cameraOffset, 1.0); + vec4 previousPosition = gbufferPreviousModelView * proPos; + previousPosition = gbufferPreviousProjection * previousPosition; + return previousPosition.xy / previousPosition.w * 0.5 + 0.5; + } +#endif + +//Includes// +#include "/lib/util/spaceConversion.glsl" +#include "/lib/util/dither.glsl" +#include "/lib/atmospherics/fog/mainFog.glsl" +#include "/lib/colors/skyColors.glsl" + +#if AURORA_STYLE > 0 + #include "/lib/atmospherics/auroraBorealis.glsl" +#endif + +#ifdef NIGHT_NEBULA + #include "/lib/atmospherics/nightNebula.glsl" +#endif + +#ifdef VL_CLOUDS_ACTIVE + #include "/lib/atmospherics/clouds/mainClouds.glsl" +#endif + +#ifdef PBR_REFLECTIONS + #include "/lib/materials/materialMethods/reflections.glsl" +#endif + +#ifdef END + #include "/lib/atmospherics/enderStars.glsl" +#endif + +#ifdef WORLD_OUTLINE + #include "/lib/misc/worldOutline.glsl" +#endif + +#ifdef DARK_OUTLINE + #include "/lib/misc/darkOutline.glsl" +#endif + +#ifdef ATM_COLOR_MULTS + #include "/lib/colors/colorMultipliers.glsl" +#endif +#ifdef MOON_PHASE_INF_ATMOSPHERE + #include "/lib/colors/moonPhaseInfluence.glsl" +#endif + +#ifdef DISTANT_LIGHT_BOKEH + #include "/lib/misc/distantLightBokeh.glsl" +#endif + +//Program// +void main() { + vec3 color = texelFetch(colortex0, texelCoord, 0).rgb; + float z0 = texelFetch(depthtex0, texelCoord, 0).r; + + vec4 screenPos = vec4(texCoord, z0, 1.0); + vec4 viewPos = gbufferProjectionInverse * (screenPos * 2.0 - 1.0); + viewPos /= viewPos.w; + float lViewPos = length(viewPos); + vec3 nViewPos = normalize(viewPos.xyz); + vec3 playerPos = ViewToPlayer(viewPos.xyz); + + float dither = texture2D(noisetex, texCoord * vec2(viewWidth, viewHeight) / 128.0).b; + #if defined TAA || defined TEMPORAL_FILTER + dither = fract(dither + goldenRatio * mod(float(frameCounter), 3600.0)); + #endif + + #ifdef ATM_COLOR_MULTS + atmColorMult = GetAtmColorMult(); + sqrtAtmColorMult = sqrt(atmColorMult); + #endif + + float VdotU = dot(nViewPos, upVec); + float VdotS = dot(nViewPos, sunVec); + float skyFade = 0.0; + vec3 waterRefColor = vec3(0.0); + vec3 auroraBorealis = vec3(0.0); + vec3 nightNebula = vec3(0.0); + + #ifdef TEMPORAL_FILTER + vec4 refToWrite = vec4(0.0); + #endif + + if (z0 < 1.0) { + #ifdef DISTANT_LIGHT_BOKEH + int dlbo = 1; + vec3 dlbColor = color; + dlbColor += texelFetch(colortex0, texelCoord + ivec2( 0, dlbo), 0).rgb; + dlbColor += texelFetch(colortex0, texelCoord + ivec2( 0,-dlbo), 0).rgb; + dlbColor += texelFetch(colortex0, texelCoord + ivec2( dlbo, 0), 0).rgb; + dlbColor += texelFetch(colortex0, texelCoord + ivec2(-dlbo, 0), 0).rgb; + dlbColor = max(color, dlbColor * 0.2); + float dlbMix = GetDistantLightBokehMix(lViewPos); + color = mix(color, dlbColor, dlbMix); + #endif + + #if SSAO_QUALI > 0 || defined WORLD_OUTLINE || defined TEMPORAL_FILTER + float linearZ0 = GetLinearDepth(z0); + #endif + + #if SSAO_QUALI > 0 + float ssao = DoAmbientOcclusion(z0, linearZ0, dither); + #else + float ssao = 1.0; + #endif + + vec3 texture6 = texelFetch(colortex6, texelCoord, 0).rgb; + bool entityOrHand = z0 < 0.56; + int materialMaskInt = int(texture6.g * 255.1); + float intenseFresnel = 0.0; + float smoothnessD = texture6.r; + vec3 reflectColor = vec3(1.0); + + #ifdef IPBR + #include "/lib/materials/materialHandling/deferredMaterials.glsl" + #else + if (materialMaskInt <= 240) { + #ifdef CUSTOM_PBR + #if RP_MODE == 2 // seuspbr + float metalness = materialMaskInt / 240.0; + + intenseFresnel = metalness; + #elif RP_MODE == 3 // labPBR + float metalness = float(materialMaskInt >= 230); + + intenseFresnel = materialMaskInt / 240.0; + #endif + reflectColor = mix(reflectColor, color.rgb / max(color.r + 0.00001, max(color.g, color.b)), metalness); + #endif + } else { + if (materialMaskInt == 254) // No SSAO, No TAA + ssao = 1.0; + } + #endif + + color.rgb *= ssao; + + #ifdef PBR_REFLECTIONS + float skyLightFactor = texture6.b; + vec3 texture5 = texelFetch(colortex5, texelCoord, 0).rgb; + vec3 normalM = mat3(gbufferModelView) * texture5; + + float fresnel = clamp(1.0 + dot(normalM, nViewPos), 0.0, 1.0); + + float fresnelFactor = (1.0 - smoothnessD) * 0.7; + float fresnelM = max(fresnel - fresnelFactor, 0.0) / (1.0 - fresnelFactor); + #ifdef IPBR + fresnelM = mix(pow2(fresnelM), fresnelM * 0.75 + 0.25, intenseFresnel); + #else + fresnelM = mix(pow2(fresnelM), fresnelM * 0.5 + 0.5, intenseFresnel); + #endif + fresnelM = fresnelM * sqrt1(smoothnessD) - dither * 0.001; + + if (fresnelM > 0.0) { + vec2 roughCoord = gl_FragCoord.xy / 128.0; + #ifdef TAA + float noiseMult = 0.3; + #else + float noiseMult = 0.1; + #endif + #ifdef TEMPORAL_FILTER + float blendFactor = 1.0; + float writeFactor = 1.0; + #endif + #if defined CUSTOM_PBR || defined IPBR && defined IS_IRIS + if (entityOrHand) { + noiseMult *= 0.1; + #ifdef TEMPORAL_FILTER + blendFactor = 0.0; + writeFactor = 0.0; + #endif + } + #endif + noiseMult *= pow2(1.0 - smoothnessD); + + vec3 roughNoise = vec3(texture2D(noisetex, roughCoord).r, texture2D(noisetex, roughCoord + 0.1).r, texture2D(noisetex, roughCoord + 0.2).r); + roughNoise = fract(roughNoise + vec3(dither, dither * goldenRatio, dither * pow2(goldenRatio))); + roughNoise = noiseMult * (roughNoise - vec3(0.5)); + + normalM += roughNoise; + + vec4 reflection = GetReflection(normalM, viewPos.xyz, nViewPos, playerPos, lViewPos, z0, + depthtex0, dither, skyLightFactor, fresnel, + smoothnessD, vec3(0.0), vec3(0.0), vec3(0.0), 0.0); + + vec3 colorAdd = reflection.rgb * reflectColor; + //float colorMultInv = (0.75 - intenseFresnel * 0.5) * max(reflection.a, skyLightFactor); + //float colorMultInv = max(reflection.a, skyLightFactor); + float colorMultInv = 1.0; + + vec3 colorP = color; + + #ifdef TEMPORAL_FILTER + vec3 cameraOffset = cameraPosition - previousCameraPosition; + vec2 prvCoord = SHalfReprojection(playerPos, cameraOffset); + #if defined IPBR && !defined GENERATED_NORMALS + vec2 prvRefCoord = Reprojection(vec3(texCoord, max(refPos.z, z0)), cameraOffset); + vec4 oldRef = texture2D(colortex7, prvRefCoord); + #else + vec2 prvRefCoord = Reprojection(vec3(texCoord, z0), cameraOffset); + vec2 prvRefCoord2 = Reprojection(vec3(texCoord, max(refPos.z, z0)), cameraOffset); + vec4 oldRef1 = texture2D(colortex7, prvRefCoord); + vec4 oldRef2 = texture2D(colortex7, prvRefCoord2); + vec3 dif1 = colorAdd - oldRef1.rgb; + vec3 dif2 = colorAdd - oldRef2.rgb; + float dotDif1 = dot(dif1, dif1); + float dotDif2 = dot(dif2, dif2); + + float oldRefMixer = clamp01((dotDif1 - dotDif2) * 500.0); + vec4 oldRef = mix(oldRef1, oldRef2, oldRefMixer); + #endif + + vec4 newRef = vec4(colorAdd, colorMultInv); + vec2 oppositePreCoord = texCoord - 2.0 * (prvCoord - texCoord); + + // Reduce blending at speed + blendFactor *= float(prvCoord.x > 0.0 && prvCoord.x < 1.0 && prvCoord.y > 0.0 && prvCoord.y < 1.0); + float velocity = length(cameraOffset) * max(16.0 - lViewPos / gbufferProjection[1][1], 3.0); + blendFactor *= mix(1.0, exp(-velocity) * 0.5 + 0.5, smoothnessD); + + // Reduce blending if depth changed + float linearZDif = abs(GetLinearDepth(texture2D(colortex1, oppositePreCoord).r) - linearZ0) * far; + blendFactor *= max0(2.0 - linearZDif) * 0.5; + //color = mix(vec3(1,1,0), color, max0(2.0 - linearZDif) * 0.5); + + // Reduce blending if normal changed + vec3 texture5P = texture2D(colortex5, oppositePreCoord, 0).rgb; + vec3 texture5Dif = abs(texture5 - texture5P); + if (texture5Dif != clamp(texture5Dif, vec3(-0.004), vec3(0.004))) { + blendFactor = 0.0; + //color.rgb = vec3(1,0,1); + } + + blendFactor = max0(blendFactor); // Prevent first frame NaN + newRef = max(newRef, vec4(0.0)); // Prevent random NaNs from persisting + refToWrite = mix(newRef, oldRef, blendFactor * 0.95); + refToWrite = mix(max(refToWrite, newRef), refToWrite, pow2(pow2(pow2(refToWrite.a)))); + + color.rgb *= 1.0 - refToWrite.a * fresnelM; + color.rgb += refToWrite.rgb * fresnelM; + refToWrite *= writeFactor; + #else + color *= 1.0 - colorMultInv * fresnelM; + color += colorAdd * fresnelM; + #endif + + color = max(colorP * max(intenseFresnel, 1.0 - pow2(smoothnessD)) * 0.9, color); + + //if (gl_FragCoord.x > 960) color = vec3(5.25,0,5.25); + } + #endif + + #ifdef WORLD_OUTLINE + #ifndef WORLD_OUTLINE_ON_ENTITIES + if (!entityOrHand) + #endif + DoWorldOutline(color, linearZ0); + #endif + + #ifndef SKY_EFFECT_REFLECTION + waterRefColor = sqrt(color) - 1.0; + #else + waterRefColor = color; + #endif + + DoFog(color, skyFade, lViewPos, playerPos, VdotU, VdotS, dither); + } else { // Sky + #ifdef DISTANT_HORIZONS + float z0DH = texelFetch(dhDepthTex, texelCoord, 0).r; + if (z0DH < 1.0) { // Distant Horizons Chunks + vec4 screenPosDH = vec4(texCoord, z0DH, 1.0); + vec4 viewPosDH = dhProjectionInverse * (screenPosDH * 2.0 - 1.0); + viewPosDH /= viewPosDH.w; + lViewPos = length(viewPosDH.xyz); + playerPos = ViewToPlayer(viewPosDH.xyz); + + #ifndef SKY_EFFECT_REFLECTION + waterRefColor = sqrt(color) - 1.0; + #else + waterRefColor = color; + #endif + + DoFog(color.rgb, skyFade, lViewPos, playerPos, VdotU, VdotS, dither); + } else { // Start of Actual Sky + #endif + + skyFade = 1.0; + + #ifdef OVERWORLD + #if AURORA_STYLE > 0 + auroraBorealis = GetAuroraBorealis(viewPos.xyz, VdotU, dither); + color.rgb += auroraBorealis; + #endif + #ifdef NIGHT_NEBULA + nightNebula += GetNightNebula(viewPos.xyz, VdotU, VdotS); + color.rgb += nightNebula; + #endif + #endif + #ifdef NETHER + color.rgb = netherColor * (1.0 - maxBlindnessDarkness); + + #ifdef ATM_COLOR_MULTS + color.rgb *= atmColorMult; + #endif + #endif + #ifdef END + color.rgb = endSkyColor; + color.rgb += GetEnderStars(viewPos.xyz, VdotU); + color.rgb *= 1.0 - maxBlindnessDarkness; + + #ifdef ATM_COLOR_MULTS + color.rgb *= atmColorMult; + #endif + #endif + + #ifdef DISTANT_HORIZONS + } // End of Actual Sky + #endif + } + + float cloudLinearDepth = 1.0; + vec4 clouds = vec4(0.0); + + #ifdef VL_CLOUDS_ACTIVE + float cloudZCheck = 0.56; + + if (z0 > cloudZCheck) { + clouds = GetClouds(cloudLinearDepth, skyFade, cameraPosition, playerPos, + lViewPos, VdotS, VdotU, dither, auroraBorealis, nightNebula); + + color = mix(color, clouds.rgb, clouds.a); + } + #endif + + #ifdef SKY_EFFECT_REFLECTION + waterRefColor = mix(waterRefColor, clouds.rgb, clouds.a); + waterRefColor = sqrt(waterRefColor) - 1.0; + #endif + + #if defined LIGHTSHAFTS_ACTIVE && (LIGHTSHAFT_BEHAVIOUR == 1 && SHADOW_QUALITY >= 1 || defined END) + if (viewWidth + viewHeight - gl_FragCoord.x - gl_FragCoord.y < 1.5) + cloudLinearDepth = vlFactor; + #endif + + #if defined OVERWORLD && defined ATMOSPHERIC_FOG && (defined SPECIAL_BIOME_WEATHER || RAIN_STYLE == 2) + float altitudeFactorRaw = GetAtmFogAltitudeFactor(playerPos.y + cameraPosition.y); + vec3 atmFogColor = GetAtmFogColor(altitudeFactorRaw, VdotS); + + #if RAIN_STYLE == 2 + float factor = 1.0; + #else + float factor = max(inSnowy, inDry); + #endif + + color = mix(color, atmFogColor, 0.5 * rainFactor * factor * sqrt1(skyFade)); + #endif + + #ifdef DARK_OUTLINE + if (clouds.a < 0.5) DoDarkOutline(color, skyFade, z0, dither); + #endif + + /*DRAWBUFFERS:054*/ + gl_FragData[0] = vec4(color, 1.0); + gl_FragData[1] = vec4(waterRefColor, 1.0 - skyFade); + gl_FragData[2] = vec4(cloudLinearDepth, 0.0, 0.0, 1.0); + #ifdef TEMPORAL_FILTER + /*DRAWBUFFERS:0547*/ + gl_FragData[3] = refToWrite; + #endif +} + +#endif + +//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader////////// +#ifdef VERTEX_SHADER + +noperspective out vec2 texCoord; + +flat out vec3 upVec, sunVec; + +#if defined LIGHTSHAFTS_ACTIVE && (LIGHTSHAFT_BEHAVIOUR == 1 && SHADOW_QUALITY >= 1 || defined END) + flat out float vlFactor; +#endif + +//Attributes// + +//Common Variables// + +//Common Functions// + +//Includes// + +//Program// +void main() { + gl_Position = ftransform(); + texCoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + + upVec = normalize(gbufferModelView[1].xyz); + sunVec = GetSunVector(); + + #if defined LIGHTSHAFTS_ACTIVE && (LIGHTSHAFT_BEHAVIOUR == 1 && SHADOW_QUALITY >= 1 || defined END) + vlFactor = texelFetch(colortex4, ivec2(viewWidth-1, viewHeight-1), 0).r; + + #ifdef END + if (frameCounter % int(0.06666 / frameTimeSmooth + 0.5) == 0) { // Change speed is not too different above 10 fps + vec2 absCamPosXZ = abs(cameraPosition.xz); + float maxCamPosXZ = max(absCamPosXZ.x, absCamPosXZ.y); + + if (gl_Fog.start / far > 0.5 || maxCamPosXZ > 350.0) vlFactor = max(vlFactor - OSIEBCA*2, 0.0); + else vlFactor = min(vlFactor + OSIEBCA*2, 1.0); + } + #endif + #endif +} + +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/dh_terrain.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/dh_terrain.glsl new file mode 100644 index 0000000..e49a209 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/dh_terrain.glsl @@ -0,0 +1,187 @@ +///////////////////////////////////// +// Complementary Shaders by EminGT // +///////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader////////// +#ifdef FRAGMENT_SHADER + +flat in int mat; + +in vec2 lmCoord; + +flat in vec3 upVec, sunVec, northVec, eastVec; +in vec3 normal; +in vec3 playerPos; + +in vec4 glColor; + +//Pipeline Constants// + +//Common Variables// +float NdotU = dot(normal, upVec); +float NdotUmax0 = max(NdotU, 0.0); +float SdotU = dot(sunVec, upVec); +float sunFactor = SdotU < 0.0 ? clamp(SdotU + 0.375, 0.0, 0.75) / 0.75 : clamp(SdotU + 0.03125, 0.0, 0.0625) / 0.0625; +float sunVisibility = clamp(SdotU + 0.0625, 0.0, 0.125) / 0.125; +float sunVisibility2 = sunVisibility * sunVisibility; +float shadowTimeVar1 = abs(sunVisibility - 0.5) * 2.0; +float shadowTimeVar2 = shadowTimeVar1 * shadowTimeVar1; +float shadowTime = shadowTimeVar2 * shadowTimeVar2; + +vec2 lmCoordM = lmCoord; + +mat4 gbufferProjection = dhProjection; +mat4 gbufferProjectionInverse = dhProjectionInverse; + +#ifdef OVERWORLD + vec3 lightVec = sunVec * ((timeAngle < 0.5325 || timeAngle > 0.9675) ? 1.0 : -1.0); +#else + vec3 lightVec = sunVec; +#endif + +//Common Functions// +float Noise3D(vec3 p) { + p.z = fract(p.z) * 128.0; + float iz = floor(p.z); + float fz = fract(p.z); + vec2 a_off = vec2(23.0, 29.0) * (iz) / 128.0; + vec2 b_off = vec2(23.0, 29.0) * (iz + 1.0) / 128.0; + float a = texture2D(noisetex, p.xy + a_off).r; + float b = texture2D(noisetex, p.xy + b_off).r; + return mix(a, b, fz); +} + +//Includes// +#include "/lib/util/spaceConversion.glsl" +#include "/lib/util/dither.glsl" + +#ifdef ATM_COLOR_MULTS + #include "/lib/colors/colorMultipliers.glsl" +#endif + +#ifdef TAA + #include "/lib/antialiasing/jitter.glsl" +#endif + +#define GBUFFERS_TERRAIN + #include "/lib/lighting/mainLighting.glsl" +#undef GBUFFERS_TERRAIN + +#ifdef SNOWY_WORLD + #include "/lib/materials/materialMethods/snowyWorld.glsl" +#endif + +//Program// +void main() { + vec4 color = vec4(glColor.rgb, 1.0); + + vec3 screenPos = vec3(gl_FragCoord.xy / vec2(viewWidth, viewHeight), gl_FragCoord.z); + #ifdef TAA + vec3 viewPos = ScreenToView(vec3(TAAJitter(screenPos.xy, -0.5), screenPos.z)); + #else + vec3 viewPos = ScreenToView(screenPos); + #endif + float lViewPos = length(playerPos); + vec3 nViewPos = normalize(viewPos); + float VdotU = dot(nViewPos, upVec); + float VdotS = dot(nViewPos, sunVec); + + float dither = Bayer64(gl_FragCoord.xy); + #ifdef TAA + dither = fract(dither + goldenRatio * mod(float(frameCounter), 3600.0)); + #endif + + #ifdef ATM_COLOR_MULTS + atmColorMult = GetAtmColorMult(); + #endif + + bool noSmoothLighting = false, noDirectionalShading = false, noVanillaAO = false, centerShadowBias = false; + int subsurfaceMode = 0; + float smoothnessG = 0.0, smoothnessD = 0.0, highlightMult = 1.0, emission = 0.0, snowFactor = 1.0, snowMinNdotU = 0.0; + vec3 normalM = normal, geoNormal = normal, shadowMult = vec3(1.0); + vec3 worldGeoNormal = normalize(ViewToPlayer(geoNormal * 10000.0)); + + if (mat == DH_BLOCK_LEAVES) { + #include "/lib/materials/specificMaterials/terrain/leaves.glsl" + } else if (mat == DH_BLOCK_GRASS) { + smoothnessG = pow2(color.g) * 0.85; + } else if (mat == DH_BLOCK_ILLUMINATED) { + emission = 2.5; + } else if (mat == DH_BLOCK_LAVA) { + emission = 1.5; + } + + #ifdef SNOWY_WORLD + DoSnowyWorld(color, smoothnessG, highlightMult, smoothnessD, emission, + playerPos, lmCoord, snowFactor, snowMinNdotU, NdotU, subsurfaceMode); + #endif + + float lengthCylinder = max(length(playerPos.xz), abs(playerPos.y)); + highlightMult *= 0.5 + 0.5 * pow2(1.0 - smoothstep(far, far * 1.5, lengthCylinder)); + color.a *= smoothstep(far * 0.5, far * 0.7, lengthCylinder); + if (color.a < dither) discard; + + vec3 noisePos = floor((playerPos + cameraPosition) * 4.0 + 0.001) / 32.0; + float noiseTexture = Noise3D(noisePos) + 0.5; + float noiseFactor = max0(1.0 - 0.3 * dot(color.rgb, color.rgb)); + color.rgb *= pow(noiseTexture, 0.6 * noiseFactor); + + DoLighting(color, shadowMult, playerPos, viewPos, lViewPos, geoNormal, normalM, + worldGeoNormal, lmCoordM, noSmoothLighting, noDirectionalShading, noVanillaAO, + centerShadowBias, subsurfaceMode, smoothnessG, highlightMult, emission); + /* DRAWBUFFERS:0 */ + gl_FragData[0] = color; +} + +#endif + +//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader////////// +#ifdef VERTEX_SHADER + +flat out int mat; + +out vec2 lmCoord; + +flat out vec3 upVec, sunVec, northVec, eastVec; +out vec3 normal; +out vec3 playerPos; + +out vec4 glColor; + +//Attributes// + +//Common Variables// + +//Common Functions// + +//Includes// +#ifdef TAA + #include "/lib/antialiasing/jitter.glsl" +#endif + +//Program// +void main() { + gl_Position = ftransform(); + #ifdef TAA + gl_Position.xy = TAAJitter(gl_Position.xy, gl_Position.w); + #endif + + mat = dhMaterialId; + + lmCoord = GetLightMapCoordinates(); + + normal = normalize(gl_NormalMatrix * gl_Normal); + upVec = normalize(gbufferModelView[1].xyz); + eastVec = normalize(gbufferModelView[0].xyz); + northVec = normalize(gbufferModelView[2].xyz); + sunVec = GetSunVector(); + + playerPos = (gbufferModelViewInverse * gl_ModelViewMatrix * gl_Vertex).xyz; + + glColor = gl_Color; +} + +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/dh_water.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/dh_water.glsl new file mode 100644 index 0000000..97332da --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/dh_water.glsl @@ -0,0 +1,239 @@ +///////////////////////////////////// +// Complementary Shaders by EminGT // +///////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader////////// +#ifdef FRAGMENT_SHADER + +flat in int mat; + +in vec2 lmCoord; + +flat in vec3 upVec, sunVec, northVec, eastVec; +in vec3 normal; +in vec3 playerPos; +in vec3 viewVector; + +in vec4 glColor; + +//Pipeline Constants// + +//Common Variables// +float NdotU = dot(normal, upVec); +float NdotUmax0 = max(NdotU, 0.0); +float SdotU = dot(sunVec, upVec); +float sunFactor = SdotU < 0.0 ? clamp(SdotU + 0.375, 0.0, 0.75) / 0.75 : clamp(SdotU + 0.03125, 0.0, 0.0625) / 0.0625; +float sunVisibility = clamp(SdotU + 0.0625, 0.0, 0.125) / 0.125; +float sunVisibility2 = sunVisibility * sunVisibility; +float shadowTimeVar1 = abs(sunVisibility - 0.5) * 2.0; +float shadowTimeVar2 = shadowTimeVar1 * shadowTimeVar1; +float shadowTime = shadowTimeVar2 * shadowTimeVar2; + +vec2 lmCoordM = lmCoord; + +mat4 gbufferProjection = dhProjection; +mat4 gbufferProjectionInverse = dhProjectionInverse; + +#ifdef OVERWORLD + vec3 lightVec = sunVec * ((timeAngle < 0.5325 || timeAngle > 0.9675) ? 1.0 : -1.0); +#else + vec3 lightVec = sunVec; +#endif + +#if WATER_STYLE >= 2 || RAIN_PUDDLES >= 1 && WATER_STYLE == 1 && WATER_MAT_QUALITY >= 2 || defined GENERATED_NORMALS || defined CUSTOM_PBR + mat3 tbnMatrix = mat3( + eastVec.x, northVec.x, normal.x, + eastVec.y, northVec.y, normal.y, + eastVec.z, northVec.z, normal.z + ); +#endif + +//Common Functions// + +//Includes// +#include "/lib/util/dither.glsl" +#include "/lib/util/spaceConversion.glsl" +#include "/lib/lighting/mainLighting.glsl" +#include "/lib/atmospherics/fog/mainFog.glsl" + +#ifdef TAA + #include "/lib/antialiasing/jitter.glsl" +#endif + +#ifdef OVERWORLD + #include "/lib/atmospherics/sky.glsl" +#endif + +#if WATER_REFLECT_QUALITY >= 0 + #if defined SKY_EFFECT_REFLECTION && defined OVERWORLD + #if AURORA_STYLE > 0 + #include "/lib/atmospherics/auroraBorealis.glsl" + #endif + + #ifdef NIGHT_NEBULA + #include "/lib/atmospherics/nightNebula.glsl" + #else + #include "/lib/atmospherics/stars.glsl" + #endif + + #ifdef VL_CLOUDS_ACTIVE + #include "/lib/atmospherics/clouds/mainClouds.glsl" + #endif + #endif + + #include "/lib/materials/materialMethods/reflections.glsl" +#endif + +#ifdef ATM_COLOR_MULTS + #include "/lib/colors/colorMultipliers.glsl" +#endif +#ifdef MOON_PHASE_INF_ATMOSPHERE + #include "/lib/colors/moonPhaseInfluence.glsl" +#endif + +//Program// +void main() { + vec4 colorP = vec4(vec3(0.85), glColor.a); + vec4 color = glColor; + + vec3 screenPos = vec3(gl_FragCoord.xy / vec2(viewWidth, viewHeight), gl_FragCoord.z); + if (texture2D(depthtex1, screenPos.xy).r < 1.0) discard; + float lViewPos = length(playerPos); + + float dither = Bayer64(gl_FragCoord.xy); + #ifdef TAA + dither = fract(dither + goldenRatio * mod(float(frameCounter), 3600.0)); + #endif + + #ifdef ATM_COLOR_MULTS + atmColorMult = GetAtmColorMult(); + sqrtAtmColorMult = sqrt(atmColorMult); + #endif + + #ifdef VL_CLOUDS_ACTIVE + float cloudLinearDepth = texelFetch(gaux1, texelCoord, 0).r; + + if (pow2(cloudLinearDepth + OSIEBCA * dither) * renderDistance < min(lViewPos, renderDistance)) discard; + #endif + + #ifdef TAA + vec3 viewPos = ScreenToView(vec3(TAAJitter(screenPos.xy, -0.5), screenPos.z)); + #else + vec3 viewPos = ScreenToView(screenPos); + #endif + vec3 nViewPos = normalize(viewPos); + float VdotU = dot(nViewPos, upVec); + float VdotS = dot(nViewPos, sunVec); + + bool noSmoothLighting = false, noDirectionalShading = false, noVanillaAO = false, centerShadowBias = false; + int subsurfaceMode = 0; + float smoothnessG = 0.0, highlightMult = 0.0, emission = 0.0, materialMask = 0.0, reflectMult = 0.0; + vec3 normalM = normal, geoNormal = normal, shadowMult = vec3(1.0); + vec3 worldGeoNormal = normalize(ViewToPlayer(geoNormal * 10000.0)); + float fresnel = clamp(1.0 + dot(normalM, nViewPos), 0.0, 1.0); + + if (mat == DH_BLOCK_WATER) { + #include "/lib/materials/specificMaterials/translucents/water.glsl" + } + + float lengthCylinder = max(length(playerPos.xz), abs(playerPos.y) * 2.0); + color.a *= smoothstep(far * 0.5, far * 0.7, lengthCylinder); + + DoLighting(color, shadowMult, playerPos, viewPos, lViewPos, geoNormal, normalM, + worldGeoNormal, lmCoordM, noSmoothLighting, noDirectionalShading, noVanillaAO, + centerShadowBias, subsurfaceMode, smoothnessG, highlightMult, emission); + + // Reflections + #if WATER_REFLECT_QUALITY >= 0 + #ifdef LIGHT_COLOR_MULTS + highlightColor *= lightColorMult; + #endif + #ifdef MOON_PHASE_INF_REFLECTION + highlightColor *= pow2(moonPhaseInfluence); + #endif + + float fresnelM = (pow3(fresnel) * 0.85 + 0.15) * reflectMult; + + float skyLightFactor = pow2(max(lmCoordM.y - 0.7, 0.0) * 3.33333); + #if SHADOW_QUALITY > -1 && WATER_REFLECT_QUALITY >= 2 && WATER_MAT_QUALITY >= 2 + skyLightFactor = max(skyLightFactor, min1(dot(shadowMult, shadowMult))); + #endif + + vec4 reflection = GetReflection(normalM, viewPos.xyz, nViewPos, playerPos, lViewPos, -1.0, + depthtex1, dither, skyLightFactor, fresnel, + smoothnessG, geoNormal, color.rgb, shadowMult, highlightMult); + + color.rgb = mix(color.rgb, reflection.rgb, fresnelM); + #endif + //// + + float sky = 0.0; + DoFog(color.rgb, sky, lViewPos, playerPos, VdotU, VdotS, dither); + color.a *= 1.0 - sky; + + /* DRAWBUFFERS:0 */ + gl_FragData[0] = color; +} + +#endif + +//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader////////// +#ifdef VERTEX_SHADER + +flat out int mat; + +out vec2 lmCoord; + +flat out vec3 upVec, sunVec, northVec, eastVec; +out vec3 normal; +out vec3 playerPos; +out vec3 viewVector; + +out vec4 glColor; + +//Attributes// +attribute vec4 at_tangent; + +//Common Variables// + +//Common Functions// + +//Includes// +#ifdef TAA + #include "/lib/antialiasing/jitter.glsl" +#endif + +//Program// +void main() { + gl_Position = ftransform(); + #ifdef TAA + gl_Position.xy = TAAJitter(gl_Position.xy, gl_Position.w); + #endif + + mat = dhMaterialId; + + lmCoord = GetLightMapCoordinates(); + + normal = normalize(gl_NormalMatrix * gl_Normal); + upVec = normalize(gbufferModelView[1].xyz); + eastVec = normalize(gbufferModelView[0].xyz); + northVec = normalize(gbufferModelView[2].xyz); + sunVec = GetSunVector(); + + playerPos = (gbufferModelViewInverse * gl_ModelViewMatrix * gl_Vertex).xyz; + + mat3 tbnMatrix = mat3( + eastVec.x, northVec.x, normal.x, + eastVec.y, northVec.y, normal.y, + eastVec.z, northVec.z, normal.z + ); + + viewVector = tbnMatrix * (gl_ModelViewMatrix * gl_Vertex).xyz; + + glColor = gl_Color; +} + +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/final.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/final.glsl new file mode 100644 index 0000000..2bebab4 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/final.glsl @@ -0,0 +1,156 @@ +///////////////////////////////////// +// Complementary Shaders by EminGT // +///////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader////////// +#ifdef FRAGMENT_SHADER + +noperspective in vec2 texCoord; + +//Pipeline Constants// +#include "/lib/pipelineSettings.glsl" + +//Common Variables// +#if defined MC_ANISOTROPIC_FILTERING || COLORED_LIGHTING_INTERNAL > 0 + #define ANY_ERROR_MESSAGE +#endif + +#ifdef MC_ANISOTROPIC_FILTERING + #define OPTIFINE_AF_ERROR +#endif + +#if COLORED_LIGHTING_INTERNAL > 0 && !defined IS_IRIS + #define OPTIFINE_ACL_ERROR +#endif + +#if COLORED_LIGHTING_INTERNAL > 0 && defined MC_OS_MAC + #define APPLE_ACL_ERROR +#endif + +#if COLORED_LIGHTING_INTERNAL > 0 + #define COORDINATES_ACL_ERROR + #define SHADOWDISTANCE_ACL_ERROR +#endif + +//Common Functions// +#if IMAGE_SHARPENING > 0 + vec2 viewD = 1.0 / vec2(viewWidth, viewHeight); + + vec2 sharpenOffsets[4] = vec2[4]( + vec2( viewD.x, 0.0), + vec2( 0.0, viewD.x), + vec2(-viewD.x, 0.0), + vec2( 0.0, -viewD.x) + ); + + void SharpenImage(inout vec3 color, vec2 texCoordM) { + #ifdef TAA + float sharpenMult = IMAGE_SHARPENING; + #else + float sharpenMult = IMAGE_SHARPENING * 0.5; + #endif + float mult = 0.0125 * sharpenMult; + color *= 1.0 + 0.05 * sharpenMult; + + for (int i = 0; i < 4; i++) { + color -= texture2D(colortex3, texCoordM + sharpenOffsets[i]).rgb * mult; + } + } +#endif + +//Includes// +#ifdef ANY_ERROR_MESSAGE + #include "/lib/textRendering/textRenderer.glsl" + + void beginTextM(int textSize, vec2 offset) { + float scale = 860; + beginText(ivec2(vec2(scale * viewWidth / viewHeight, scale) * texCoord) / textSize, ivec2(0 + offset.x, scale / textSize - offset.y)); + text.bgCol = vec4(0.0); + } +#endif + +//Program// +void main() { + vec2 texCoordM = texCoord; + + #ifdef UNDERWATER_DISTORTION + if (isEyeInWater == 1) + texCoordM += WATER_REFRACTION_INTENSITY * 0.00035 * sin((texCoord.x + texCoord.y) * 25.0 + frameTimeCounter * 3.0); + #endif + + vec3 color = texture2D(colortex3, texCoordM).rgb; + + #if CHROMA_ABERRATION > 0 + vec2 scale = vec2(1.0, viewHeight / viewWidth); + vec2 aberration = (texCoordM - 0.5) * (2.0 / vec2(viewWidth, viewHeight)) * scale * CHROMA_ABERRATION; + color.rb = vec2(texture2D(colortex3, texCoordM + aberration).r, texture2D(colortex3, texCoordM - aberration).b); + #endif + + #if IMAGE_SHARPENING > 0 + SharpenImage(color, texCoordM); + #endif + + /*ivec2 boxOffsets[8] = ivec2[8]( + ivec2( 1, 0), + ivec2( 0, 1), + ivec2(-1, 0), + ivec2( 0,-1), + ivec2( 1, 1), + ivec2( 1,-1), + ivec2(-1, 1), + ivec2(-1,-1) + ); + + for (int i = 0; i < 8; i++) { + color = max(color, texelFetch(colortex3, texelCoord + boxOffsets[i], 0).rgb); + }*/ + + #ifdef OPTIFINE_AF_ERROR + #include "/lib/textRendering/error_optifine_af.glsl" + #elif defined OPTIFINE_ACL_ERROR + #include "/lib/textRendering/error_optifine_acl.glsl" + #elif defined APPLE_ACL_ERROR + #include "/lib/textRendering/error_apple_acl.glsl" + #else + #ifdef COORDINATES_ACL_ERROR + ivec2 absCameraPositionIntXZ = abs(cameraPositionInt.xz); + if (max(absCameraPositionIntXZ.x, absCameraPositionIntXZ.y) > 8388550) { + #include "/lib/textRendering/error_coordinates_acl.glsl" + } + #endif + #ifdef SHADOWDISTANCE_ACL_ERROR + if (COLORED_LIGHTING_INTERNAL > shadowDistance*2) { + #include "/lib/textRendering/error_shadowdistance_acl.glsl" + } + #endif + #endif + + /* DRAWBUFFERS:0 */ + gl_FragData[0] = vec4(color, 1.0); +} + +#endif + +//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader////////// +#ifdef VERTEX_SHADER + +noperspective out vec2 texCoord; + +//Attributes// + +//Common Variables// + +//Common Functions// + +//Includes// + +//Program// +void main() { + gl_Position = ftransform(); + texCoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; +} + +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_armor_glint.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_armor_glint.glsl new file mode 100644 index 0000000..e83bfa2 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_armor_glint.glsl @@ -0,0 +1,73 @@ +////////////////////////////////// +// Complementary Base by EminGT // +////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader////////// +#ifdef FRAGMENT_SHADER + +in vec2 texCoord; + +flat in vec4 glColor; + +//Pipeline Constants// + +//Common Variables// + +//Common Functions// + +//Includes// +#ifdef COLOR_CODED_PROGRAMS + #include "/lib/misc/colorCodedPrograms.glsl" +#endif + +//Program// +void main() { + vec4 color = texture2D(tex, texCoord); + color *= glColor; + + color.rgb *= glColor.a; // Needed for Minecraft's "Glint Strength" apparently + + #ifdef COLOR_CODED_PROGRAMS + ColorCodeProgram(color, -1); + #endif + + /* DRAWBUFFERS:0 */ + gl_FragData[0] = color; +} + +#endif + +//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader////////// +#ifdef VERTEX_SHADER + +out vec2 texCoord; + +flat out vec4 glColor; + +//Attributes// + +//Common Variables// + +//Common Functions// + +//Includes// + +//Program// +void main() { + gl_Position = ftransform(); + + texCoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + + glColor = gl_Color; + + #if HAND_SWAYING > 0 + if (gl_ProjectionMatrix[2][2] > -0.5) { + #include "/lib/misc/handSway.glsl" + } + #endif +} + +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_basic.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_basic.glsl new file mode 100644 index 0000000..756cdcf --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_basic.glsl @@ -0,0 +1,178 @@ +////////////////////////////////// +// Complementary Base by EminGT // +////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader////////// +#ifdef FRAGMENT_SHADER + +flat in vec2 lmCoord; + +flat in vec3 upVec, sunVec, northVec, eastVec; +in vec3 normal; + +flat in vec4 glColor; + +//Pipeline Constants// + +//Common Variables// +float NdotU = dot(normal, upVec); +float NdotUmax0 = max(NdotU, 0.0); +float SdotU = dot(sunVec, upVec); +float sunFactor = SdotU < 0.0 ? clamp(SdotU + 0.375, 0.0, 0.75) / 0.75 : clamp(SdotU + 0.03125, 0.0, 0.0625) / 0.0625; +float sunVisibility = clamp(SdotU + 0.0625, 0.0, 0.125) / 0.125; +float sunVisibility2 = sunVisibility * sunVisibility; +float shadowTimeVar1 = abs(sunVisibility - 0.5) * 2.0; +float shadowTimeVar2 = shadowTimeVar1 * shadowTimeVar1; +float shadowTime = shadowTimeVar2 * shadowTimeVar2; + +#ifdef OVERWORLD + vec3 lightVec = sunVec * ((timeAngle < 0.5325 || timeAngle > 0.9675) ? 1.0 : -1.0); +#else + vec3 lightVec = sunVec; +#endif + +//Common Functions// + +//Includes// +#include "/lib/util/spaceConversion.glsl" +#include "/lib/lighting/mainLighting.glsl" + +#ifdef TAA + #include "/lib/antialiasing/jitter.glsl" +#endif + +#ifdef COLOR_CODED_PROGRAMS + #include "/lib/misc/colorCodedPrograms.glsl" +#endif + +//Program// +void main() { + vec4 color = glColor; + + vec3 screenPos = vec3(gl_FragCoord.xy / vec2(viewWidth, viewHeight), gl_FragCoord.z); + #ifdef TAA + vec3 viewPos = ScreenToView(vec3(TAAJitter(screenPos.xy, -0.5), screenPos.z)); + #else + vec3 viewPos = ScreenToView(screenPos); + #endif + float lViewPos = length(viewPos); + vec3 playerPos = ViewToPlayer(viewPos); + + float materialMask = 0.0; + vec3 normalM = normal, geoNormal = normal, shadowMult = vec3(1.0); + vec3 worldGeoNormal = normalize(ViewToPlayer(geoNormal * 10000.0)); + + #ifndef GBUFFERS_LINE + DoLighting(color, shadowMult, playerPos, viewPos, lViewPos, geoNormal, normalM, + worldGeoNormal, lmCoord, false, false, false, + false, 0, 0.0, 0.0, 0.0); + #endif + + #if SELECT_OUTLINE != 1 || defined SELECT_OUTLINE_AUTO_HIDE + if (abs(color.a - 0.4) + dot(color.rgb, color.rgb) < 0.01) { + #if SELECT_OUTLINE == 0 + discard; + #elif SELECT_OUTLINE == 2 // Rainbow + float posFactor = playerPos.x + playerPos.y + playerPos.z + cameraPosition.x + cameraPosition.y + cameraPosition.z; + color.rgb = clamp(abs(mod(fract(frameTimeCounter*0.25 + posFactor*0.2) * 6.0 + vec3(0.0,4.0,2.0), 6.0) - 3.0) - 1.0, + 0.0, 1.0) * vec3(3.0, 2.0, 3.0) * SELECT_OUTLINE_I; + #elif SELECT_OUTLINE == 3 // Select Color + color.rgb = vec3(SELECT_OUTLINE_R, SELECT_OUTLINE_G, SELECT_OUTLINE_B) * SELECT_OUTLINE_I; + #elif SELECT_OUTLINE == 4 // Versatile + color.a = 0.1; + materialMask = OSIEBCA * 252.0; // Versatile Selection Outline + #endif + + #ifdef SELECT_OUTLINE_AUTO_HIDE + if (heldItemId == 40008 && ( + heldItemId2 == 40008 || + heldItemId2 == 45060 || + heldItemId2 == 45108 || + heldItemId2 >= 44000 && + heldItemId2 < 45000)) { + // Both hands hold nothing or only a light/totem/shield in off-hand + discard; + } + #endif + } + #endif + + #ifdef COLOR_CODED_PROGRAMS + ColorCodeProgram(color, -1); + #endif + + #if COLORED_LIGHTING_INTERNAL > 0 && defined NETHER + if (gl_FragCoord.x < 0.0) + color = shadow2D(shadowtex0, vec3(0.5)); // To Activate Shadowmap in Nether + #endif + + /* DRAWBUFFERS:06 */ + gl_FragData[0] = color; + gl_FragData[1] = vec4(0.0, materialMask, 0.0, 1.0); +} + +#endif + +//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader////////// +#ifdef VERTEX_SHADER + +flat out vec2 lmCoord; + +flat out vec3 upVec, sunVec, northVec, eastVec; +out vec3 normal; + +flat out vec4 glColor; + +//Attributes// + +//Common Variables// + +//Common Functions// + +//Includes// +#ifdef TAA + #include "/lib/antialiasing/jitter.glsl" +#endif + +//Program// +void main() { + #ifndef GBUFFERS_LINE + gl_Position = ftransform(); + #else + float lineWidth = 2.0; + vec2 screenSize = vec2(viewWidth, viewHeight); + const mat4 VIEW_SCALE = mat4(mat3(1.0 - (1.0 / 256.0))); + vec4 linePosStart = projectionMatrix * VIEW_SCALE * modelViewMatrix * vec4(vaPosition, 1.0); + vec4 linePosEnd = projectionMatrix * VIEW_SCALE * modelViewMatrix * (vec4(vaPosition + vaNormal, 1.0)); + vec3 ndc1 = linePosStart.xyz / linePosStart.w; + vec3 ndc2 = linePosEnd.xyz / linePosEnd.w; + vec2 lineScreenDirection = normalize((ndc2.xy - ndc1.xy) * screenSize); + vec2 lineOffset = vec2(-lineScreenDirection.y, lineScreenDirection.x) * lineWidth / screenSize; + if (lineOffset.x < 0.0) + lineOffset *= -1.0; + if (gl_VertexID % 2 == 0) + gl_Position = vec4((ndc1 + vec3(lineOffset, 0.0)) * linePosStart.w, linePosStart.w); + else + gl_Position = vec4((ndc1 - vec3(lineOffset, 0.0)) * linePosStart.w, linePosStart.w); + #endif + + #ifdef TAA + gl_Position.xy = TAAJitter(gl_Position.xy, gl_Position.w); + #endif + + lmCoord = GetLightMapCoordinates(); + + glColor = gl_Color; + + normal = normalize(gl_NormalMatrix * gl_Normal); + + upVec = normalize(gbufferModelView[1].xyz); + eastVec = normalize(gbufferModelView[0].xyz); + northVec = normalize(gbufferModelView[2].xyz); + sunVec = GetSunVector(); +} + +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_beaconbeam.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_beaconbeam.glsl new file mode 100644 index 0000000..639ee42 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_beaconbeam.glsl @@ -0,0 +1,103 @@ +///////////////////////////////////// +// Complementary Shaders by EminGT // +///////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader////////// +#ifdef FRAGMENT_SHADER + +in vec2 texCoord; + +in vec4 glColor; + +//Pipeline Constants// + +//Common Variables// + +//Common Functions// + +//Includes// +#include "/lib/util/spaceConversion.glsl" + +#ifdef TAA + #include "/lib/antialiasing/jitter.glsl" +#endif + +#ifdef COLOR_CODED_PROGRAMS + #include "/lib/misc/colorCodedPrograms.glsl" +#endif + +//Program// +void main() { + vec4 color = texture2D(tex, texCoord); + vec3 colorP = color.rgb; + color *= glColor; + + vec3 screenPos = vec3(gl_FragCoord.xy / vec2(viewWidth, viewHeight), gl_FragCoord.z); + #ifdef TAA + vec3 viewPos = ScreenToView(vec3(TAAJitter(screenPos.xy, -0.5), screenPos.z)); + #else + vec3 viewPos = ScreenToView(screenPos); + #endif + float lViewPos = length(viewPos); + + #ifdef IPBR + float emission = dot(colorP, colorP); + + if (color.a < 0.5) { + color.a = 0.101; + emission = pow2(pow2(emission)) * 0.1; + } + + color.rgb *= color.rgb * emission * 1.75; + color.rgb += emission * 0.05; + #else + color.rgb *= color.rgb * 4.0; + #endif + + color.rgb *= 0.5 + 0.5 * exp(-lViewPos * 0.04); + + #ifdef COLOR_CODED_PROGRAMS + ColorCodeProgram(color, -1); + #endif + + /* DRAWBUFFERS:06 */ + gl_FragData[0] = color; + gl_FragData[1] = vec4(0.0, 0.0, 0.0, 1.0); +} + +#endif + +//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader////////// +#ifdef VERTEX_SHADER + +out vec2 texCoord; + +out vec4 glColor; + +//Attributes// + +//Common Variables// + +//Common Functions// + +//Includes// +#ifdef TAA + #include "/lib/antialiasing/jitter.glsl" +#endif + +//Program// +void main() { + gl_Position = ftransform(); + #ifdef TAA + gl_Position.xy = TAAJitter(gl_Position.xy, gl_Position.w); + #endif + + texCoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + + glColor = gl_Color; +} + +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_block.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_block.glsl new file mode 100644 index 0000000..3f731f6 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_block.glsl @@ -0,0 +1,288 @@ +////////////////////////////////// +// Complementary Base by EminGT // +////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader////////// +#ifdef FRAGMENT_SHADER + +in vec2 texCoord; +in vec2 lmCoord; + +flat in vec3 upVec, sunVec, northVec, eastVec; +in vec3 normal; + +in vec4 glColor; + +#if defined GENERATED_NORMALS || defined COATED_TEXTURES || defined POM + in vec2 signMidCoordPos; + flat in vec2 absMidCoordPos; +#endif + +#if defined GENERATED_NORMALS || defined CUSTOM_PBR + flat in vec3 binormal, tangent; +#endif + +#ifdef POM + in vec3 viewVector; + + in vec4 vTexCoordAM; +#endif + +//Pipeline Constants// + +//Common Variables// +float NdotU = dot(normal, upVec); +float NdotUmax0 = max(NdotU, 0.0); +float SdotU = dot(sunVec, upVec); +float sunFactor = SdotU < 0.0 ? clamp(SdotU + 0.375, 0.0, 0.75) / 0.75 : clamp(SdotU + 0.03125, 0.0, 0.0625) / 0.0625; +float sunVisibility = clamp(SdotU + 0.0625, 0.0, 0.125) / 0.125; +float sunVisibility2 = sunVisibility * sunVisibility; +float shadowTimeVar1 = abs(sunVisibility - 0.5) * 2.0; +float shadowTimeVar2 = shadowTimeVar1 * shadowTimeVar1; +float shadowTime = shadowTimeVar2 * shadowTimeVar2; + +#ifdef OVERWORLD + vec3 lightVec = sunVec * ((timeAngle < 0.5325 || timeAngle > 0.9675) ? 1.0 : -1.0); +#else + vec3 lightVec = sunVec; +#endif + +#if defined GENERATED_NORMALS || defined CUSTOM_PBR + mat3 tbnMatrix = mat3( + tangent.x, binormal.x, normal.x, + tangent.y, binormal.y, normal.y, + tangent.z, binormal.z, normal.z + ); +#endif + +//Common Functions// + +//Includes// +#include "/lib/util/spaceConversion.glsl" +#include "/lib/util/dither.glsl" +#include "/lib/lighting/mainLighting.glsl" + +#ifdef TAA + #include "/lib/antialiasing/jitter.glsl" +#endif + +#if defined GENERATED_NORMALS || defined COATED_TEXTURES + #include "/lib/util/miplevel.glsl" +#endif + +#ifdef GENERATED_NORMALS + #include "/lib/materials/materialMethods/generatedNormals.glsl" +#endif + +#ifdef COATED_TEXTURES + #include "/lib/materials/materialMethods/coatedTextures.glsl" +#endif + +#if IPBR_EMISSIVE_MODE != 1 + #include "/lib/materials/materialMethods/customEmission.glsl" +#endif + +#ifdef CUSTOM_PBR + #include "/lib/materials/materialHandling/customMaterials.glsl" +#endif + +#ifdef COLOR_CODED_PROGRAMS + #include "/lib/misc/colorCodedPrograms.glsl" +#endif + +#ifdef PORTAL_EDGE_EFFECT + #include "/lib/misc/voxelization.glsl" +#endif + +//Program// +void main() { + vec4 color = texture2D(tex, texCoord); + #ifdef GENERATED_NORMALS + vec3 colorP = color.rgb; + #endif + color *= glColor; + + vec3 screenPos = vec3(gl_FragCoord.xy / vec2(viewWidth, viewHeight), gl_FragCoord.z); + #ifdef TAA + vec3 viewPos = ScreenToView(vec3(TAAJitter(screenPos.xy, -0.5), screenPos.z)); + #else + vec3 viewPos = ScreenToView(screenPos); + #endif + float lViewPos = length(viewPos); + vec3 playerPos = ViewToPlayer(viewPos); + + bool noSmoothLighting = false, noDirectionalShading = false; + float smoothnessD = 0.0, skyLightFactor = 0.0, materialMask = 0.0; + float smoothnessG = 0.0, highlightMult = 1.0, emission = 0.0, noiseFactor = 1.0; + vec2 lmCoordM = lmCoord; + vec3 normalM = normal, geoNormal = normal, shadowMult = vec3(1.0); + vec3 worldGeoNormal = normalize(ViewToPlayer(geoNormal * 10000.0)); + + #ifdef IPBR + #include "/lib/materials/materialHandling/blockEntityMaterials.glsl" + + #if IPBR_EMISSIVE_MODE != 1 + emission = GetCustomEmissionForIPBR(color, emission); + #endif + #else + #ifdef CUSTOM_PBR + GetCustomMaterials(color, normalM, lmCoordM, NdotU, shadowMult, smoothnessG, smoothnessD, highlightMult, emission, materialMask, viewPos, lViewPos); + #endif + + if (blockEntityId == 60025) { // End Portal, End Gateway + #ifdef SPECIAL_PORTAL_EFFECTS + #include "/lib/materials/specificMaterials/others/endPortalEffect.glsl" + #endif + } else if (blockEntityId == 60004) { // Signs + noSmoothLighting = true; + if (glColor.r + glColor.g + glColor.b <= 2.99 || lmCoord.x > 0.999) { // Sign Text + #include "/lib/materials/specificMaterials/others/signText.glsl" + } + } else { + noSmoothLighting = true; + } + #endif + + #ifdef GENERATED_NORMALS + GenerateNormals(normalM, colorP); + #endif + + #ifdef COATED_TEXTURES + CoatTextures(color.rgb, noiseFactor, playerPos, false); + #endif + + DoLighting(color, shadowMult, playerPos, viewPos, lViewPos, geoNormal, normalM, + worldGeoNormal, lmCoordM, noSmoothLighting, noDirectionalShading, false, + false, 0, smoothnessG, highlightMult, emission); + + #ifdef PBR_REFLECTIONS + #ifdef OVERWORLD + skyLightFactor = pow2(max(lmCoord.y - 0.7, 0.0) * 3.33333); + #else + skyLightFactor = dot(shadowMult, shadowMult) / 3.0; + #endif + #endif + + #ifdef COLOR_CODED_PROGRAMS + ColorCodeProgram(color, blockEntityId); + #endif + + /* DRAWBUFFERS:06 */ + gl_FragData[0] = color; + gl_FragData[1] = vec4(smoothnessD, materialMask, skyLightFactor, 1.0); + + #if BLOCK_REFLECT_QUALITY >= 2 && RP_MODE != 0 + /* DRAWBUFFERS:065 */ + gl_FragData[2] = vec4(mat3(gbufferModelViewInverse) * normalM, 1.0); + #endif +} + +#endif + +//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader////////// +#ifdef VERTEX_SHADER + +out vec2 texCoord; +out vec2 lmCoord; + +flat out vec3 upVec, sunVec, northVec, eastVec; +out vec3 normal; + +out vec4 glColor; + +#if defined GENERATED_NORMALS || defined COATED_TEXTURES || defined POM + out vec2 signMidCoordPos; + flat out vec2 absMidCoordPos; +#endif + +#if defined GENERATED_NORMALS || defined CUSTOM_PBR + flat out vec3 binormal, tangent; +#endif + +#ifdef POM + out vec3 viewVector; + + out vec4 vTexCoordAM; +#endif + +//Attributes// +#if defined GENERATED_NORMALS || defined COATED_TEXTURES || defined POM + attribute vec4 mc_midTexCoord; +#endif + +#if defined GENERATED_NORMALS || defined CUSTOM_PBR + attribute vec4 at_tangent; +#endif + +//Common Variables// + +//Common Functions// + +//Includes// +#ifdef TAA + #include "/lib/antialiasing/jitter.glsl" +#endif + +//Program// +void main() { + gl_Position = ftransform(); + #ifdef TAA + gl_Position.xy = TAAJitter(gl_Position.xy, gl_Position.w); + #endif + + texCoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + + lmCoord = GetLightMapCoordinates(); + + glColor = gl_Color; + + normal = normalize(gl_NormalMatrix * gl_Normal); + + upVec = normalize(gbufferModelView[1].xyz); + eastVec = normalize(gbufferModelView[0].xyz); + northVec = normalize(gbufferModelView[2].xyz); + sunVec = GetSunVector(); + + if (normal != normal) normal = -upVec; // Mod Fix: Fixes Better Nether Fireflies + + #ifdef IPBR + /*if (blockEntityId == 60024) { // End Portal, End Gateway + gl_Position.z -= 0.002; + }*/ + #endif + + #if defined GENERATED_NORMALS || defined COATED_TEXTURES || defined POM + if (blockEntityId == 60008) { // Chest + float fractWorldPosY = fract((gbufferModelViewInverse * gl_ModelViewMatrix * gl_Vertex).y + cameraPosition.y); + if (fractWorldPosY > 0.56 && 0.57 > fractWorldPosY) gl_Position.z -= 0.0001; + } + + vec2 midCoord = (gl_TextureMatrix[0] * mc_midTexCoord).st; + vec2 texMinMidCoord = texCoord - midCoord; + signMidCoordPos = sign(texMinMidCoord); + absMidCoordPos = abs(texMinMidCoord); + #endif + + #if defined GENERATED_NORMALS || defined CUSTOM_PBR + binormal = normalize(gl_NormalMatrix * cross(at_tangent.xyz, gl_Normal.xyz) * at_tangent.w); + tangent = normalize(gl_NormalMatrix * at_tangent.xyz); + #endif + + #ifdef POM + mat3 tbnMatrix = mat3( + tangent.x, binormal.x, normal.x, + tangent.y, binormal.y, normal.y, + tangent.z, binormal.z, normal.z + ); + + viewVector = tbnMatrix * (gl_ModelViewMatrix * gl_Vertex).xyz; + + vTexCoordAM.zw = abs(texMinMidCoord) * 2; + vTexCoordAM.xy = min(texCoord, midCoord - texMinMidCoord); + #endif +} + +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_clouds.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_clouds.glsl new file mode 100644 index 0000000..6f0f739 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_clouds.glsl @@ -0,0 +1,150 @@ +///////////////////////////////////// +// Complementary Shaders by EminGT // +///////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader////////// +#ifdef FRAGMENT_SHADER + +#if CLOUD_STYLE_DEFINE == 50 +// We use CLOUD_STYLE_DEFINE instead of CLOUD_STYLE in this file because Optifine can't use generated defines for pipeline stuff + in vec2 texCoord; + + flat in vec3 upVec, sunVec; + + in vec4 glColor; +#endif + +//Pipeline Constants// + +//Common Variables// +#if CLOUD_STYLE_DEFINE == 50 + float SdotU = dot(sunVec, upVec); + float sunFactor = SdotU < 0.0 ? clamp(SdotU + 0.375, 0.0, 0.75) / 0.75 : clamp(SdotU + 0.03125, 0.0, 0.0625) / 0.0625; + float sunVisibility = clamp(SdotU + 0.0625, 0.0, 0.125) / 0.125; + float sunVisibility2 = sunVisibility * sunVisibility; +#endif + +//Common Functions// + +//Includes// +#if CLOUD_STYLE_DEFINE == 50 + #include "/lib/colors/skyColors.glsl" + #include "/lib/util/spaceConversion.glsl" + + #if defined TAA && defined BORDER_FOG + #include "/lib/antialiasing/jitter.glsl" + #endif + + #ifdef ATM_COLOR_MULTS + #include "/lib/colors/colorMultipliers.glsl" + #endif + #ifdef MOON_PHASE_INF_ATMOSPHERE + #include "/lib/colors/moonPhaseInfluence.glsl" + #endif + + #ifdef COLOR_CODED_PROGRAMS + #include "/lib/misc/colorCodedPrograms.glsl" + #endif +#endif + +//Program// +void main() { + #if CLOUD_STYLE_DEFINE != 50 + discard; + #else + vec4 color = texture2D(tex, texCoord) * glColor; + + vec4 translucentMult = vec4(mix(vec3(0.666), color.rgb * (1.0 - pow2(pow2(color.a))), color.a), 1.0); + + #ifdef OVERWORLD + vec3 cloudLight = mix(vec3(0.8, 1.6, 1.5) * sqrt1(nightFactor), mix(dayDownSkyColor, dayMiddleSkyColor, 0.1), sunFactor); + color.rgb *= sqrt(cloudLight) * (1.2 + 0.4 * noonFactor * invRainFactor); + + #if CLOUD_R != 100 || CLOUD_G != 100 || CLOUD_B != 100 + color.rgb *= vec3(CLOUD_R, CLOUD_G, CLOUD_B) * 0.01; + #endif + #ifdef ATM_COLOR_MULTS + color.rgb *= sqrt(GetAtmColorMult()); // C72380KD - Reduced atmColorMult impact on things + #endif + #ifdef MOON_PHASE_INF_ATMOSPHERE + color.rgb *= moonPhaseInfluence; + #endif + #endif + + #if defined BORDER_FOG && !defined DREAM_TWEAKED_BORDERFOG + vec3 screenPos = vec3(gl_FragCoord.xy / vec2(viewWidth, viewHeight), gl_FragCoord.z); + #ifdef TAA + vec3 viewPos = ScreenToView(vec3(TAAJitter(screenPos.xy, -0.5), screenPos.z)); + #else + vec3 viewPos = ScreenToView(screenPos); + #endif + vec3 playerPos = ViewToPlayer(viewPos); + + float xzMaxDistance = max(abs(playerPos.x), abs(playerPos.z)); + float cloudDistance = 375.0; + cloudDistance = clamp((cloudDistance - xzMaxDistance) / cloudDistance, 0.0, 1.0); + color.a *= clamp01(cloudDistance * 3.0); + #endif + + #ifdef COLOR_CODED_PROGRAMS + ColorCodeProgram(color, -1); + #endif + + /* DRAWBUFFERS:063 */ + gl_FragData[0] = color; + gl_FragData[1] = vec4(0.0, 0.0, 0.0, 1.0); + gl_FragData[2] = vec4(1.0 - translucentMult.rgb, translucentMult.a); + #endif +} + +#endif + +//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader////////// +#ifdef VERTEX_SHADER + +#if CLOUD_STYLE_DEFINE == 50 + out vec2 texCoord; + + flat out vec3 upVec, sunVec; + + out vec4 glColor; +#endif + +//Attributes// + +//Common Variables// + +//Common Functions// + +//Includes// +#if CLOUD_STYLE_DEFINE == 50 + #ifdef TAA + #include "/lib/antialiasing/jitter.glsl" + #endif +#endif + +//Program// +void main() { + #if CLOUD_STYLE_DEFINE != 50 + gl_Position = vec4(-1.0); + #else + texCoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + + glColor = gl_Color; + + upVec = normalize(gbufferModelView[1].xyz); + sunVec = GetSunVector(); + + vec4 position = gbufferModelViewInverse * gl_ModelViewMatrix * gl_Vertex; + gl_Position = gl_ProjectionMatrix * gbufferModelView * position; + + #ifdef TAA + gl_Position.xy = TAAJitter(gl_Position.xy, gl_Position.w); + #endif + #endif +} + +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_damagedblock.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_damagedblock.glsl new file mode 100644 index 0000000..0649b98 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_damagedblock.glsl @@ -0,0 +1,63 @@ +////////////////////////////////// +// Complementary Base by EminGT // +////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader////////// +#ifdef FRAGMENT_SHADER + +in vec2 texCoord; + +flat in vec4 glColor; + +//Pipeline Constants// + +//Common Variables// + +//Common Functions// + +//Includes// +#ifdef COLOR_CODED_PROGRAMS + #include "/lib/misc/colorCodedPrograms.glsl" +#endif + +//Program// +void main() { + vec4 color = texture2D(tex, texCoord); + color.rgb *= glColor.rgb; + + #ifdef COLOR_CODED_PROGRAMS + ColorCodeProgram(color, -1); + #endif + + /* DRAWBUFFERS:0 */ + gl_FragData[0] = color; +} + +#endif + +//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader////////// +#ifdef VERTEX_SHADER + +out vec2 texCoord; + +flat out vec4 glColor; + +//Attributes// + +//Common Variables// + +//Common Functions// + +//Includes// + +//Program// +void main() { + gl_Position = ftransform(); + texCoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + glColor = gl_Color; +} + +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_entities.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_entities.glsl new file mode 100644 index 0000000..172ee52 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_entities.glsl @@ -0,0 +1,303 @@ +///////////////////////////////////// +// Complementary Shaders by EminGT // +///////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader////////// +#ifdef FRAGMENT_SHADER + +in vec2 texCoord; +in vec2 lmCoord; + +flat in vec3 upVec, sunVec, northVec, eastVec; +in vec3 normal; + +in vec4 glColor; + +#if defined GENERATED_NORMALS || defined COATED_TEXTURES || defined POM || defined IPBR && defined IS_IRIS + in vec2 signMidCoordPos; + flat in vec2 absMidCoordPos; + flat in vec2 midCoord; +#endif + +#if defined GENERATED_NORMALS || defined CUSTOM_PBR + flat in vec3 binormal, tangent; +#endif + +#ifdef POM + in vec3 viewVector; + + in vec4 vTexCoordAM; +#endif + +//Pipeline Constants// + +//Common Variables// +float NdotU = dot(normal, upVec); +float NdotUmax0 = max(NdotU, 0.0); +float SdotU = dot(sunVec, upVec); +float sunFactor = SdotU < 0.0 ? clamp(SdotU + 0.375, 0.0, 0.75) / 0.75 : clamp(SdotU + 0.03125, 0.0, 0.0625) / 0.0625; +float sunVisibility = clamp(SdotU + 0.0625, 0.0, 0.125) / 0.125; +float sunVisibility2 = sunVisibility * sunVisibility; +float shadowTimeVar1 = abs(sunVisibility - 0.5) * 2.0; +float shadowTimeVar2 = shadowTimeVar1 * shadowTimeVar1; +float shadowTime = shadowTimeVar2 * shadowTimeVar2; + +#ifdef OVERWORLD + vec3 lightVec = sunVec * ((timeAngle < 0.5325 || timeAngle > 0.9675) ? 1.0 : -1.0); +#else + vec3 lightVec = sunVec; +#endif + +#if defined GENERATED_NORMALS || defined CUSTOM_PBR + mat3 tbnMatrix = mat3( + tangent.x, binormal.x, normal.x, + tangent.y, binormal.y, normal.y, + tangent.z, binormal.z, normal.z + ); +#endif + +//Common Functions// + +//Includes// +#include "/lib/util/dither.glsl" +#include "/lib/util/spaceConversion.glsl" +#include "/lib/lighting/mainLighting.glsl" + +#if defined GENERATED_NORMALS || defined COATED_TEXTURES + #include "/lib/util/miplevel.glsl" +#endif + +#ifdef GENERATED_NORMALS + #include "/lib/materials/materialMethods/generatedNormals.glsl" +#endif + +#ifdef COATED_TEXTURES + #include "/lib/materials/materialMethods/coatedTextures.glsl" +#endif + +#if IPBR_EMISSIVE_MODE != 1 + #include "/lib/materials/materialMethods/customEmission.glsl" +#endif + +#ifdef CUSTOM_PBR + #include "/lib/materials/materialHandling/customMaterials.glsl" +#endif + +#ifdef COLOR_CODED_PROGRAMS + #include "/lib/misc/colorCodedPrograms.glsl" +#endif + +//Program// +void main() { + vec4 color = texture2D(tex, texCoord); + #ifdef GENERATED_NORMALS + vec3 colorP = color.rgb; + #endif + color *= glColor; + + float smoothnessD = 0.0, skyLightFactor = 0.0, materialMask = OSIEBCA * 254.0; // No SSAO, No TAA + vec3 normalM = normal; + + if (color.a > 0.001) { + vec3 screenPos = vec3(gl_FragCoord.xy / vec2(viewWidth, viewHeight), gl_FragCoord.z); + vec3 viewPos = ScreenToView(screenPos); + vec3 nViewPos = normalize(viewPos); + vec3 playerPos = ViewToPlayer(viewPos); + float lViewPos = length(viewPos); + + bool noSmoothLighting = atlasSize.x < 600.0; // To fix fire looking too dim + bool noGeneratedNormals = false; + float smoothnessG = 0.0, highlightMult = 0.0, emission = 0.0, noiseFactor = 0.75; + vec2 lmCoordM = lmCoord; + vec3 shadowMult = vec3(1.0); + #ifdef IPBR + #include "/lib/materials/materialHandling/entityMaterials.glsl" + + #ifdef IS_IRIS + vec3 maRecolor = vec3(0.0); + #include "/lib/materials/materialHandling/irisMaterials.glsl" + #endif + + if (materialMask != OSIEBCA * 254.0) materialMask += OSIEBCA * 100.0; // Entity Reflection Handling + + #ifdef GENERATED_NORMALS + if (!noGeneratedNormals) GenerateNormals(normalM, colorP); + #endif + + #ifdef COATED_TEXTURES + CoatTextures(color.rgb, noiseFactor, playerPos, false); + #endif + + #if IPBR_EMISSIVE_MODE != 1 + emission = GetCustomEmissionForIPBR(color, emission); + #endif + #else + #ifdef CUSTOM_PBR + GetCustomMaterials(color, normalM, lmCoordM, NdotU, shadowMult, smoothnessG, smoothnessD, highlightMult, emission, materialMask, viewPos, lViewPos); + #endif + + if (entityId == 50004) { // Lightning Bolt + #include "/lib/materials/specificMaterials/entities/lightningBolt.glsl" + } else if (entityId == 50008) { // Item Frame, Glow Item Frame + noSmoothLighting = true; + } else if (entityId == 50076) { // Boats + playerPos.y += 0.38; // to avoid water shadow and the black inner shadow bug + } + #endif + + color.rgb = mix(color.rgb, entityColor.rgb, entityColor.a); + + normalM = gl_FrontFacing ? normalM : -normalM; // Inverted Normal Workaround + vec3 geoNormal = normalM; + vec3 worldGeoNormal = normalize(ViewToPlayer(geoNormal * 10000.0)); + + DoLighting(color, shadowMult, playerPos, viewPos, lViewPos, geoNormal, normalM, + worldGeoNormal, lmCoordM, noSmoothLighting, false, false, + true, 0, smoothnessG, highlightMult, emission); + + #if defined IPBR && defined IS_IRIS + color.rgb += maRecolor; + #endif + + #ifdef PBR_REFLECTIONS + #ifdef OVERWORLD + skyLightFactor = pow2(max(lmCoord.y - 0.7, 0.0) * 3.33333); + #else + skyLightFactor = dot(shadowMult, shadowMult) / 3.0; + #endif + #endif + } + + #ifdef COLOR_CODED_PROGRAMS + ColorCodeProgram(color, -1); + #endif + + /* DRAWBUFFERS:06 */ + gl_FragData[0] = color; + gl_FragData[1] = vec4(smoothnessD, materialMask, skyLightFactor, 1.0); + + #if BLOCK_REFLECT_QUALITY >= 2 && RP_MODE >= 1 + /* DRAWBUFFERS:065 */ + gl_FragData[2] = vec4(mat3(gbufferModelViewInverse) * normalM, 1.0); + #endif +} + +#endif + +//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader////////// +#ifdef VERTEX_SHADER + +out vec2 texCoord; +out vec2 lmCoord; + +flat out vec3 upVec, sunVec, northVec, eastVec; +out vec3 normal; + +out vec4 glColor; + +#if defined GENERATED_NORMALS || defined COATED_TEXTURES || defined POM || defined IPBR && defined IS_IRIS + out vec2 signMidCoordPos; + flat out vec2 absMidCoordPos; + flat out vec2 midCoord; +#endif + +#if defined GENERATED_NORMALS || defined CUSTOM_PBR + flat out vec3 binormal, tangent; +#endif + +#ifdef POM + out vec3 viewVector; + + out vec4 vTexCoordAM; +#endif + +//Attributes// +#if defined GENERATED_NORMALS || defined COATED_TEXTURES || defined POM || defined IPBR && defined IS_IRIS + attribute vec4 mc_midTexCoord; +#endif + +#if defined GENERATED_NORMALS || defined CUSTOM_PBR + attribute vec4 at_tangent; +#endif + +//Common Variables// + +//Common Functions// + +//Includes// + +//Program// +void main() { + gl_Position = ftransform(); + + texCoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + lmCoord = GetLightMapCoordinates(); + + lmCoord.x = min(lmCoord.x, 0.9); + //Fixes some servers/mods making entities insanely bright, while also slightly reducing the max blocklight on a normal entity + + glColor = gl_Color; + + normal = normalize(gl_NormalMatrix * gl_Normal); + + upVec = normalize(gbufferModelView[1].xyz); + eastVec = normalize(gbufferModelView[0].xyz); + northVec = normalize(gbufferModelView[2].xyz); + sunVec = GetSunVector(); + + #if defined GENERATED_NORMALS || defined COATED_TEXTURES || defined POM || defined IPBR && defined IS_IRIS + midCoord = (gl_TextureMatrix[0] * mc_midTexCoord).st; + vec2 texMinMidCoord = texCoord - midCoord; + signMidCoordPos = sign(texMinMidCoord); + absMidCoordPos = abs(texMinMidCoord); + #endif + + #if defined GENERATED_NORMALS || defined CUSTOM_PBR + binormal = normalize(gl_NormalMatrix * cross(at_tangent.xyz, gl_Normal.xyz) * at_tangent.w); + tangent = normalize(gl_NormalMatrix * at_tangent.xyz); + #endif + + #ifdef POM + mat3 tbnMatrix = mat3( + tangent.x, binormal.x, normal.x, + tangent.y, binormal.y, normal.y, + tangent.z, binormal.z, normal.z + ); + + viewVector = tbnMatrix * (gl_ModelViewMatrix * gl_Vertex).xyz; + + vTexCoordAM.zw = abs(texMinMidCoord) * 2; + vTexCoordAM.xy = min(texCoord, midCoord - texMinMidCoord); + #endif + + #ifdef GBUFFERS_ENTITIES_GLOWING + if (glColor.a > 0.99) gl_Position.z *= 0.01; + #endif + + #ifdef FLICKERING_FIX + if (entityId == 50008 || entityId == 50012) { // Item Frame, Glow Item Frame + if (dot(normal, upVec) > 0.99) { + vec4 position = gbufferModelViewInverse * gl_ModelViewMatrix * gl_Vertex; + vec3 comPos = fract(position.xyz + cameraPosition); + comPos = abs(comPos - vec3(0.5)); + if ((comPos.y > 0.437 && comPos.y < 0.438) || (comPos.y > 0.468 && comPos.y < 0.469)) { + gl_Position.z += 0.0001; + } + } + if (gl_Normal.y == 1.0) { // Maps + normal = upVec * 2.0; + } + } else if (entityId == 50084) { // Slime, Chicken + gl_Position.z -= 0.00015; + } + + #if SHADOW_QUALITY == -1 + if (glColor.a < 0.5) gl_Position.z += 0.0005; + #endif + #endif +} + +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_hand.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_hand.glsl new file mode 100644 index 0000000..f066278 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_hand.glsl @@ -0,0 +1,263 @@ +///////////////////////////////////// +// Complementary Shaders by EminGT // +///////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader////////// +#ifdef FRAGMENT_SHADER + +in vec2 texCoord; +in vec2 lmCoord; + +flat in vec3 upVec, sunVec, northVec, eastVec; +in vec3 normal; + +in vec4 glColor; + +#if defined GENERATED_NORMALS || defined COATED_TEXTURES || defined POM || defined IPBR && defined IS_IRIS + in vec2 signMidCoordPos; + flat in vec2 absMidCoordPos; + flat in vec2 midCoord; +#endif + +#if defined GENERATED_NORMALS || defined CUSTOM_PBR + flat in vec3 binormal, tangent; +#endif + +#ifdef POM + in vec3 viewVector; + + in vec4 vTexCoordAM; +#endif + +//Pipeline Constants// + +//Common Variables// +float NdotU = dot(normal, vec3(0.0, 1.0, 0.0)); // NdotU is different here to improve held map visibility +float NdotUmax0 = max(NdotU, 0.0); +float SdotU = dot(sunVec, upVec); +float sunFactor = SdotU < 0.0 ? clamp(SdotU + 0.375, 0.0, 0.75) / 0.75 : clamp(SdotU + 0.03125, 0.0, 0.0625) / 0.0625; +float sunVisibility = clamp(SdotU + 0.0625, 0.0, 0.125) / 0.125; +float sunVisibility2 = sunVisibility * sunVisibility; +float shadowTimeVar1 = abs(sunVisibility - 0.5) * 2.0; +float shadowTimeVar2 = shadowTimeVar1 * shadowTimeVar1; +float shadowTime = shadowTimeVar2 * shadowTimeVar2; + +#ifdef OVERWORLD + vec3 lightVec = sunVec * ((timeAngle < 0.5325 || timeAngle > 0.9675) ? 1.0 : -1.0); +#else + vec3 lightVec = sunVec; +#endif + +#if defined GENERATED_NORMALS || defined CUSTOM_PBR + mat3 tbnMatrix = mat3( + tangent.x, binormal.x, normal.x, + tangent.y, binormal.y, normal.y, + tangent.z, binormal.z, normal.z + ); +#endif + +//Common Functions// + +//Includes// +#include "/lib/util/spaceConversion.glsl" +#include "/lib/lighting/mainLighting.glsl" + +#if defined GENERATED_NORMALS || defined COATED_TEXTURES + #include "/lib/util/miplevel.glsl" +#endif + +#ifdef GENERATED_NORMALS + #include "/lib/materials/materialMethods/generatedNormals.glsl" +#endif + +#ifdef COATED_TEXTURES + #include "/lib/materials/materialMethods/coatedTextures.glsl" +#endif + +#if IPBR_EMISSIVE_MODE != 1 + #include "/lib/materials/materialMethods/customEmission.glsl" +#endif + +#ifdef CUSTOM_PBR + #include "/lib/materials/materialHandling/customMaterials.glsl" +#endif + +#ifdef COLOR_CODED_PROGRAMS + #include "/lib/misc/colorCodedPrograms.glsl" +#endif + +//Program// +void main() { + vec4 color = texture2D(tex, texCoord); + + float smoothnessD = 0.0, skyLightFactor = 0.0, materialMask = OSIEBCA * 254.0; // No SSAO, No TAA + vec3 normalM = normal; + if (color.a > 0.00001) { + #ifdef GENERATED_NORMALS + vec3 colorP = color.rgb; + #endif + color *= glColor; + + vec3 screenPos = vec3(gl_FragCoord.xy / vec2(viewWidth, viewHeight), gl_FragCoord.z + 0.38); + vec3 viewPos = ScreenToView(screenPos); + vec3 playerPos = ViewToPlayer(viewPos); + + if (color.a < 0.75) materialMask = 0.0; + + bool noSmoothLighting = true, noGeneratedNormals = false; + float smoothnessG = 0.0, highlightMult = 1.0, emission = 0.0, noiseFactor = 0.6; + vec2 lmCoordM = lmCoord; + vec3 geoNormal = normalM; + vec3 worldGeoNormal = normalize(ViewToPlayer(geoNormal * 10000.0)); + vec3 shadowMult = vec3(0.4); + #ifdef IPBR + #ifdef IS_IRIS + vec3 maRecolor = vec3(0.0); + #include "/lib/materials/materialHandling/irisMaterials.glsl" + + if (materialMask != OSIEBCA * 254.0) materialMask += OSIEBCA * 100.0; // Entity Reflection Handling + #endif + + #ifdef GENERATED_NORMALS + if (!noGeneratedNormals) GenerateNormals(normalM, colorP); + #endif + + #ifdef COATED_TEXTURES + CoatTextures(color.rgb, noiseFactor, playerPos, false); + #endif + + #if IPBR_EMISSIVE_MODE != 1 + emission = GetCustomEmissionForIPBR(color, emission); + #endif + #else + #ifdef CUSTOM_PBR + GetCustomMaterials(color, normalM, lmCoordM, NdotU, shadowMult, smoothnessG, smoothnessD, highlightMult, emission, materialMask, viewPos, 0.0); + #endif + #endif + + DoLighting(color, shadowMult, playerPos, viewPos, 0.0, geoNormal, normalM, + worldGeoNormal, lmCoordM, noSmoothLighting, false, false, + false, 0, smoothnessG, highlightMult, emission); + + #if defined IPBR && defined IS_IRIS + color.rgb += maRecolor; + #endif + + #if (defined CUSTOM_PBR || defined IPBR && defined IS_IRIS) && defined PBR_REFLECTIONS + #ifdef OVERWORLD + skyLightFactor = pow2(max(lmCoord.y - 0.7, 0.0) * 3.33333); + #else + skyLightFactor = dot(shadowMult, shadowMult) / 3.0; + #endif + #endif + } + + #ifdef COLOR_CODED_PROGRAMS + ColorCodeProgram(color, -1); + #endif + + /* DRAWBUFFERS:06 */ + gl_FragData[0] = color; + gl_FragData[1] = vec4(smoothnessD, materialMask, skyLightFactor, 1.0); + + #if BLOCK_REFLECT_QUALITY >= 2 && (RP_MODE >= 2 || defined IS_IRIS) + /* DRAWBUFFERS:065 */ + gl_FragData[2] = vec4(mat3(gbufferModelViewInverse) * normalM, 1.0); + #endif +} + +#endif + +//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader////////// +#ifdef VERTEX_SHADER + +out vec2 texCoord; +out vec2 lmCoord; + +flat out vec3 upVec, sunVec, northVec, eastVec; +out vec3 normal; + +out vec4 glColor; + +#if defined GENERATED_NORMALS || defined COATED_TEXTURES || defined POM || defined IPBR && defined IS_IRIS + out vec2 signMidCoordPos; + flat out vec2 absMidCoordPos; + flat out vec2 midCoord; +#endif + +#if defined GENERATED_NORMALS || defined CUSTOM_PBR + flat out vec3 binormal, tangent; +#endif + +#ifdef POM + out vec3 viewVector; + + out vec4 vTexCoordAM; +#endif + +//Attributes// +#if defined GENERATED_NORMALS || defined COATED_TEXTURES || defined POM || defined IPBR && defined IS_IRIS + attribute vec4 mc_midTexCoord; +#endif + +#if defined GENERATED_NORMALS || defined CUSTOM_PBR + attribute vec4 at_tangent; +#endif + +//Common Variables// + +//Common Functions// + +//Includes// + +//Program// +void main() { + gl_Position = ftransform(); + + texCoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + + lmCoord = GetLightMapCoordinates(); + + glColor = gl_Color; + + normal = normalize(gl_NormalMatrix * gl_Normal); + + upVec = normalize(gbufferModelView[1].xyz); + eastVec = normalize(gbufferModelView[0].xyz); + northVec = normalize(gbufferModelView[2].xyz); + sunVec = GetSunVector(); + + #if defined GENERATED_NORMALS || defined COATED_TEXTURES || defined POM || defined IPBR && defined IS_IRIS + midCoord = (gl_TextureMatrix[0] * mc_midTexCoord).st; + vec2 texMinMidCoord = texCoord - midCoord; + signMidCoordPos = sign(texMinMidCoord); + absMidCoordPos = abs(texMinMidCoord); + #endif + + #if defined GENERATED_NORMALS || defined CUSTOM_PBR + binormal = normalize(gl_NormalMatrix * cross(at_tangent.xyz, gl_Normal.xyz) * at_tangent.w); + tangent = normalize(gl_NormalMatrix * at_tangent.xyz); + #endif + + #ifdef POM + mat3 tbnMatrix = mat3( + tangent.x, binormal.x, normal.x, + tangent.y, binormal.y, normal.y, + tangent.z, binormal.z, normal.z + ); + + viewVector = tbnMatrix * (gl_ModelViewMatrix * gl_Vertex).xyz; + + vTexCoordAM.zw = abs(texMinMidCoord) * 2; + vTexCoordAM.xy = min(texCoord, midCoord - texMinMidCoord); + #endif + + #if HAND_SWAYING > 0 + #include "/lib/misc/handSway.glsl" + #endif +} + +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_skybasic.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_skybasic.glsl new file mode 100644 index 0000000..b7834ff --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_skybasic.glsl @@ -0,0 +1,214 @@ +///////////////////////////////////// +// Complementary Shaders by EminGT // +///////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader////////// +#ifdef FRAGMENT_SHADER + +flat in vec3 upVec, sunVec; + +flat in vec4 glColor; + +#ifdef OVERWORLD + flat in float vanillaStars; +#endif + +//Pipeline Constants// + +//Common Variables// +float SdotU = dot(sunVec, upVec); +float sunFactor = SdotU < 0.0 ? clamp(SdotU + 0.375, 0.0, 0.75) / 0.75 : clamp(SdotU + 0.03125, 0.0, 0.0625) / 0.0625; +float sunVisibility = clamp(SdotU + 0.0625, 0.0, 0.125) / 0.125; +float sunVisibility2 = sunVisibility * sunVisibility; +float shadowTimeVar1 = abs(sunVisibility - 0.5) * 2.0; +float shadowTimeVar2 = shadowTimeVar1 * shadowTimeVar1; +float shadowTime = shadowTimeVar2 * shadowTimeVar2; + +//Common Functions// + +//Includes// +#include "/lib/util/dither.glsl" + +#ifdef OVERWORLD + #include "/lib/atmospherics/sky.glsl" + #include "/lib/atmospherics/stars.glsl" +#endif + +#ifdef CAVE_FOG + #include "/lib/atmospherics/fog/caveFactor.glsl" +#endif + +#ifdef ATM_COLOR_MULTS + #include "/lib/colors/colorMultipliers.glsl" +#endif +#ifdef MOON_PHASE_INF_ATMOSPHERE + #include "/lib/colors/moonPhaseInfluence.glsl" +#endif + +#ifdef COLOR_CODED_PROGRAMS + #include "/lib/misc/colorCodedPrograms.glsl" +#endif + +#if SUN_MOON_STYLE >= 2 + #include "/lib/util/spaceConversion.glsl" +#endif + +//Program// +void main() { + vec4 color = vec4(glColor.rgb, 1.0); + + #ifdef OVERWORLD + if (vanillaStars > 0.5) { + discard; + } + + #if IRIS_VERSION >= 10800 && IRIS_VERSION < 10805 + if (renderStage == MC_RENDER_STAGE_MOON) { + discard; // Fixes the vanilla sky gradient causing the sun to disappear + } + #endif + + vec4 screenPos = vec4(gl_FragCoord.xy / vec2(viewWidth, viewHeight), gl_FragCoord.z, 1.0); + vec4 viewPos = gbufferProjectionInverse * (screenPos * 2.0 - 1.0); + viewPos /= viewPos.w; + vec3 nViewPos = normalize(viewPos.xyz); + + float VdotU = dot(nViewPos, upVec); + float VdotS = dot(nViewPos, sunVec); + float dither = Bayer8(gl_FragCoord.xy); + + color.rgb = GetSky(VdotU, VdotS, dither, true, false); + + #ifdef ATM_COLOR_MULTS + color.rgb *= GetAtmColorMult(); + #endif + #ifdef MOON_PHASE_INF_ATMOSPHERE + color.rgb *= moonPhaseInfluence; + #endif + + vec2 starCoord = GetStarCoord(viewPos.xyz, 0.5); + color.rgb += GetStars(starCoord, VdotU, VdotS); + + #if SUN_MOON_STYLE >= 2 + float absVdotS = abs(VdotS); + #if SUN_MOON_STYLE == 2 + float sunSizeFactor1 = 0.9975; + float sunSizeFactor2 = 400.0; + float moonCrescentOffset = 0.0055; + float moonPhaseFactor1 = 2.45; + float moonPhaseFactor2 = 750.0; + #else + float sunSizeFactor1 = 0.9983; + float sunSizeFactor2 = 588.235; + float moonCrescentOffset = 0.0042; + float moonPhaseFactor1 = 2.2; + float moonPhaseFactor2 = 1000.0; + #endif + if (absVdotS > sunSizeFactor1) { + float sunMoonMixer = sqrt1(sunSizeFactor2 * (absVdotS - sunSizeFactor1)); + + #ifdef SUN_MOON_DURING_RAIN + sunMoonMixer *= 1.0 - 0.4 * rainFactor2; + #else + sunMoonMixer *= 1.0 - rainFactor2; + #endif + + if (VdotS > 0.0) { + sunMoonMixer = pow2(sunMoonMixer) * GetHorizonFactor(SdotU); + + #ifdef CAVE_FOG + sunMoonMixer *= 1.0 - 0.65 * GetCaveFactor(); + #endif + + color.rgb = mix(color.rgb, vec3(0.9, 0.5, 0.3) * 10.0, sunMoonMixer); + } else { + float horizonFactor = GetHorizonFactor(-SdotU); + sunMoonMixer = max0(sunMoonMixer - 0.25) * 1.33333 * horizonFactor; + + starCoord = GetStarCoord(viewPos.xyz, 1.0) * 0.5 + 0.617; + float moonNoise = texture2D(noisetex, starCoord).g + + texture2D(noisetex, starCoord * 2.5).g * 0.7 + + texture2D(noisetex, starCoord * 5.0).g * 0.5; + moonNoise = max0(moonNoise - 0.75) * 1.7; + vec3 moonColor = vec3(0.38, 0.4, 0.5) * (1.2 - (0.2 + 0.2 * sqrt1(nightFactor)) * moonNoise); + + if (moonPhase >= 1) { + float moonPhaseOffset = 0.0; + if (moonPhase != 4) { + moonPhaseOffset = moonCrescentOffset; + moonColor *= 8.5; + } else moonColor *= 10.0; + if (moonPhase > 4) { + moonPhaseOffset = -moonPhaseOffset; + } + + float ang = fract(timeAngle - (0.25 + moonPhaseOffset)); + ang = (ang + (cos(ang * 3.14159265358979) * -0.5 + 0.5 - ang) / 3.0) * 6.28318530717959; + vec2 sunRotationData2 = vec2(cos(sunPathRotation * 0.01745329251994), -sin(sunPathRotation * 0.01745329251994)); + vec3 rawSunVec2 = (gbufferModelView * vec4(vec3(-sin(ang), cos(ang) * sunRotationData2) * 2000.0, 1.0)).xyz; + + float moonPhaseVdosS = dot(nViewPos, normalize(rawSunVec2.xyz)); + + sunMoonMixer *= pow2(1.0 - min1(pow(abs(moonPhaseVdosS), moonPhaseFactor2) * moonPhaseFactor1)); + } else moonColor *= 4.0; + + #ifdef CAVE_FOG + sunMoonMixer *= 1.0 - 0.5 * GetCaveFactor(); + #endif + + color.rgb = mix(color.rgb, moonColor, sunMoonMixer); + } + } + #endif + #endif + + color.rgb *= 1.0 - maxBlindnessDarkness; + + #ifdef COLOR_CODED_PROGRAMS + ColorCodeProgram(color, -1); + #endif + + /* DRAWBUFFERS:0 */ + gl_FragData[0] = color; +} + +#endif + +//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader////////// +#ifdef VERTEX_SHADER + +flat out vec3 upVec, sunVec; + +flat out vec4 glColor; + +#ifdef OVERWORLD + flat out float vanillaStars; +#endif + +//Attributes// + +//Common Variables// + +//Common Functions// + +//Includes// + +//Program// +void main() { + gl_Position = ftransform(); + + glColor = gl_Color; + + upVec = normalize(gbufferModelView[1].xyz); + sunVec = GetSunVector(); + + #ifdef OVERWORLD + //Vanilla Star Dedection by Builderb0y + vanillaStars = float(glColor.r == glColor.g && glColor.g == glColor.b && glColor.r > 0.0 && glColor.r < 0.51); + #endif +} + +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_skytextured.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_skytextured.glsl new file mode 100644 index 0000000..14e8daa --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_skytextured.glsl @@ -0,0 +1,153 @@ +///////////////////////////////////// +// Complementary Shaders by EminGT // +///////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader////////// +#ifdef FRAGMENT_SHADER + +in vec2 texCoord; + +flat in vec4 glColor; + +#ifdef OVERWORLD + flat in vec3 upVec, sunVec; +#endif + +//Pipeline Constants// + +//Common Variables// +#ifdef OVERWORLD + float SdotU = dot(sunVec, upVec); + float sunVisibility = clamp(SdotU + 0.0625, 0.0, 0.125) / 0.125; + float sunVisibility2 = sunVisibility * sunVisibility; +#endif + +//Common Functions// + +//Includes// +#include "/lib/colors/lightAndAmbientColors.glsl" + +#ifdef CAVE_FOG + #include "/lib/atmospherics/fog/caveFactor.glsl" +#endif + +#ifdef COLOR_CODED_PROGRAMS + #include "/lib/misc/colorCodedPrograms.glsl" +#endif + +//Program// +void main() { + #ifdef OVERWORLD + vec2 tSize = textureSize(tex, 0); + vec4 color = texture2D(tex, texCoord); + color.rgb *= glColor.rgb; + + vec4 screenPos = vec4(gl_FragCoord.xy / vec2(viewWidth, viewHeight), gl_FragCoord.z, 1.0); + vec4 viewPos = gbufferProjectionInverse * (screenPos * 2.0 - 1.0); + viewPos /= viewPos.w; + vec3 nViewPos = normalize(viewPos.xyz); + + float VdotS = dot(nViewPos, sunVec); + float VdotU = dot(nViewPos, upVec); + + #ifdef IS_IRIS + bool isSun = renderStage == MC_RENDER_STAGE_SUN; + bool isMoon = renderStage == MC_RENDER_STAGE_MOON; + #else + bool tSizeCheck = abs(tSize.y - 264.0) < 248.5; //tSize.y must range from 16 to 512 + bool sunSideCheck = VdotS > 0.0; + bool isSun = tSizeCheck && sunSideCheck; + bool isMoon = tSizeCheck && !sunSideCheck; + #endif + + if (isSun || isMoon) { + #if SUN_MOON_STYLE >= 2 + discard; + #endif + + if (isSun) { + color.rgb *= dot(color.rgb, color.rgb) * normalize(lightColor) * 3.2; + color.rgb *= 0.25 + (0.75 - 0.25 * rainFactor) * sunVisibility2; + } + + if (isMoon) { + color.rgb *= smoothstep1(min1(length(color.rgb))) * 1.3; + } + + color.rgb *= GetHorizonFactor(VdotU); + + #ifdef CAVE_FOG + color.rgb *= 1.0 - 0.75 * GetCaveFactor(); + #endif + } else { // Custom Sky + #if MC_VERSION >= 11300 + color.rgb *= color.rgb * smoothstep1(sqrt1(max0(VdotU))); + #else + discard; + // Old mc custom skyboxes are weirdly broken, so we discard. + #endif + } + + if (isEyeInWater == 1) color.rgb *= 0.25; + + #ifdef SUN_MOON_DURING_RAIN + color.a *= 1.0 - 0.8 * rainFactor; + #else + color.a *= 1.0 - rainFactor; + #endif + #endif + + #ifdef NETHER + vec4 color = vec4(0.0); + #endif + + #ifdef END + vec4 color = vec4(endSkyColor, 1.0); + #endif + + #ifdef COLOR_CODED_PROGRAMS + ColorCodeProgram(color, -1); + #endif + + /* DRAWBUFFERS:0 */ + gl_FragData[0] = color; +} + +#endif + +//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader////////// +#ifdef VERTEX_SHADER + +out vec2 texCoord; + +flat out vec4 glColor; + +#ifdef OVERWORLD + flat out vec3 upVec, sunVec; +#endif + +//Attributes// + +//Common Variables// + +//Common Functions// + +//Includes// + +//Program// +void main() { + gl_Position = ftransform(); + texCoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + + glColor = gl_Color; + + #ifdef OVERWORLD + upVec = normalize(gbufferModelView[1].xyz); + sunVec = GetSunVector(); + #endif +} + +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_spidereyes.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_spidereyes.glsl new file mode 100644 index 0000000..d506550 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_spidereyes.glsl @@ -0,0 +1,75 @@ +///////////////////////////////////// +// Complementary Shaders by EminGT // +///////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader////////// +#ifdef FRAGMENT_SHADER + +in vec2 texCoord; + +in vec4 glColor; + +//Pipeline Constants// + +//Common Variables// + +//Common Functions// + +//Includes// +#ifdef COLOR_CODED_PROGRAMS + #include "/lib/misc/colorCodedPrograms.glsl" +#endif + +//Program// +void main() { + vec4 color = texture2D(tex, texCoord) * glColor; + + #ifdef IPBR + if (CheckForColor(color.rgb, vec3(224, 121, 250))) { // Enderman Eye Edges + color.rgb = vec3(0.8, 0.25, 0.8); + } + #endif + + color.rgb *= 1.0 - 0.6 * pow2(pow2(min1(GetLuminance(color.rgb) * 1.2))); // Fixes ultra bright Breeze + + color.rgb = pow1_5(color.rgb); + color.rgb *= pow2(1.0 + color.b + 0.5 * color.g) * 1.5; + + #ifdef COLOR_CODED_PROGRAMS + ColorCodeProgram(color, -1); + #endif + + /* DRAWBUFFERS:0 */ + gl_FragData[0] = color; +} + +#endif + +//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader////////// +#ifdef VERTEX_SHADER + +out vec2 texCoord; + +out vec4 glColor; + +//Attributes// + +//Common Variables// + +//Common Functions// + +//Includes// + +//Program// +void main() { + gl_Position = ftransform(); + + texCoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + + glColor = gl_Color; +} + +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_terrain.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_terrain.glsl new file mode 100644 index 0000000..54a6525 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_terrain.glsl @@ -0,0 +1,491 @@ +///////////////////////////////////// +// Complementary Shaders by EminGT // +///////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader////////// +#ifdef FRAGMENT_SHADER + +flat in int mat; + +in vec2 texCoord; +in vec2 lmCoord; +in vec2 signMidCoordPos; +flat in vec2 absMidCoordPos; +flat in vec2 midCoord; + +flat in vec3 upVec, sunVec, northVec, eastVec; +in vec3 normal; + +in vec4 glColorRaw; + +#if RAIN_PUDDLES >= 1 || defined GENERATED_NORMALS || defined CUSTOM_PBR + flat in vec3 binormal, tangent; +#endif + +#ifdef POM + in vec3 viewVector; + + in vec4 vTexCoordAM; +#endif + +#if ANISOTROPIC_FILTER > 0 + in vec4 spriteBounds; +#endif + +//Pipeline Constants// +#if COLORED_LIGHTING_INTERNAL > 0 + const float voxelDistance = 32.0; +#endif + +//Common Variables// +float NdotU = dot(normal, upVec); +float NdotUmax0 = max(NdotU, 0.0); +float SdotU = dot(sunVec, upVec); +float sunFactor = SdotU < 0.0 ? clamp(SdotU + 0.375, 0.0, 0.75) / 0.75 : clamp(SdotU + 0.03125, 0.0, 0.0625) / 0.0625; +float sunVisibility = clamp(SdotU + 0.0625, 0.0, 0.125) / 0.125; +float sunVisibility2 = sunVisibility * sunVisibility; +float shadowTimeVar1 = abs(sunVisibility - 0.5) * 2.0; +float shadowTimeVar2 = shadowTimeVar1 * shadowTimeVar1; +float shadowTime = shadowTimeVar2 * shadowTimeVar2; + +vec4 glColor = glColorRaw; + +#ifdef OVERWORLD + vec3 lightVec = sunVec * ((timeAngle < 0.5325 || timeAngle > 0.9675) ? 1.0 : -1.0); +#else + vec3 lightVec = sunVec; +#endif + +#if RAIN_PUDDLES >= 1 || defined GENERATED_NORMALS || defined CUSTOM_PBR + mat3 tbnMatrix = mat3( + tangent.x, binormal.x, normal.x, + tangent.y, binormal.y, normal.y, + tangent.z, binormal.z, normal.z + ); +#endif + +//Common Functions// +void DoFoliageColorTweaks(inout vec3 color, inout vec3 shadowMult, inout float snowMinNdotU, vec3 viewPos, vec3 nViewPos, float lViewPos, float dither) { + #ifdef DREAM_TWEAKED_LIGHTING + return; + #endif + float factor = max(80.0 - lViewPos, 0.0); + shadowMult *= 1.0 + 0.004 * noonFactor * factor; + + if (signMidCoordPos.x < 0.0) color.rgb *= 1.08; + else color.rgb *= 0.93; + + #ifdef FOLIAGE_ALT_SUBSURFACE + float edgeSize = 0.12; + float edgeEffectFactor = 0.75; + + edgeEffectFactor *= (sqrt1(abs(dot(nViewPos, normal))) - 0.1) * 1.111; + + vec2 texCoordM = texCoord; + texCoordM.y -= edgeSize * pow2(dither) * absMidCoordPos.y; + texCoordM.y = max(texCoordM.y, midCoord.y - absMidCoordPos.y); + vec4 colorSample = texture2DLod(tex, texCoordM, 0); + + if (colorSample.a < 0.5) { + float edgeFactor = dot(nViewPos, lightVec); + shadowMult *= 1.0 + edgeEffectFactor * (1.0 + edgeFactor); + } + + shadowMult *= 1.0 + 0.2333 * edgeEffectFactor * (dot(normal, lightVec) - 1.0); + #endif + + #ifdef SNOWY_WORLD + if (glColor.g - glColor.b > 0.01) + snowMinNdotU = min(pow2(pow2(max0(color.g * 2.0 - color.r - color.b))) * 5.0, 0.1); + else + snowMinNdotU = min(pow2(pow2(max0(color.g * 2.0 - color.r - color.b))) * 3.0, 0.1) * 0.25; + + #ifdef DISTANT_HORIZONS + // DH chunks don't have foliage. The border looks too noticeable without this tweak + snowMinNdotU = mix(snowMinNdotU, 0.09, smoothstep(far * 0.5, far, lViewPos)); + #endif + #endif +} + +void DoBrightBlockTweaks(vec3 color, float minLight, inout vec3 shadowMult, inout float highlightMult) { + float factor = mix(minLight, 1.0, pow2(pow2(color.r))); + shadowMult = vec3(factor); + highlightMult /= factor; +} + +void DoOceanBlockTweaks(inout float smoothnessD) { + smoothnessD *= max0(lmCoord.y - 0.95) * 20.0; +} + +//Includes// +#include "/lib/util/spaceConversion.glsl" +#include "/lib/lighting/mainLighting.glsl" +#include "/lib/util/dither.glsl" + +#ifdef TAA + #include "/lib/antialiasing/jitter.glsl" +#endif + +#if defined GENERATED_NORMALS || defined COATED_TEXTURES || ANISOTROPIC_FILTER > 0 || defined DISTANT_LIGHT_BOKEH + #include "/lib/util/miplevel.glsl" +#endif + +#ifdef GENERATED_NORMALS + #include "/lib/materials/materialMethods/generatedNormals.glsl" +#endif + +#ifdef COATED_TEXTURES + #include "/lib/materials/materialMethods/coatedTextures.glsl" +#endif + +#if IPBR_EMISSIVE_MODE != 1 + #include "/lib/materials/materialMethods/customEmission.glsl" +#endif + +#ifdef CUSTOM_PBR + #include "/lib/materials/materialHandling/customMaterials.glsl" +#endif + +#ifdef COLOR_CODED_PROGRAMS + #include "/lib/misc/colorCodedPrograms.glsl" +#endif + +#if ANISOTROPIC_FILTER > 0 + #include "/lib/materials/materialMethods/anisotropicFiltering.glsl" +#endif + +#ifdef PUDDLE_VOXELIZATION + #include "/lib/misc/puddleVoxelization.glsl" +#endif + +#ifdef SNOWY_WORLD + #include "/lib/materials/materialMethods/snowyWorld.glsl" +#endif + +#ifdef DISTANT_LIGHT_BOKEH + #include "/lib/misc/distantLightBokeh.glsl" +#endif + +//Program// +void main() { + #if ANISOTROPIC_FILTER == 0 + vec4 color = texture2D(tex, texCoord); + #else + vec4 color = textureAF(tex, texCoord); + #endif + + float smoothnessD = 0.0, materialMask = 0.0, skyLightFactor = 0.0; + + #if !defined POM || !defined POM_ALLOW_CUTOUT + if (color.a <= 0.00001) discard; + #endif + + vec3 colorP = color.rgb; + color.rgb *= glColor.rgb; + + vec3 screenPos = vec3(gl_FragCoord.xy / vec2(viewWidth, viewHeight), gl_FragCoord.z); + #ifdef TAA + vec3 viewPos = ScreenToView(vec3(TAAJitter(screenPos.xy, -0.5), screenPos.z)); + #else + vec3 viewPos = ScreenToView(screenPos); + #endif + float lViewPos = length(viewPos); + vec3 nViewPos = normalize(viewPos); + vec3 playerPos = ViewToPlayer(viewPos); + + float dither = Bayer64(gl_FragCoord.xy); + #ifdef TAA + dither = fract(dither + goldenRatio * mod(float(frameCounter), 3600.0)); + #endif + + int subsurfaceMode = 0; + bool noSmoothLighting = false, noDirectionalShading = false, noVanillaAO = false, centerShadowBias = false, noGeneratedNormals = false, doTileRandomisation = true; + float smoothnessG = 0.0, highlightMult = 1.0, emission = 0.0, noiseFactor = 1.0, snowFactor = 1.0, snowMinNdotU = 0.0, noPuddles = 0.0; + vec2 lmCoordM = lmCoord; + vec3 normalM = normal, geoNormal = normal, shadowMult = vec3(1.0); + vec3 worldGeoNormal = normalize(ViewToPlayer(geoNormal * 10000.0)); + + #ifdef IPBR + vec3 maRecolor = vec3(0.0); + #include "/lib/materials/materialHandling/terrainMaterials.glsl" + + //int blockEntityId = mat; + //#include "/lib/materials/materialHandling/blockEntityMaterials.glsl" + + #ifdef GENERATED_NORMALS + if (!noGeneratedNormals) GenerateNormals(normalM, colorP); + #endif + + #ifdef COATED_TEXTURES + CoatTextures(color.rgb, noiseFactor, playerPos, doTileRandomisation); + #endif + + #if IPBR_EMISSIVE_MODE != 1 + emission = GetCustomEmissionForIPBR(color, emission); + #endif + #else + #ifdef CUSTOM_PBR + GetCustomMaterials(color, normalM, lmCoordM, NdotU, shadowMult, smoothnessG, smoothnessD, highlightMult, emission, materialMask, viewPos, lViewPos); + #endif + + if (mat == 10001) { // No directional shading + noDirectionalShading = true; + } else if (mat == 10005) { // Grounded Waving Foliage + subsurfaceMode = 1, noSmoothLighting = true, noDirectionalShading = true; + DoFoliageColorTweaks(color.rgb, shadowMult, snowMinNdotU, viewPos, nViewPos, lViewPos, dither); + } else if (mat == 10009) { // Leaves + #include "/lib/materials/specificMaterials/terrain/leaves.glsl" + } else if (mat == 10013) { // Vine + subsurfaceMode = 3, centerShadowBias = true; noSmoothLighting = true; + } else if (mat == 10017) { // Non-waving Foliage + subsurfaceMode = 1, noSmoothLighting = true, noDirectionalShading = true; + } else if (mat == 10021) { // Upper Waving Foliage + subsurfaceMode = 1, noSmoothLighting = true, noDirectionalShading = true; + DoFoliageColorTweaks(color.rgb, shadowMult, snowMinNdotU, viewPos, nViewPos, lViewPos, dither); + } else if (mat == 10028) { // Modded Light Sources + noSmoothLighting = true; noDirectionalShading = true; + emission = GetLuminance(color.rgb) * 2.5; + } + + #ifdef SNOWY_WORLD + else if (mat == 10132) { // Grass Block:Normal + if (glColor.b < 0.999) { // Grass Block:Normal:Grass Part + snowMinNdotU = min(pow2(pow2(color.g)) * 1.9, 0.1); + color.rgb = color.rgb * 0.5 + 0.5 * (color.rgb / glColor.rgb); + } + } + #endif + + else if (lmCoord.x > 0.99999) lmCoordM.x = 0.95; + #endif + + #ifdef SNOWY_WORLD + DoSnowyWorld(color, smoothnessG, highlightMult, smoothnessD, emission, + playerPos, lmCoord, snowFactor, snowMinNdotU, NdotU, subsurfaceMode); + #endif + + #if RAIN_PUDDLES >= 1 + float puddleLightFactor = max0(lmCoord.y * 32.0 - 31.0) * clamp((1.0 - 1.15 * lmCoord.x) * 10.0, 0.0, 1.0); + float puddleNormalFactor = pow2(max0(NdotUmax0 - 0.5) * 2.0); + float puddleMixer = puddleLightFactor * inRainy * puddleNormalFactor; + #if RAIN_PUDDLES < 3 + float wetnessM = wetness; + #else + float wetnessM = 1.0; + #endif + #ifdef PUDDLE_VOXELIZATION + vec3 voxelPos = SceneToPuddleVoxel(playerPos); + vec3 voxel_sample_pos = clamp01(voxelPos / vec3(puddle_voxelVolumeSize)); + if (CheckInsidePuddleVoxelVolume(voxelPos)) { + noPuddles += texture2D(puddle_sampler, voxel_sample_pos.xz).r; + } + #endif + if (pow2(pow2(wetnessM)) * puddleMixer - noPuddles > 0.00001) { + vec2 worldPosXZ = playerPos.xz + cameraPosition.xz; + vec2 puddleWind = vec2(frameTimeCounter) * 0.03; + #if WATER_STYLE == 1 + vec2 puddlePosNormal = floor(worldPosXZ * 16.0) * 0.0625; + #else + vec2 puddlePosNormal = worldPosXZ; + #endif + + puddlePosNormal *= 0.1; + vec2 pNormalCoord1 = puddlePosNormal + vec2(puddleWind.x, puddleWind.y); + vec2 pNormalCoord2 = puddlePosNormal + vec2(puddleWind.x * -1.5, puddleWind.y * -1.0); + vec3 pNormalNoise1 = texture2D(noisetex, pNormalCoord1).rgb; + vec3 pNormalNoise2 = texture2D(noisetex, pNormalCoord2).rgb; + float pNormalMult = 0.03; + + vec3 puddleNormal = vec3((pNormalNoise1.xy + pNormalNoise2.xy - vec2(1.0)) * pNormalMult, 1.0); + puddleNormal = clamp(normalize(puddleNormal * tbnMatrix), vec3(-1.0), vec3(1.0)); + + #if RAIN_PUDDLES == 1 || RAIN_PUDDLES == 3 + vec2 puddlePosForm = puddlePosNormal * 0.05; + float pFormNoise = texture2D(noisetex, puddlePosForm).b * 3.0; + pFormNoise += texture2D(noisetex, puddlePosForm * 0.5).b * 5.0; + pFormNoise += texture2D(noisetex, puddlePosForm * 0.25).b * 8.0; + pFormNoise *= sqrt1(wetnessM) * 0.5625 + 0.4375; + pFormNoise = clamp(pFormNoise - 7.0, 0.0, 1.0); + #else + float pFormNoise = wetnessM; + #endif + puddleMixer *= pFormNoise; + + float puddleSmoothnessG = 0.7 - rainFactor * 0.3; + float puddleHighlight = (1.5 - subsurfaceMode * 0.6 * invNoonFactor); + smoothnessG = mix(smoothnessG, puddleSmoothnessG, puddleMixer); + highlightMult = mix(highlightMult, puddleHighlight, puddleMixer); + smoothnessD = mix(smoothnessD, 1.0, sqrt1(puddleMixer)); + normalM = mix(normalM, puddleNormal, puddleMixer * rainFactor); + } + #endif + + #if SHOW_LIGHT_LEVEL > 0 + #include "/lib/misc/showLightLevels.glsl" + #endif + + DoLighting(color, shadowMult, playerPos, viewPos, lViewPos, geoNormal, normalM, + worldGeoNormal, lmCoordM, noSmoothLighting, noDirectionalShading, noVanillaAO, + centerShadowBias, subsurfaceMode, smoothnessG, highlightMult, emission); + + #ifdef IPBR + color.rgb += maRecolor; + #endif + + #ifdef PBR_REFLECTIONS + #ifdef OVERWORLD + skyLightFactor = pow2(max(lmCoord.y - 0.7, 0.0) * 3.33333); + #else + skyLightFactor = dot(shadowMult, shadowMult) / 3.0; + #endif + #endif + + #ifdef COLOR_CODED_PROGRAMS + ColorCodeProgram(color, mat); + #endif + + /* DRAWBUFFERS:06 */ + gl_FragData[0] = color; + gl_FragData[1] = vec4(smoothnessD, materialMask, skyLightFactor, 1.0); + + #if BLOCK_REFLECT_QUALITY >= 2 && RP_MODE != 0 + /* DRAWBUFFERS:065 */ + gl_FragData[2] = vec4(mat3(gbufferModelViewInverse) * normalM, 1.0); + #endif +} + +#endif + +//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader////////// +#ifdef VERTEX_SHADER + +flat out int mat; + +out vec2 texCoord; +out vec2 lmCoord; +out vec2 signMidCoordPos; +flat out vec2 absMidCoordPos; +flat out vec2 midCoord; + +flat out vec3 upVec, sunVec, northVec, eastVec; +out vec3 normal; + +out vec4 glColorRaw; + +#if RAIN_PUDDLES >= 1 || defined GENERATED_NORMALS || defined CUSTOM_PBR + flat out vec3 binormal, tangent; +#endif + +#ifdef POM + out vec3 viewVector; + + out vec4 vTexCoordAM; +#endif + +#if ANISOTROPIC_FILTER > 0 + out vec4 spriteBounds; +#endif + +//Attributes// +attribute vec4 mc_Entity; +attribute vec4 mc_midTexCoord; + +#if RAIN_PUDDLES >= 1 || defined GENERATED_NORMALS || defined CUSTOM_PBR + attribute vec4 at_tangent; +#endif + +//Common Variables// +vec4 glColor = vec4(1.0); + +//Common Functions// + +//Includes// +#ifdef TAA + #include "/lib/antialiasing/jitter.glsl" +#endif + +#ifdef WAVING_ANYTHING_TERRAIN + #include "/lib/materials/materialMethods/wavingBlocks.glsl" +#endif + +//Program// +void main() { + texCoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + lmCoord = GetLightMapCoordinates(); + + glColorRaw = gl_Color; + if (glColorRaw.a < 0.1) glColorRaw.a = 1.0; + glColor = glColorRaw; + + normal = normalize(gl_NormalMatrix * gl_Normal); + upVec = normalize(gbufferModelView[1].xyz); + eastVec = normalize(gbufferModelView[0].xyz); + northVec = normalize(gbufferModelView[2].xyz); + sunVec = GetSunVector(); + + midCoord = (gl_TextureMatrix[0] * mc_midTexCoord).st; + vec2 texMinMidCoord = texCoord - midCoord; + signMidCoordPos = sign(texMinMidCoord); + absMidCoordPos = abs(texMinMidCoord); + + mat = int(mc_Entity.x + 0.5); + + #if ANISOTROPIC_FILTER > 0 + if (mc_Entity.y > 0.5 && dot(normal, upVec) < 0.999) absMidCoordPos = vec2(0.0); // Fix257062 + #endif + + #ifdef WAVING_ANYTHING_TERRAIN + vec4 position = gbufferModelViewInverse * gl_ModelViewMatrix * gl_Vertex; + + DoWave(position.xyz, mat); + + gl_Position = gl_ProjectionMatrix * gbufferModelView * position; + #else + gl_Position = ftransform(); + + #ifndef WAVING_LAVA + if (mat == 10068) { // Lava + // G8FL735 Fixes Optifine-Iris parity. Optifine has 0.9 gl_Color.rgb on a lot of versions + glColorRaw.rgb = min(glColorRaw.rgb, vec3(0.9)); + } + #endif + #endif + + #ifdef FLICKERING_FIX + if (mat == 10257) gl_Position.z -= 0.00001; // Iron Bars + #endif + + #ifdef TAA + gl_Position.xy = TAAJitter(gl_Position.xy, gl_Position.w); + #endif + + #if RAIN_PUDDLES >= 1 || defined GENERATED_NORMALS || defined CUSTOM_PBR + binormal = normalize(gl_NormalMatrix * cross(at_tangent.xyz, gl_Normal.xyz) * at_tangent.w); + tangent = normalize(gl_NormalMatrix * at_tangent.xyz); + #endif + + #ifdef POM + mat3 tbnMatrix = mat3( + tangent.x, binormal.x, normal.x, + tangent.y, binormal.y, normal.y, + tangent.z, binormal.z, normal.z + ); + + viewVector = tbnMatrix * (gl_ModelViewMatrix * gl_Vertex).xyz; + + vTexCoordAM.zw = abs(texMinMidCoord) * 2; + vTexCoordAM.xy = min(texCoord, midCoord - texMinMidCoord); + #endif + + #if ANISOTROPIC_FILTER > 0 + vec2 spriteRadius = abs(texCoord - mc_midTexCoord.xy); + vec2 bottomLeft = mc_midTexCoord.xy - spriteRadius; + vec2 topRight = mc_midTexCoord.xy + spriteRadius; + spriteBounds = vec4(bottomLeft, topRight); + #endif +} + +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_textured.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_textured.glsl new file mode 100644 index 0000000..29402c7 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_textured.glsl @@ -0,0 +1,241 @@ +///////////////////////////////////// +// Complementary Shaders by EminGT // +///////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader////////// +#ifdef FRAGMENT_SHADER + +in vec2 texCoord; +in vec2 lmCoord; + +flat in vec3 upVec, sunVec; +in vec3 normal; + +flat in vec4 glColor; + +#ifdef CLOUD_SHADOWS + flat in vec3 eastVec; + + #if SUN_ANGLE != 0 + flat in vec3 northVec; + #endif +#endif + +//Pipeline Constants// + +//Common Variables// +float NdotU = dot(normal, upVec); +float NdotUmax0 = max(NdotU, 0.0); +float SdotU = dot(sunVec, upVec); +float sunFactor = SdotU < 0.0 ? clamp(SdotU + 0.375, 0.0, 0.75) / 0.75 : clamp(SdotU + 0.03125, 0.0, 0.0625) / 0.0625; +float sunVisibility = clamp(SdotU + 0.0625, 0.0, 0.125) / 0.125; +float sunVisibility2 = sunVisibility * sunVisibility; +float shadowTimeVar1 = abs(sunVisibility - 0.5) * 2.0; +float shadowTimeVar2 = shadowTimeVar1 * shadowTimeVar1; +float shadowTime = shadowTimeVar2 * shadowTimeVar2; + +#ifdef OVERWORLD + vec3 lightVec = sunVec * ((timeAngle < 0.5325 || timeAngle > 0.9675) ? 1.0 : -1.0); +#else + vec3 lightVec = sunVec; +#endif + +//Common Functions// + +//Includes// +#include "/lib/util/spaceConversion.glsl" +#include "/lib/lighting/mainLighting.glsl" +#include "/lib/util/dither.glsl" + +#if MC_VERSION >= 11500 + #include "/lib/atmospherics/fog/mainFog.glsl" +#endif + +#ifdef ATM_COLOR_MULTS + #include "/lib/colors/colorMultipliers.glsl" +#endif + +#ifdef COLOR_CODED_PROGRAMS + #include "/lib/misc/colorCodedPrograms.glsl" +#endif + +//Program// +void main() { + vec4 color = texture2D(tex, texCoord); + vec4 colorP = color; + color *= glColor; + + vec3 screenPos = vec3(gl_FragCoord.xy / vec2(viewWidth, viewHeight), gl_FragCoord.z); + vec3 viewPos = ScreenToView(screenPos); + float lViewPos = length(viewPos); + vec3 playerPos = ViewToPlayer(viewPos); + + float dither = texture2D(noisetex, gl_FragCoord.xy / 128.0).b; + #ifdef TAA + dither = fract(dither + goldenRatio * mod(float(frameCounter), 3600.0)); + #endif + + #ifdef ATM_COLOR_MULTS + atmColorMult = GetAtmColorMult(); + #endif + + #ifdef VL_CLOUDS_ACTIVE + float cloudLinearDepth = texelFetch(gaux1, texelCoord, 0).r; + + if (cloudLinearDepth > 0.0) // Because Iris changes the pipeline position of opaque particles + if (pow2(cloudLinearDepth + OSIEBCA * dither) * renderDistance < min(lViewPos, renderDistance)) discard; + #endif + + float emission = 0.0, materialMask = OSIEBCA * 254.0; // No SSAO, No TAA + vec2 lmCoordM = lmCoord; + vec3 normalM = normal, geoNormal = normal, shadowMult = vec3(1.0); + vec3 worldGeoNormal = normalize(ViewToPlayer(geoNormal * 10000.0)); + #if defined IPBR && defined IPBR_PARTICLE_FEATURES + // We don't want to detect particles from the block atlas + #if MC_VERSION >= 12000 + float atlasCheck = 1100.0; // I think texture atlas got bigger in newer mc + #else + float atlasCheck = 900.0; + #endif + + if (atlasSize.x < atlasCheck) { + if (color.b > 1.15 * (color.r + color.g) && color.g > color.r * 1.25 && color.g < 0.425 && color.b > 0.75) { // Water Particle + materialMask = 0.0; + color.rgb = sqrt3(color.rgb); + color.rgb *= 0.7; + if (dither > 0.4) discard; + #ifdef OVERWORLD + } else if (color.b > 0.7 && color.r < 0.28 && color.g < 0.425 && color.g > color.r * 1.4){ // physics mod rain + if (color.a < 0.1 || isEyeInWater == 3) discard; + color.a *= rainTexOpacity; + color.rgb = sqrt2(color.rgb) * (blocklightCol * 2.0 * lmCoord.x + ambientColor * lmCoord.y * (0.7 + 0.35 * sunFactor)); + } else if (color.rgb == vec3(1.0) && color.a < 0.765 && color.a > 0.605) { // physics mod snow (default snow opacity only) + if (color.a < 0.1 || isEyeInWater == 3) discard; + color.a *= snowTexOpacity; + color.rgb = sqrt2(color.rgb) * (blocklightCol * 2.0 * lmCoord.x + lmCoord.y * (0.7 + 0.35 * sunFactor) + ambientColor * 0.2); + #endif + } else if (color.r == color.g && color.r - 0.5 * color.b < 0.06) { // Underwater Particle + if (isEyeInWater == 1) { + color.rgb = sqrt2(color.rgb) * 0.35; + if (fract(playerPos.y + cameraPosition.y) > 0.25) discard; + } + } else if (color.a < 0.99 && dot(color.rgb, color.rgb) < 1.0) { // Campfire Smoke + color.a *= 0.5; + materialMask = 0.0; + } else if (max(abs(colorP.r - colorP.b), abs(colorP.b - colorP.g)) < 0.001) { // Grayscale Particles + float dotColor = dot(color.rgb, color.rgb); + if (dotColor > 0.25 && color.g < 0.5 && (color.b > color.r * 1.1 && color.r > 0.3 || color.r > (color.g + color.b) * 3.0)) { + // Ender Particle, Crying Obsidian Particle, Redstone Particle + emission = clamp(color.r * 8.0, 1.6, 5.0); + color.rgb = pow1_5(color.rgb); + lmCoordM = vec2(0.0); + } else if (color.r > 0.83 && color.g > 0.23 && color.b < 0.4) { + // Lava Particles + emission = 2.0; + color.b *= 0.5; + color.r *= 1.2; + } + } + } + bool noSmoothLighting = false; + #else + bool noSmoothLighting = true; + #endif + + #ifdef REDUCE_CLOSE_PARTICLES + if (lViewPos - 1.0 < dither) discard; + #endif + + #ifdef GLOWING_COLORED_PARTICLES + if (atlasSize.x < 900.0) { + if (dot(glColor.rgb, vec3(1.0)) < 2.99) { + emission = 5.0; + } + } + #endif + + DoLighting(color, shadowMult, playerPos, viewPos, lViewPos, geoNormal, normalM, + worldGeoNormal, lmCoordM, noSmoothLighting, false, true, + false, 0, 0.0, 1.0, emission); + + #if MC_VERSION >= 11500 + vec3 nViewPos = normalize(viewPos); + + float VdotU = dot(nViewPos, upVec); + float VdotS = dot(nViewPos, sunVec); + float sky = 0.0; + + DoFog(color.rgb, sky, lViewPos, playerPos, VdotU, VdotS, dither); + #endif + + vec3 translucentMult = mix(vec3(0.666), color.rgb * (1.0 - pow2(pow2(color.a))), color.a); + + #ifdef COLOR_CODED_PROGRAMS + ColorCodeProgram(color, -1); + #endif + + /* DRAWBUFFERS:063 */ + gl_FragData[0] = color; + gl_FragData[1] = vec4(0.0, materialMask, 0.0, 1.0); + gl_FragData[2] = vec4(1.0 - translucentMult, 1.0); +} + +#endif + +//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader////////// +#ifdef VERTEX_SHADER + +out vec2 texCoord; +out vec2 lmCoord; + +flat out vec3 upVec, sunVec; +out vec3 normal; + +flat out vec4 glColor; + +#ifdef CLOUD_SHADOWS + flat out vec3 eastVec; + + #if SUN_ANGLE != 0 + flat out vec3 northVec; + #endif +#endif + +//Attributes// + +//Common Variables// + +//Common Functions// + +//Includes// + +//Program// +void main() { + gl_Position = ftransform(); + + texCoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + lmCoord = GetLightMapCoordinates(); + + glColor = gl_Color; + + normal = normalize(gl_NormalMatrix * gl_Normal); + upVec = normalize(gbufferModelView[1].xyz); + sunVec = GetSunVector(); + + #ifdef FLICKERING_FIX + gl_Position.z -= 0.000002; + #endif + + #ifdef CLOUD_SHADOWS + eastVec = normalize(gbufferModelView[0].xyz); + + #if SUN_ANGLE != 0 + northVec = normalize(gbufferModelView[2].xyz); + #endif + #endif +} + +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_water.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_water.glsl new file mode 100644 index 0000000..0ab029a --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_water.glsl @@ -0,0 +1,373 @@ +///////////////////////////////////// +// Complementary Shaders by EminGT // +///////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader////////// +#ifdef FRAGMENT_SHADER + +flat in int mat; + +in vec2 texCoord; +in vec2 lmCoord; +in vec2 signMidCoordPos; +flat in vec2 absMidCoordPos; + +flat in vec3 upVec, sunVec, northVec, eastVec; +in vec3 playerPos; +in vec3 normal; +in vec3 viewVector; + +in vec4 glColor; + +#if WATER_STYLE >= 2 || RAIN_PUDDLES >= 1 && WATER_STYLE == 1 && WATER_MAT_QUALITY >= 2 || defined GENERATED_NORMALS || defined CUSTOM_PBR + flat in vec3 binormal, tangent; +#endif + +#ifdef POM + in vec4 vTexCoordAM; +#endif + +//Pipeline Constants// + +//Common Variables// +float NdotU = dot(normal, upVec); +float NdotUmax0 = max(NdotU, 0.0); +float SdotU = dot(sunVec, upVec); +float sunFactor = SdotU < 0.0 ? clamp(SdotU + 0.375, 0.0, 0.75) / 0.75 : clamp(SdotU + 0.03125, 0.0, 0.0625) / 0.0625; +float sunVisibility = clamp(SdotU + 0.0625, 0.0, 0.125) / 0.125; +float sunVisibility2 = sunVisibility * sunVisibility; +float shadowTimeVar1 = abs(sunVisibility - 0.5) * 2.0; +float shadowTimeVar2 = shadowTimeVar1 * shadowTimeVar1; +float shadowTime = shadowTimeVar2 * shadowTimeVar2; + +#ifdef OVERWORLD + vec3 lightVec = sunVec * ((timeAngle < 0.5325 || timeAngle > 0.9675) ? 1.0 : -1.0); +#else + vec3 lightVec = sunVec; +#endif + +#if WATER_STYLE >= 2 || RAIN_PUDDLES >= 1 && WATER_STYLE == 1 && WATER_MAT_QUALITY >= 2 || defined GENERATED_NORMALS || defined CUSTOM_PBR + mat3 tbnMatrix = mat3( + tangent.x, binormal.x, normal.x, + tangent.y, binormal.y, normal.y, + tangent.z, binormal.z, normal.z + ); +#endif + +//Common Functions// +float GetLinearDepth(float depth) { + return (2.0 * near) / (far + near - depth * (far - near)); +} + +//Includes// +#include "/lib/util/dither.glsl" +#include "/lib/util/spaceConversion.glsl" +#include "/lib/lighting/mainLighting.glsl" +#include "/lib/atmospherics/fog/mainFog.glsl" + +#ifdef OVERWORLD + #include "/lib/atmospherics/sky.glsl" +#endif + +#if WATER_REFLECT_QUALITY >= 0 + #if defined SKY_EFFECT_REFLECTION && defined OVERWORLD + #if AURORA_STYLE > 0 + #include "/lib/atmospherics/auroraBorealis.glsl" + #endif + + #ifdef NIGHT_NEBULA + #include "/lib/atmospherics/nightNebula.glsl" + #else + #include "/lib/atmospherics/stars.glsl" + #endif + + #ifdef VL_CLOUDS_ACTIVE + #include "/lib/atmospherics/clouds/mainClouds.glsl" + #endif + #endif + + #include "/lib/materials/materialMethods/reflections.glsl" +#endif + +#ifdef TAA + #include "/lib/antialiasing/jitter.glsl" +#endif + +#if defined GENERATED_NORMALS || defined COATED_TEXTURES || WATER_STYLE >= 2 + #include "/lib/util/miplevel.glsl" +#endif + +#ifdef GENERATED_NORMALS + #include "/lib/materials/materialMethods/generatedNormals.glsl" +#endif + +#if IPBR_EMISSIVE_MODE != 1 + #include "/lib/materials/materialMethods/customEmission.glsl" +#endif + +#ifdef CUSTOM_PBR + #include "/lib/materials/materialHandling/customMaterials.glsl" +#endif + +#ifdef ATM_COLOR_MULTS + #include "/lib/colors/colorMultipliers.glsl" +#endif +#ifdef MOON_PHASE_INF_ATMOSPHERE + #include "/lib/colors/moonPhaseInfluence.glsl" +#endif + +#ifdef COLOR_CODED_PROGRAMS + #include "/lib/misc/colorCodedPrograms.glsl" +#endif + +#ifdef PORTAL_EDGE_EFFECT + #include "/lib/misc/voxelization.glsl" +#endif + +#ifdef CONNECTED_GLASS_EFFECT + #include "/lib/materials/materialMethods/connectedGlass.glsl" +#endif + +//Program// +void main() { + vec4 colorP = texture2D(tex, texCoord); + vec4 color = colorP * vec4(glColor.rgb, 1.0); + + vec3 screenPos = vec3(gl_FragCoord.xy / vec2(viewWidth, viewHeight), gl_FragCoord.z); + #ifdef TAA + vec3 viewPos = ScreenToView(vec3(TAAJitter(screenPos.xy, -0.5), screenPos.z)); + #else + vec3 viewPos = ScreenToView(screenPos); + #endif + float lViewPos = length(viewPos); + + float dither = Bayer64(gl_FragCoord.xy); + #ifdef TAA + dither = fract(dither + goldenRatio * mod(float(frameCounter), 3600.0)); + #endif + + #ifdef LIGHT_COLOR_MULTS + lightColorMult = GetLightColorMult(); + #endif + #ifdef ATM_COLOR_MULTS + atmColorMult = GetAtmColorMult(); + sqrtAtmColorMult = sqrt(atmColorMult); + #endif + + #ifdef VL_CLOUDS_ACTIVE + float cloudLinearDepth = texelFetch(gaux1, texelCoord, 0).r; + + if (pow2(cloudLinearDepth + OSIEBCA * dither) * renderDistance < min(lViewPos, renderDistance)) discard; + #endif + + #if WATER_MAT_QUALITY >= 3 + float materialMask = 0.0; + #endif + + vec3 nViewPos = normalize(viewPos); + float VdotU = dot(nViewPos, upVec); + float VdotS = dot(nViewPos, sunVec); + float VdotN = dot(nViewPos, normal); + + // Materials + vec4 translucentMult = vec4(1.0); + bool noSmoothLighting = false, noDirectionalShading = false, translucentMultCalculated = false, noGeneratedNormals = false; + int subsurfaceMode = 0; + float smoothnessG = 0.0, highlightMult = 1.0, reflectMult = 0.0, emission = 0.0; + vec2 lmCoordM = lmCoord; + vec3 normalM = VdotN > 0.0 ? -normal : normal; // Inverted Iris Water Normal Workaround + vec3 geoNormal = normalM; + vec3 worldGeoNormal = normalize(ViewToPlayer(geoNormal * 10000.0)); + vec3 shadowMult = vec3(1.0); + float fresnel = clamp(1.0 + dot(normalM, nViewPos), 0.0, 1.0); + #ifdef IPBR + #include "/lib/materials/materialHandling/translucentMaterials.glsl" + + #ifdef GENERATED_NORMALS + if (!noGeneratedNormals) GenerateNormals(normalM, colorP.rgb * colorP.a * 1.5); + #endif + + #if IPBR_EMISSIVE_MODE != 1 + emission = GetCustomEmissionForIPBR(color, emission); + #endif + #else + #ifdef CUSTOM_PBR + float smoothnessD, materialMaskPh; + GetCustomMaterials(color, normalM, lmCoordM, NdotU, shadowMult, smoothnessG, smoothnessD, highlightMult, emission, materialMaskPh, viewPos, lViewPos); + reflectMult = smoothnessD; + #endif + + if (mat == 32000) { // Water + #include "/lib/materials/specificMaterials/translucents/water.glsl" + } else if (mat == 30020) { // Nether Portal + #ifdef SPECIAL_PORTAL_EFFECTS + #include "/lib/materials/specificMaterials/translucents/netherPortal.glsl" + #endif + } + #endif + + #if WATER_MAT_QUALITY >= 3 && SELECT_OUTLINE == 4 + int materialMaskInt = int(texelFetch(colortex6, texelCoord, 0).g * 255.1); + if (materialMaskInt == 252) { + materialMask = OSIEBCA * 252.0; // Versatile Selection Outline + } + #endif + + // Blending + if (!translucentMultCalculated) + translucentMult = vec4(mix(vec3(0.666), color.rgb * (1.0 - pow2(pow2(color.a))), color.a), 1.0); + + translucentMult.rgb = mix(translucentMult.rgb, vec3(1.0), min1(pow2(pow2(lViewPos / far)))); + + // Lighting + DoLighting(color, shadowMult, playerPos, viewPos, lViewPos, geoNormal, normalM, + worldGeoNormal, lmCoordM, noSmoothLighting, noDirectionalShading, false, + false, subsurfaceMode, smoothnessG, highlightMult, emission); + + // Reflections + #if WATER_REFLECT_QUALITY >= 0 + #ifdef LIGHT_COLOR_MULTS + highlightColor *= lightColorMult; + #endif + #ifdef MOON_PHASE_INF_REFLECTION + highlightColor *= pow2(moonPhaseInfluence); + #endif + + float fresnelM = (pow3(fresnel) * 0.85 + 0.15) * reflectMult; + + float skyLightFactor = pow2(max(lmCoordM.y - 0.7, 0.0) * 3.33333); + #if SHADOW_QUALITY > -1 && WATER_REFLECT_QUALITY >= 2 && WATER_MAT_QUALITY >= 2 + skyLightFactor = max(skyLightFactor, min1(dot(shadowMult, shadowMult))); + #endif + + vec4 reflection = GetReflection(normalM, viewPos.xyz, nViewPos, playerPos, lViewPos, -1.0, + depthtex1, dither, skyLightFactor, fresnel, + smoothnessG, geoNormal, color.rgb, shadowMult, highlightMult); + + color.rgb = mix(color.rgb, reflection.rgb, fresnelM); + #endif + //// + + #ifdef COLOR_CODED_PROGRAMS + ColorCodeProgram(color, mat); + #endif + + float sky = 0.0; + DoFog(color.rgb, sky, lViewPos, playerPos, VdotU, VdotS, dither); + color.a *= 1.0 - sky; + + /* DRAWBUFFERS:03 */ + gl_FragData[0] = color; + gl_FragData[1] = vec4(1.0 - translucentMult.rgb, translucentMult.a); + + // supposed to be #if WATER_MAT_QUALITY >= 3 but optifine bad + #if DETAIL_QUALITY >= 3 + /* DRAWBUFFERS:036 */ + gl_FragData[2] = vec4(0.0, materialMask, 0.0, 1.0); + #endif +} + +#endif + +//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader////////// +#ifdef VERTEX_SHADER + +flat out int mat; + +out vec2 texCoord; +out vec2 lmCoord; +out vec2 signMidCoordPos; +flat out vec2 absMidCoordPos; + +flat out vec3 upVec, sunVec, northVec, eastVec; +out vec3 playerPos; +out vec3 normal; +out vec3 viewVector; + +out vec4 glColor; + +#if WATER_STYLE >= 2 || RAIN_PUDDLES >= 1 && WATER_STYLE == 1 && WATER_MAT_QUALITY >= 2 || defined GENERATED_NORMALS || defined CUSTOM_PBR + flat out vec3 binormal, tangent; +#endif + +#ifdef POM + out vec4 vTexCoordAM; +#endif + +//Attributes// +attribute vec4 mc_Entity; +attribute vec4 mc_midTexCoord; +attribute vec4 at_tangent; + +//Common Variables// +#if WATER_STYLE >= 2 || RAIN_PUDDLES >= 1 && WATER_STYLE == 1 && WATER_MAT_QUALITY >= 2 || defined GENERATED_NORMALS || defined CUSTOM_PBR +#else + vec3 binormal; + vec3 tangent; +#endif + +//Common Functions// + +//Includes// +#ifdef TAA + #include "/lib/antialiasing/jitter.glsl" +#endif + +#ifdef WAVING_WATER_VERTEX + #include "/lib/materials/materialMethods/wavingBlocks.glsl" +#endif + +//Program// +void main() { + texCoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + lmCoord = GetLightMapCoordinates(); + + glColor = gl_Color; + + mat = int(mc_Entity.x + 0.5); + + normal = normalize(gl_NormalMatrix * gl_Normal); + upVec = normalize(gbufferModelView[1].xyz); + eastVec = normalize(gbufferModelView[0].xyz); + northVec = normalize(gbufferModelView[2].xyz); + sunVec = GetSunVector(); + + binormal = normalize(gl_NormalMatrix * cross(at_tangent.xyz, gl_Normal.xyz) * at_tangent.w); + tangent = normalize(gl_NormalMatrix * at_tangent.xyz); + + mat3 tbnMatrix = mat3( + tangent.x, binormal.x, normal.x, + tangent.y, binormal.y, normal.y, + tangent.z, binormal.z, normal.z + ); + + viewVector = tbnMatrix * (gl_ModelViewMatrix * gl_Vertex).xyz; + + vec2 midCoord = (gl_TextureMatrix[0] * mc_midTexCoord).st; + vec2 texMinMidCoord = texCoord - midCoord; + signMidCoordPos = sign(texMinMidCoord); + absMidCoordPos = abs(texMinMidCoord); + + #ifdef POM + vTexCoordAM.zw = abs(texMinMidCoord) * 2; + vTexCoordAM.xy = min(texCoord, midCoord - texMinMidCoord); + #endif + + vec4 position = gbufferModelViewInverse * gl_ModelViewMatrix * gl_Vertex; + playerPos = position.xyz; + + #ifdef WAVING_WATER_VERTEX + DoWave(position.xyz, mat); + #endif + + gl_Position = gl_ProjectionMatrix * gbufferModelView * position; + + #ifdef TAA + gl_Position.xy = TAAJitter(gl_Position.xy, gl_Position.w); + #endif +} + +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_weather.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_weather.glsl new file mode 100644 index 0000000..601dc60 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/gbuffers_weather.glsl @@ -0,0 +1,95 @@ +///////////////////////////////////// +// Complementary Shaders by EminGT // +///////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader////////// +#ifdef FRAGMENT_SHADER + +flat in vec2 lmCoord; +in vec2 texCoord; + +flat in vec3 upVec, sunVec; + +flat in vec4 glColor; + +//Pipeline Constants// + +//Common Variables// +float SdotU = dot(sunVec, upVec); +float sunFactor = SdotU < 0.0 ? clamp(SdotU + 0.375, 0.0, 0.75) / 0.75 : clamp(SdotU + 0.03125, 0.0, 0.0625) / 0.0625; +float sunVisibility = clamp(SdotU + 0.0625, 0.0, 0.125) / 0.125; +float sunVisibility2 = sunVisibility * sunVisibility; + +//Common Functions// + +//Includes// +#include "/lib/colors/lightAndAmbientColors.glsl" + +#ifdef COLOR_CODED_PROGRAMS + #include "/lib/misc/colorCodedPrograms.glsl" +#endif + +//Program// +void main() { + vec4 color = texture2D(tex, texCoord); + color *= glColor; + + if (color.a < 0.1 || isEyeInWater == 3) discard; + + if (color.r + color.g < 1.5) color.a *= rainTexOpacity; + else color.a *= snowTexOpacity; + + color.rgb = sqrt3(color.rgb) * (blocklightCol * 2.0 * lmCoord.x + (ambientColor + 0.2 * lightColor) * lmCoord.y * (0.6 + 0.3 * sunFactor)); + + #ifdef COLOR_CODED_PROGRAMS + ColorCodeProgram(color, -1); + #endif + + /* DRAWBUFFERS:0 */ + gl_FragData[0] = color; +} + +#endif + +//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader////////// +#ifdef VERTEX_SHADER + +flat out vec2 lmCoord; +out vec2 texCoord; + +flat out vec3 upVec, sunVec; + +flat out vec4 glColor; + +//Attributes// + +//Common Variables// + +//Common Functions// + +//Includes// + +//Program// +void main() { + vec4 position = gbufferModelViewInverse * gl_ModelViewMatrix * gl_Vertex; + glColor = gl_Color; + + #ifdef WAVING_RAIN + float rainWavingFactor = eyeBrightnessM2; // Prevents clipping inside interiors + position.xz += rainWavingFactor * (0.4 * position.y + 0.2) * vec2(sin(frameTimeCounter * 0.3) + 0.5, sin(frameTimeCounter * 0.5) * 0.5); + position.xz *= 1.0 - 0.08 * position.y * rainWavingFactor; + #endif + + gl_Position = gl_ProjectionMatrix * gbufferModelView * position; + + texCoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + lmCoord = GetLightMapCoordinates(); + + upVec = normalize(gbufferModelView[1].xyz); + sunVec = GetSunVector(); +} + +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/shadow.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/shadow.glsl new file mode 100644 index 0000000..1876a3f --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/shadow.glsl @@ -0,0 +1,317 @@ +///////////////////////////////////// +// Complementary Shaders by EminGT // +///////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader////////// +#ifdef FRAGMENT_SHADER + +flat in int mat; + +in vec2 texCoord; + +flat in vec3 sunVec, upVec; + +in vec4 position; +flat in vec4 glColor; + +#ifdef CONNECTED_GLASS_EFFECT + in vec2 signMidCoordPos; + flat in vec2 absMidCoordPos; +#endif + +//Pipeline Constants// + +//Common Variables// +float SdotU = dot(sunVec, upVec); +float sunVisibility = clamp(SdotU + 0.0625, 0.0, 0.125) / 0.125; + +//Common Functions// +void DoNaturalShadowCalculation(inout vec4 color1, inout vec4 color2) { + color1.rgb *= glColor.rgb; + color1.rgb = mix(vec3(1.0), color1.rgb, pow(color1.a, (1.0 - color1.a) * 0.5) * 1.05); + color1.rgb *= 1.0 - pow(color1.a, 64.0); + color1.rgb *= 0.2; // Natural Strength + + color2.rgb = normalize(color1.rgb) * 0.5; +} + +//Includes// +#ifdef CONNECTED_GLASS_EFFECT + #include "/lib/materials/materialMethods/connectedGlass.glsl" +#endif + +//Program// +void main() { + vec4 color1 = texture2DLod(tex, texCoord, 0); // Shadow Color + + #if SHADOW_QUALITY >= 1 + vec4 color2 = color1; // Light Shaft Color + + color2.rgb *= 0.25; // Natural Strength + + #if defined LIGHTSHAFTS_ACTIVE && LIGHTSHAFT_BEHAVIOUR == 1 && defined OVERWORLD + float positionYM = position.y; + #endif + + if (mat < 32008) { + if (mat < 32000) { + #ifdef CONNECTED_GLASS_EFFECT + if (mat == 30008) { // Tinted Glass + DoSimpleConnectedGlass(color1); + + #if defined LIGHTSHAFTS_ACTIVE && LIGHTSHAFT_BEHAVIOUR == 1 && defined OVERWORLD + positionYM = 0.0; // 86AHGA: For scene-aware light shafts to be less prone to get extreme under large glass planes + #endif + } + if (mat >= 31000) { // Stained Glass, Stained Glass Pane + DoSimpleConnectedGlass(color1); + + #if defined LIGHTSHAFTS_ACTIVE && LIGHTSHAFT_BEHAVIOUR == 1 && defined OVERWORLD + positionYM = 0.0; // 86AHGA + #endif + } + #endif + DoNaturalShadowCalculation(color1, color2); + } else { + if (mat == 32000) { // Water + vec3 worldPos = position.xyz + cameraPosition; + + #if defined LIGHTSHAFTS_ACTIVE && LIGHTSHAFT_BEHAVIOUR == 1 && defined OVERWORLD + // For scene-aware light shafts to be more prone to get extreme near water + positionYM += 3.5; + #endif + + // Water Caustics + #if WATER_CAUSTIC_STYLE < 3 + #if MC_VERSION >= 11300 + float wcl = GetLuminance(color1.rgb); + color1.rgb = color1.rgb * pow2(wcl) * 1.2; + #else + color1.rgb = mix(color1.rgb, vec3(GetLuminance(color1.rgb)), 0.88); + color1.rgb = pow2(color1.rgb) * vec3(2.5, 3.0, 3.0) * 0.96; + #endif + #else + #define WATER_SPEED_MULT_M WATER_SPEED_MULT * 0.035 + vec2 causticWind = vec2(frameTimeCounter * WATER_SPEED_MULT_M, 0.0); + vec2 cPos1 = worldPos.xz * 0.10 - causticWind; + vec2 cPos2 = worldPos.xz * 0.05 + causticWind; + + float cMult = 14.0; + float offset = 0.001; + + float caustic = 0.0; + caustic += dot(texture2D(gaux4, cPos1 + vec2(offset, 0.0)).rg, vec2(cMult)) + - dot(texture2D(gaux4, cPos1 - vec2(offset, 0.0)).rg, vec2(cMult)); + caustic += dot(texture2D(gaux4, cPos2 + vec2(0.0, offset)).rg, vec2(cMult)) + - dot(texture2D(gaux4, cPos2 - vec2(0.0, offset)).rg, vec2(cMult)); + color1.rgb = vec3(max0(min1(caustic * 0.8 + 0.35)) * 0.65 + 0.35); + + #if MC_VERSION < 11300 + color1.rgb *= vec3(0.3, 0.45, 0.9); + #endif + #endif + + #if MC_VERSION >= 11300 + #if WATERCOLOR_MODE >= 2 + color1.rgb *= glColor.rgb; + #else + color1.rgb *= vec3(0.3, 0.45, 0.9); + #endif + #endif + color1.rgb *= vec3(0.6, 0.8, 1.1); + //// + + // Underwater Light Shafts + vec3 worldPosM = worldPos; + + #if WATER_FOG_MULT > 100 + #define WATER_FOG_MULT_M WATER_FOG_MULT * 0.01; + worldPosM *= WATER_FOG_MULT_M; + #endif + + vec2 waterWind = vec2(syncedTime * 0.01, 0.0); + float waterNoise = texture2D(noisetex, worldPosM.xz * 0.012 - waterWind).g; + waterNoise += texture2D(noisetex, worldPosM.xz * 0.05 + waterWind).g; + + float factor = max(2.5 - 0.025 * length(position.xz), 0.8333) * 1.3; + waterNoise = pow(waterNoise * 0.5, factor) * factor * 1.3; + + #if MC_VERSION >= 11300 && WATERCOLOR_MODE >= 2 + color2.rgb = normalize(sqrt1(glColor.rgb)) * vec3(0.24, 0.22, 0.26); + #else + color2.rgb = vec3(0.08, 0.12, 0.195); + #endif + color2.rgb *= waterNoise * (1.0 + sunVisibility - rainFactor); + //// + + #ifdef UNDERWATERCOLOR_CHANGED + color1.rgb *= vec3(UNDERWATERCOLOR_RM, UNDERWATERCOLOR_GM, UNDERWATERCOLOR_BM); + color2.rgb *= vec3(UNDERWATERCOLOR_RM, UNDERWATERCOLOR_GM, UNDERWATERCOLOR_BM); + #endif + } else /*if (mat == 32004)*/ { // Ice + color1.rgb *= color1.rgb; + color1.rgb *= color1.rgb; + color1.rgb = mix(vec3(1.0), color1.rgb, pow(color1.a, (1.0 - color1.a) * 0.5) * 1.05); + color1.rgb *= 1.0 - pow(color1.a, 64.0); + color1.rgb *= 0.28; + + color2.rgb = normalize(pow(color1.rgb, vec3(0.25))) * 0.5; + } + } + } else { + if (mat < 32020) { // Glass, Glass Pane, Beacon (32008, 32012, 32016) + #ifdef CONNECTED_GLASS_EFFECT + if (mat == 32008) { // Glass + DoSimpleConnectedGlass(color1); + } + if (mat == 32012) { // Glass Pane + DoSimpleConnectedGlass(color1); + } + #endif + if (color1.a > 0.5) color1 = vec4(0.0, 0.0, 0.0, 1.0); + else color1 = vec4(vec3(0.2 * (1.0 - GLASS_OPACITY)), 1.0); + color2.rgb = vec3(0.3); + + #if defined LIGHTSHAFTS_ACTIVE && LIGHTSHAFT_BEHAVIOUR == 1 && defined OVERWORLD + positionYM = 0.0; // 86AHGA + #endif + } else { + DoNaturalShadowCalculation(color1, color2); + } + } + #endif + + gl_FragData[0] = color1; // Shadow Color + + #if SHADOW_QUALITY >= 1 + #if defined LIGHTSHAFTS_ACTIVE && LIGHTSHAFT_BEHAVIOUR == 1 && defined OVERWORLD + color2.a = 0.25 + max0(positionYM * 0.05); // consistencyMEJHRI7DG + #endif + + gl_FragData[1] = color2; // Light Shaft Color + #endif +} + +#endif + +//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader////////// +#ifdef VERTEX_SHADER + +flat out int mat; + +out vec2 texCoord; + +flat out vec3 sunVec, upVec; + +out vec4 position; +flat out vec4 glColor; + +#ifdef CONNECTED_GLASS_EFFECT + out vec2 signMidCoordPos; + flat out vec2 absMidCoordPos; +#endif + +//Pipeline Constants// +#if COLORED_LIGHTING_INTERNAL > 0 + #extension GL_ARB_shader_image_load_store : enable +#endif + +//Attributes// +attribute vec4 mc_Entity; + +#if defined PERPENDICULAR_TWEAKS || defined WAVING_ANYTHING_TERRAIN || defined WAVING_WATER_VERTEX || defined CONNECTED_GLASS_EFFECT + attribute vec4 mc_midTexCoord; +#endif + +#if COLORED_LIGHTING_INTERNAL > 0 + attribute vec3 at_midBlock; +#endif + +//Common Variables// +vec2 lmCoord; + +#if COLORED_LIGHTING_INTERNAL > 0 + writeonly uniform uimage3D voxel_img; + + #ifdef PUDDLE_VOXELIZATION + writeonly uniform uimage2D puddle_img; + #endif +#endif + +//Common Functions// + +//Includes// +#include "/lib/util/spaceConversion.glsl" + +#if defined WAVING_ANYTHING_TERRAIN || defined WAVING_WATER_VERTEX + #include "/lib/materials/materialMethods/wavingBlocks.glsl" +#endif + +#if COLORED_LIGHTING_INTERNAL > 0 + #include "/lib/misc/voxelization.glsl" + + #ifdef PUDDLE_VOXELIZATION + #include "/lib/misc/puddleVoxelization.glsl" + #endif +#endif + +//Program// +void main() { + texCoord = gl_MultiTexCoord0.xy; + lmCoord = GetLightMapCoordinates(); + glColor = gl_Color; + sunVec = GetSunVector(); + upVec = normalize(gbufferModelView[1].xyz); + mat = int(mc_Entity.x + 0.5); + + position = shadowModelViewInverse * shadowProjectionInverse * ftransform(); + + #if defined WAVING_ANYTHING_TERRAIN || defined WAVING_WATER_VERTEX + DoWave(position.xyz, mat); + #endif + + #ifdef CONNECTED_GLASS_EFFECT + vec2 midCoord = (gl_TextureMatrix[0] * mc_midTexCoord).st; + vec2 texMinMidCoord = texCoord - midCoord; + signMidCoordPos = sign(texMinMidCoord); + absMidCoordPos = abs(texMinMidCoord); + #endif + + #ifdef PERPENDICULAR_TWEAKS + if (mat == 10005 || mat == 10017) { // Foliage + #ifndef CONNECTED_GLASS_EFFECT + vec2 midCoord = (gl_TextureMatrix[0] * mc_midTexCoord).st; + vec2 texMinMidCoord = texCoord - midCoord; + #endif + if (texMinMidCoord.y < 0.0) { + vec3 normal = gl_NormalMatrix * gl_Normal; + position.xyz += normal * 0.35; + } + } + #endif + + if (mat == 32000) { // Water + position.y += 0.015 * max0(length(position.xyz) - 50.0); + } + + #if COLORED_LIGHTING_INTERNAL > 0 + if (gl_VertexID % 4 == 0) { + UpdateVoxelMap(mat); + #ifdef PUDDLE_VOXELIZATION + UpdatePuddleVoxelMap(mat); + #endif + } + #endif + + gl_Position = shadowProjection * shadowModelView * position; + + float lVertexPos = sqrt(gl_Position.x * gl_Position.x + gl_Position.y * gl_Position.y); + float distortFactor = lVertexPos * shadowMapBias + (1.0 - shadowMapBias); + gl_Position.xy *= 1.0 / distortFactor; + gl_Position.z = gl_Position.z * 0.2; +} + +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/shadowcomp.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/shadowcomp.glsl new file mode 100644 index 0000000..5c03442 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/shadowcomp.glsl @@ -0,0 +1,137 @@ +///////////////////////////////////// +// Complementary Shaders by EminGT // +///////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//////////Shadowcomp 1//////////Shadowcomp 1//////////Shadowcomp 1////////// +#ifdef SHADOWCOMP + +#define OPTIMIZATION_ACL_HALF_RATE_UPDATES +#define OPTIMIZATION_ACL_BEHIND_PLAYER + +layout (local_size_x = 8, local_size_y = 8, local_size_z = 8) in; +#if COLORED_LIGHTING_INTERNAL == 128 + const ivec3 workGroups = ivec3(16, 8, 16); +#elif COLORED_LIGHTING_INTERNAL == 192 + const ivec3 workGroups = ivec3(24, 12, 24); +#elif COLORED_LIGHTING_INTERNAL == 256 + const ivec3 workGroups = ivec3(32, 16, 32); +#elif COLORED_LIGHTING_INTERNAL == 384 + const ivec3 workGroups = ivec3(48, 24, 48); +#elif COLORED_LIGHTING_INTERNAL == 512 + const ivec3 workGroups = ivec3(64, 32, 64); +#elif COLORED_LIGHTING_INTERNAL == 768 + const ivec3 workGroups = ivec3(96, 32, 96); +#elif COLORED_LIGHTING_INTERNAL == 1024 + const ivec3 workGroups = ivec3(128, 32, 128); +#endif + +//Common Variables// +ivec3[6] face_offsets = ivec3[6]( + ivec3( 1, 0, 0), + ivec3( 0, 1, 0), + ivec3( 0, 0, 1), + ivec3(-1, 0, 0), + ivec3( 0, -1, 0), + ivec3( 0, 0, -1) +); + +writeonly uniform image3D floodfill_img; +writeonly uniform image3D floodfill_img_copy; + +//Common Functions// +vec4 GetLightSample(sampler3D lightSampler, ivec3 pos) { + return texelFetch(lightSampler, pos, 0); +} + +vec4 GetLightAverage(sampler3D lightSampler, ivec3 pos, ivec3 voxelVolumeSize) { + vec4 light_old = GetLightSample(lightSampler, pos); + vec4 light_px = GetLightSample(lightSampler, clamp(pos + face_offsets[0], ivec3(0), voxelVolumeSize - 1)); + vec4 light_py = GetLightSample(lightSampler, clamp(pos + face_offsets[1], ivec3(0), voxelVolumeSize - 1)); + vec4 light_pz = GetLightSample(lightSampler, clamp(pos + face_offsets[2], ivec3(0), voxelVolumeSize - 1)); + vec4 light_nx = GetLightSample(lightSampler, clamp(pos + face_offsets[3], ivec3(0), voxelVolumeSize - 1)); + vec4 light_ny = GetLightSample(lightSampler, clamp(pos + face_offsets[4], ivec3(0), voxelVolumeSize - 1)); + vec4 light_nz = GetLightSample(lightSampler, clamp(pos + face_offsets[5], ivec3(0), voxelVolumeSize - 1)); + + vec4 light = light_old + light_px + light_py + light_pz + light_nx + light_ny + light_nz; + return light / 7.2; // Slightly higher than 7 to prevent the light from travelling too far +} + +//Includes// +#include "/lib/misc/voxelization.glsl" + +//Program// +void main() { + ivec3 pos = ivec3(gl_GlobalInvocationID); + vec3 posM = vec3(pos) / vec3(voxelVolumeSize); + vec3 posOffset = floor(previousCameraPosition) - floor(cameraPosition); + ivec3 previousPos = ivec3(vec3(pos) - posOffset); + + ivec3 absPosFromCenter = abs(pos - voxelVolumeSize / 2); + if (absPosFromCenter.x + absPosFromCenter.y + absPosFromCenter.z > 16) { + #ifdef OPTIMIZATION_ACL_BEHIND_PLAYER + vec4 viewPos = gbufferProjectionInverse * vec4(0.0, 0.0, 1.0, 1.0); + viewPos /= viewPos.w; + vec3 nPlayerPos = normalize(mat3(gbufferModelViewInverse) * viewPos.xyz); + if (dot(normalize(posM - 0.5), nPlayerPos) < 0.0) { + #ifdef COLORED_LIGHT_FOG + if ((frameCounter & 1) == 0) { + imageStore(floodfill_img_copy, pos, GetLightSample(floodfill_sampler, previousPos)); + } else { + imageStore(floodfill_img, pos, GetLightSample(floodfill_sampler_copy, previousPos)); + } + #endif + return; + } + #endif + } + + vec4 light = vec4(0.0); + uint voxel = texelFetch(voxel_sampler, pos, 0).x; + + if ((frameCounter & 1) == 0) { + if (voxel == 1u) { + imageStore(floodfill_img_copy, pos, vec4(0.0)); + return; + } + #ifdef OPTIMIZATION_ACL_HALF_RATE_UPDATES + if (posM.x < 0.5) { + imageStore(floodfill_img_copy, pos, GetLightSample(floodfill_sampler, previousPos)); + return; + } + #endif + light = GetLightAverage(floodfill_sampler, previousPos, voxelVolumeSize); + } else { + if (voxel == 1u) { + imageStore(floodfill_img, pos, vec4(0.0)); + return; + } + #ifdef OPTIMIZATION_ACL_HALF_RATE_UPDATES + if (posM.x > 0.5) { + imageStore(floodfill_img, pos, GetLightSample(floodfill_sampler_copy, previousPos)); + return; + } + #endif + light = GetLightAverage(floodfill_sampler_copy, previousPos, voxelVolumeSize); + } + + if (voxel == 0u || voxel >= 200u) { + if (voxel >= 200u) { + vec3 tint = specialTintColor[min(voxel - 200u, specialTintColor.length() - 1u)]; + light.rgb *= tint; + } + } else { + vec4 color = GetSpecialBlocklightColor(int(voxel)); + light = max(light, vec4(pow2(color.rgb), color.a)); + } + + if ((frameCounter & 1) == 0) { + imageStore(floodfill_img_copy, pos, light); + } else { + imageStore(floodfill_img, pos, light); + } +} + +#endif \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/template.glsl b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/template.glsl new file mode 100644 index 0000000..55710e9 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/program/template.glsl @@ -0,0 +1,42 @@ +///////////////////////////////////// +// Complementary Shaders by EminGT // +///////////////////////////////////// + +//Common// +#include "/lib/common.glsl" + +//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader////////// +#ifdef FRAGMENT_SHADER + +//Pipeline Constants// + +//Common Variables// + +//Common Functions// + +//Includes// + +//Program// +void main() { + +} + +#endif + +//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader////////// +#ifdef VERTEX_SHADER + +//Attributes// + +//Common Variables// + +//Common Functions// + +//Includes// + +//Program// +void main() { + +} + +#endif diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/shaders.properties b/shaderpacks/ComplementaryUnbound_r5.4/shaders/shaders.properties new file mode 100644 index 0000000..fb3eb8a --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/shaders.properties @@ -0,0 +1,209 @@ +# Profiles + profile.POTATO = SHADOW_QUALITY=-1 shadowDistance=64.0 ENTITY_SHADOWS_DEFINE=-1 WATER_REFLECT_QUALITY=1 BLOCK_REFLECT_QUALITY=0 LIGHTSHAFT_QUALI_DEFINE=0 SSAO_QUALI_DEFINE=2 FXAA_DEFINE=-1 DETAIL_QUALITY=0 CLOUD_QUALITY=1 ANISOTROPIC_FILTER=0 COLORED_LIGHTING=0 + profile.VERYLOW = SHADOW_QUALITY=0 shadowDistance=64.0 ENTITY_SHADOWS_DEFINE=-1 WATER_REFLECT_QUALITY=1 BLOCK_REFLECT_QUALITY=0 LIGHTSHAFT_QUALI_DEFINE=0 SSAO_QUALI_DEFINE=2 FXAA_DEFINE=-1 DETAIL_QUALITY=0 CLOUD_QUALITY=1 ANISOTROPIC_FILTER=0 COLORED_LIGHTING=0 + profile.LOW = SHADOW_QUALITY=0 shadowDistance=96.0 ENTITY_SHADOWS_DEFINE=-1 WATER_REFLECT_QUALITY=2 BLOCK_REFLECT_QUALITY=1 LIGHTSHAFT_QUALI_DEFINE=0 SSAO_QUALI_DEFINE=2 FXAA_DEFINE=-1 DETAIL_QUALITY=2 CLOUD_QUALITY=2 ANISOTROPIC_FILTER=0 COLORED_LIGHTING=0 + profile.MEDIUM = SHADOW_QUALITY=1 shadowDistance=128.0 ENTITY_SHADOWS_DEFINE=-1 WATER_REFLECT_QUALITY=2 BLOCK_REFLECT_QUALITY=1 LIGHTSHAFT_QUALI_DEFINE=1 SSAO_QUALI_DEFINE=2 FXAA_DEFINE=1 DETAIL_QUALITY=2 CLOUD_QUALITY=2 ANISOTROPIC_FILTER=0 COLORED_LIGHTING=0 + profile.HIGH = SHADOW_QUALITY=2 shadowDistance=192.0 ENTITY_SHADOWS_DEFINE=-1 WATER_REFLECT_QUALITY=2 BLOCK_REFLECT_QUALITY=3 LIGHTSHAFT_QUALI_DEFINE=2 SSAO_QUALI_DEFINE=2 FXAA_DEFINE=1 DETAIL_QUALITY=2 CLOUD_QUALITY=2 ANISOTROPIC_FILTER=0 COLORED_LIGHTING=0 + profile.VERYHIGH = SHADOW_QUALITY=3 shadowDistance=224.0 ENTITY_SHADOWS_DEFINE=-1 WATER_REFLECT_QUALITY=2 BLOCK_REFLECT_QUALITY=3 LIGHTSHAFT_QUALI_DEFINE=2 SSAO_QUALI_DEFINE=2 FXAA_DEFINE=1 DETAIL_QUALITY=3 CLOUD_QUALITY=3 ANISOTROPIC_FILTER=8 COLORED_LIGHTING=256 + profile.ULTRA = SHADOW_QUALITY=4 shadowDistance=256.0 ENTITY_SHADOWS_DEFINE=-1 WATER_REFLECT_QUALITY=2 BLOCK_REFLECT_QUALITY=3 LIGHTSHAFT_QUALI_DEFINE=3 SSAO_QUALI_DEFINE=2 FXAA_DEFINE=1 DETAIL_QUALITY=3 CLOUD_QUALITY=3 ANISOTROPIC_FILTER=8 COLORED_LIGHTING=512 + +# Screen Setup + screen= [INFORMATION] SHADER_STYLE RP_MODE [PERFORMANCE_SETTINGS] [CAMERA_SETTINGS] [LIGHTING_SETTINGS] [ATMOSPHERE_SETTINGS] [MATERIAL_SETTINGS] [OTHER_SETTINGS] + + screen.INFORMATION= info0 info1 info2 info3 info4 info5 info8 info9 info10 + + screen.PERFORMANCE_SETTINGS= SHADOW_QUALITY shadowDistance LIGHTSHAFT_QUALI_DEFINE ENTITY_SHADOWS_DEFINE DETAIL_QUALITY CLOUD_QUALITY WATER_REFLECT_QUALITY BLOCK_REFLECT_QUALITY FXAA_DEFINE SSAO_QUALI_DEFINE COLORED_LIGHTING ANISOTROPIC_FILTER + + screen.MATERIAL_SETTINGS= [IPBR_SETTINGS] [CUSTOM_PBR_SETTINGS] [WATER_SETTINGS] RAIN_PUDDLES [WAVING_SETTINGS] SPECIAL_PORTAL_EFFECTS + screen.IPBR_SETTINGS= GENERATED_NORMALS COATED_TEXTURES GENERATED_NORMAL_MULT COATED_TEXTURE_MULT ENTITY_GN_AND_CT [GLOWING_ORE_SETTINGS] [GLOWING_STUFF_SETTINGS] [OTHER_IPBR_SETTINGS] + screen.GLOWING_ORE_SETTINGS= GLOWING_ORE_MASTER GLOWING_ORE_MULT GLOWING_ORE_IRON GLOWING_ORE_GOLD GLOWING_ORE_COPPER GLOWING_ORE_REDSTONE GLOWING_ORE_LAPIS GLOWING_ORE_EMERALD GLOWING_ORE_DIAMOND GLOWING_ORE_NETHERQUARTZ GLOWING_ORE_NETHERGOLD GLOWING_ORE_GILDEDBLACKSTONE GLOWING_ORE_ANCIENTDEBRIS GLOWING_ORE_MODDED + screen.GLOWING_STUFF_SETTINGS= GLOWING_AMETHYST GLOWING_LICHEN EMISSIVE_REDSTONE_BLOCK EMISSIVE_LAPIS_BLOCK GLOWING_ARMOR_TRIM + screen.OTHER_IPBR_SETTINGS= IPBR_EMISSIVE_MODE IPBR_PARTICLE_FEATURES FANCY_GLASS GREEN_SCREEN_LIME + screen.CUSTOM_PBR_SETTINGS= NORMAL_MAP_STRENGTH CUSTOM_EMISSION_INTENSITY POM POM_DEPTH POM_QUALITY POM_DISTANCE POM_LIGHTING_MODE POM_ALLOW_CUTOUT DIRECTIONAL_BLOCKLIGHT + screen.WATER_SETTINGS= WATER_STYLE_DEFINE WATER_CAUSTIC_STYLE_DEFINE [WATER_COLOR_SETTINGS] [UNDERWATER_COLOR_SETTINGS] WATERCOLOR_MODE BRIGHT_CAVE_WATER WATER_ALPHA_MULT WATER_FOG_MULT WATER_FOAM_I WATER_REFRACTION_INTENSITY WAVING_WATER_VERTEX [WATER_WAVE_SETTINGS] + screen.WATER_COLOR_SETTINGS= WATERCOLOR_R WATERCOLOR_G WATERCOLOR_B + screen.UNDERWATER_COLOR_SETTINGS= UNDERWATERCOLOR_R UNDERWATERCOLOR_G UNDERWATERCOLOR_B + screen.WATER_WAVE_SETTINGS= WATER_BUMPINESS WATER_BUMP_SMALL WATER_BUMP_MED WATER_BUMP_BIG WATER_SPEED_MULT WATER_SIZE_MULT + screen.WAVING_SETTINGS= WAVING_FOLIAGE WAVING_LEAVES WAVING_WATER_VERTEX WAVING_LAVA WAVING_LILY_PAD WAVING_RAIN WAVING_SPEED WAVING_I NO_WAVING_INDOORS WAVING_I_RAIN_MULT + screen.CAMERA_SETTINGS= [TONEMAP_SETTINGS] [WORLD_BLUR_SETTINGS] BLOOM BLOOM_STRENGTH VIGNETTE_R IMAGE_SHARPENING UNDERWATER_DISTORTION CHROMA_ABERRATION MOTION_BLURRING MOTION_BLURRING_STRENGTH LENSFLARE_MODE LENSFLARE_I TAA_MODE DISTANT_LIGHT_BOKEH + screen.TONEMAP_SETTINGS= T_EXPOSURE TM_WHITE_CURVE T_UPPER_CURVE T_LOWER_CURVE T_SATURATION T_VIBRANCE [COLORGRADING_SETTINGS] + screen.COLORGRADING_SETTINGS= COLORGRADING GR_RR GR_GR GR_RG GR_GG GR_RB GR_GB GR_BR GR_RC GR_BG GR_GC GR_BB GR_BC + screen.WORLD_BLUR_SETTINGS= WORLD_BLUR WB_FOV_SCALED WB_CHROMATIC WB_ANAMORPHIC WB_DOF_I WB_DOF_FOCUS WB_DB_DAY_I WB_DB_NIGHT_I WB_DB_RAIN_I WB_DB_WATER_I WB_DB_NETHER_I WB_DB_END_I + screen.ATMOSPHERE_SETTINGS= [ATM_COLOR_SETTINGS] [CLOUD_SETTINGS] [FOG_SETTINGS] [SUN_MOON_SETTINGS] [NETHER_SETTINGS] [WEATHER_SETTINGS] AURORA_STYLE_DEFINE AURORA_CONDITION NIGHT_NEBULA NIGHT_NEBULA_I NIGHT_STAR_AMOUNT RAINBOWS + screen.CLOUD_SETTINGS= CLOUD_STYLE_DEFINE CLOUD_ALT1 CLOUD_SPEED_MULT CLOUD_CLOSED_AREA_CHECK CLOUD_SHADOWS [CLOUD_COLOR_SETTINGS] [CLOUD_UNBOUND_SETTINGS] [CLOUD_REIMAGINED_SETTINGS] + screen.CLOUD_COLOR_SETTINGS= CLOUD_R CLOUD_G CLOUD_B + screen.CLOUD_UNBOUND_SETTINGS= CLOUD_UNBOUND_AMOUNT CLOUD_UNBOUND_SIZE_MULT CLOUD_UNBOUND_RAIN_ADD + screen.CLOUD_REIMAGINED_SETTINGS= DOUBLE_REIM_CLOUDS CLOUD_ALT2 + screen.FOG_SETTINGS= BORDER_FOG CAVE_FOG ATM_FOG_MULT ATM_FOG_DISTANCE ATM_FOG_ALTITUDE LIGHTSHAFT_BEHAVIOUR SPECIAL_PALE_GARDEN_LIGHTSHAFTS LIGHTSHAFT_SMOKE LIGHTSHAFT_DAY_I LIGHTSHAFT_NIGHT_I LIGHTSHAFT_RAIN_I + screen.SUN_MOON_SETTINGS= SUN_MOON_STYLE_DEFINE SUN_ANGLE SUN_MOON_HORIZON SUN_MOON_DURING_RAIN + screen.NETHER_SETTINGS= NETHER_VIEW_LIMIT NETHER_COLOR_MODE NETHER_STORM NETHER_STORM_I NETHER_STORM_LOWER_ALT NETHER_STORM_HEIGHT + screen.WEATHER_SETTINGS= RAIN_STYLE SPECIAL_BIOME_WEATHER WEATHER_TEX_OPACITY SUN_MOON_DURING_RAIN + screen.ATM_COLOR_SETTINGS= ATM_COLOR_MULTS [MORNING_ATM_MULTS] [NOON_ATM_MULTS] [NIGHT_ATM_MULTS] [RAIN_ATM_MULTS] [NETHER_ATM_MULTS] [END_ATM_MULTS] + screen.MORNING_ATM_MULTS= ATM_MORNING_R ATM_MORNING_G ATM_MORNING_B ATM_MORNING_I + screen.NOON_ATM_MULTS= ATM_NOON_R ATM_NOON_G ATM_NOON_B ATM_NOON_I + screen.NIGHT_ATM_MULTS= ATM_NIGHT_R ATM_NIGHT_G ATM_NIGHT_B ATM_NIGHT_I + screen.RAIN_ATM_MULTS= ATM_RAIN_R ATM_RAIN_G ATM_RAIN_B ATM_RAIN_I + screen.NETHER_ATM_MULTS= ATM_NETHER_R ATM_NETHER_G ATM_NETHER_B ATM_NETHER_I + screen.END_ATM_MULTS= ATM_END_R ATM_END_G ATM_END_B ATM_END_I + screen.LIGHTING_SETTINGS= [LIGHT_COLOR_SETTINGS] AMBIENT_MULT [BLOCKLIGHT_COLOR_SETTINGS] SHADOW_SMOOTHING [PIXELATED_LIGHTING_SETTINGS] MINIMUM_LIGHT_MODE HELD_LIGHTING_MODE BLOCKLIGHT_FLICKERING SSAO_I VANILLAAO_I PLAYER_SHADOW + screen.LIGHT_COLOR_SETTINGS= LIGHT_COLOR_MULTS [MORNING_LIGHT_MULTS] [NOON_LIGHT_MULTS] [NIGHT_LIGHT_MULTS] [RAIN_LIGHT_MULTS] [NETHER_LIGHT_MULTS] [END_LIGHT_MULTS] + screen.MORNING_LIGHT_MULTS= LIGHT_MORNING_R LIGHT_MORNING_G LIGHT_MORNING_B LIGHT_MORNING_I + screen.NOON_LIGHT_MULTS= LIGHT_NOON_R LIGHT_NOON_G LIGHT_NOON_B LIGHT_NOON_I + screen.NIGHT_LIGHT_MULTS= LIGHT_NIGHT_R LIGHT_NIGHT_G LIGHT_NIGHT_B LIGHT_NIGHT_I + screen.RAIN_LIGHT_MULTS= LIGHT_RAIN_R LIGHT_RAIN_G LIGHT_RAIN_B LIGHT_RAIN_I + screen.NETHER_LIGHT_MULTS= LIGHT_NETHER_R LIGHT_NETHER_G LIGHT_NETHER_B LIGHT_NETHER_I + screen.END_LIGHT_MULTS= LIGHT_END_R LIGHT_END_G LIGHT_END_B LIGHT_END_I + screen.BLOCKLIGHT_COLOR_SETTINGS= XLIGHT_R XLIGHT_G XLIGHT_B XLIGHT_I + screen.PIXELATED_LIGHTING_SETTINGS= PIXELATED_SHADOWS PIXELATED_BLOCKLIGHT PIXELATED_AO PIXEL_SCALE + screen.OTHER_SETTINGS= [SELECT_OUTLINE_SETTINGS] [WORLD_OUTLINE_SETTINGS] [MOON_PHASE_INF_SETTINGS] [ACL_FEATURES_SETTINGS] SHOW_LIGHT_LEVEL REDUCE_CLOSE_PARTICLES LESS_LAVA_FOG SNOWY_WORLD HAND_SWAYING COLOR_CODED_PROGRAMS GLOWING_COLORED_PARTICLES + screen.SELECT_OUTLINE_SETTINGS= SELECT_OUTLINE SELECT_OUTLINE_I SELECT_OUTLINE_R SELECT_OUTLINE_G SELECT_OUTLINE_B SELECT_OUTLINE_AUTO_HIDE + screen.WORLD_OUTLINE_SETTINGS= WORLD_OUTLINE WORLD_OUTLINE_THICKNESS WORLD_OUTLINE_I WORLD_OUTLINE_ON_ENTITIES DARK_OUTLINE DARK_OUTLINE_THICKNESS + screen.MOON_PHASE_INF_SETTINGS= MOON_PHASE_INF_LIGHT MOON_PHASE_INF_ATMOSPHERE MOON_PHASE_INF_REFLECTION MOON_PHASE_FULL MOON_PHASE_PARTIAL MOON_PHASE_DARK + screen.ACL_FEATURES_SETTINGS= COLORED_LIGHT_SATURATION COLORED_LIGHT_FOG COLORED_LIGHT_FOG_I CONNECTED_GLASS_EFFECT PORTAL_EDGE_EFFECT PUDDLE_VOXELIZATION COLORED_CANDLE_LIGHT + +# Set Sliders + sliders=shadowDistance BLOOM_STRENGTH CLOUD_ALT1 CLOUD_ALT2 T_EXPOSURE TM_WHITE_CURVE T_LOWER_CURVE T_UPPER_CURVE T_SATURATION T_VIBRANCE MOTION_BLURRING_STRENGTH NORMAL_MAP_STRENGTH CUSTOM_EMISSION_INTENSITY IMAGE_SHARPENING SUN_ANGLE ATM_FOG_MULT ATM_FOG_DISTANCE ATM_FOG_ALTITUDE MINIMUM_LIGHT_MODE GR_RR GR_RG GR_RB GR_RC GR_GR GR_GG GR_GB GR_GC GR_BR GR_BG GR_BB GR_BC POM_DEPTH POM_QUALITY POM_DISTANCE WATER_BUMPINESS WATER_BUMP_SMALL WATER_BUMP_MED WATER_BUMP_BIG WATER_SPEED_MULT WATER_SIZE_MULT WATER_REFRACTION_INTENSITY SELECT_OUTLINE_I SELECT_OUTLINE_R SELECT_OUTLINE_G SELECT_OUTLINE_B LIGHT_NOON_R LIGHT_NOON_G LIGHT_NOON_B LIGHT_NOON_I ATM_NOON_R ATM_NOON_G ATM_NOON_B ATM_NOON_I LIGHT_MORNING_R LIGHT_MORNING_G LIGHT_MORNING_B LIGHT_MORNING_I ATM_MORNING_R ATM_MORNING_G ATM_MORNING_B ATM_MORNING_I LIGHT_NIGHT_R LIGHT_NIGHT_G LIGHT_NIGHT_B LIGHT_NIGHT_I ATM_NIGHT_R ATM_NIGHT_G ATM_NIGHT_B ATM_NIGHT_I LIGHT_RAIN_R LIGHT_RAIN_G LIGHT_RAIN_B LIGHT_RAIN_I ATM_RAIN_R ATM_RAIN_G ATM_RAIN_B ATM_RAIN_I LIGHT_NETHER_R LIGHT_NETHER_G LIGHT_NETHER_B LIGHT_NETHER_I ATM_NETHER_R ATM_NETHER_G ATM_NETHER_B ATM_NETHER_I LIGHT_END_R LIGHT_END_G LIGHT_END_B LIGHT_END_I ATM_END_R ATM_END_G ATM_END_B ATM_END_I WORLD_OUTLINE_I AMBIENT_MULT GENERATED_NORMAL_MULT COATED_TEXTURE_MULT LIGHTSHAFT_DAY_I LIGHTSHAFT_NIGHT_I LIGHTSHAFT_RAIN_I WATERCOLOR_R WATERCOLOR_G WATERCOLOR_B WATER_FOAM_I WATER_ALPHA_MULT WATER_FOG_MULT UNDERWATERCOLOR_R UNDERWATERCOLOR_G UNDERWATERCOLOR_B GLOWING_ORE_MULT SSAO_I VANILLAAO_I CHROMA_ABERRATION XLIGHT_R XLIGHT_G XLIGHT_B NIGHT_NEBULA_I WEATHER_TEX_OPACITY NETHER_STORM_LOWER_ALT NETHER_STORM_HEIGHT NETHER_STORM_I CLOUD_UNBOUND_AMOUNT CLOUD_UNBOUND_SIZE_MULT CLOUD_UNBOUND_RAIN_ADD CLOUD_SPEED_MULT WB_DOF_I WB_DOF_FOCUS WB_DB_DAY_I WB_DB_NIGHT_I WB_DB_RAIN_I WB_DB_WATER_I WB_DB_NETHER_I WB_DB_END_I WAVING_SPEED WAVING_I MOON_PHASE_FULL MOON_PHASE_PARTIAL MOON_PHASE_DARK LENSFLARE_I SHADOW_SMOOTHING BLOCKLIGHT_FLICKERING NETHER_VIEW_LIMIT CLOUD_R CLOUD_G CLOUD_B WAVING_I_RAIN_MULT COLORED_LIGHT_FOG_I XLIGHT_I COLORED_LIGHT_SATURATION PIXEL_SCALE + +# Special Define Handling + # Needed to disable colored lighting related code in shaders.properties + #ifdef MC_OS_MAC + #define COLORED_LIGHTING 0 + #endif + +# Pipeline Settings + oldHandLight = false + oldLighting = false + separateAo = true + underwaterOverlay = false + vignette = false + beacon.beam.depth = true + rain.depth = false + particles.ordering = mixed + +# Program Settings + alphaTest.gbuffers_weather=GREATER 0.0001 + alphaTest.gbuffers_skytextured=GREATER 0.0001 + alphaTest.gbuffers_skybasic=GREATER 0.0001 + alphaTest.gbuffers_water=GREATER 0.0001 + alphaTest.gbuffers_beaconbeam=GREATER 0.0001 + alphaTest.gbuffers_damagedblock=GREATER 0.004 + alphaTest.gbuffers_spidereyes=GREATER 0.0001 + alphaTest.gbuffers_clouds=GREATER 0.0001 + +# Link Programs to Options + # Note: Old Optifine seems to always treat "#if INT_DEFINE == X" checks as "#if 0 == X" so treat 0 as the default behaviour + # This quirk doesn't apply to "enabled=DEFINE" checks. Those work fine as long as the define is a boolean. + program.world0/composite2.enabled=MOTION_BLURRING + program.world-1/composite2.enabled=MOTION_BLURRING + program.world1/composite2.enabled=MOTION_BLURRING + program.world0/composite4.enabled=BLOOM + program.world-1/composite4.enabled=BLOOM + program.world1/composite4.enabled=BLOOM + #if SHADOW_QUALITY == -1 + program.world0/shadow.enabled=false + program.world-1/shadow.enabled=false + program.world1/shadow.enabled=false + #endif + #if FXAA_DEFINE == -1 + program.world0/composite7.enabled=FXAA + program.world-1/composite7.enabled=FXAA + program.world1/composite7.enabled=FXAA + #endif + #if COLORED_LIGHTING == 0 + program.world0/shadowcomp.enabled=false + program.world-1/shadowcomp.enabled=false + program.world1/shadowcomp.enabled=false + #endif + +# Miscellaneous + #if ENTITY_SHADOWS_DEFINE == -1 + shadowEntities = false + shadowBlockEntities = false + #if PLAYER_SHADOW == 1 + shadowPlayer = true + #endif + #endif + #if PLAYER_SHADOW == -1 + shadowPlayer = false + #endif + #ifdef DISTANT_HORIZONS + blend.dh_water=SRC_ALPHA ONE_MINUS_SRC_ALPHA ONE ONE_MINUS_SRC_ALPHA + blend.gbuffers_water=SRC_ALPHA ONE_MINUS_SRC_ALPHA ONE ONE_MINUS_SRC_ALPHA + dhShadow.enabled = false + dhClouds = off + #endif + #if COLORED_LIGHTING > 0 + iris.features.optional = CUSTOM_IMAGES + #endif + #if COLORED_LIGHTING > 0 + shadow.culling = reversed + voxelizeLightBlocks = false + #if COLORED_LIGHTING == 128 + image.voxel_img = voxel_sampler red_integer r8ui unsigned_int true false 128 64 128 + image.floodfill_img = floodfill_sampler rgba rgba16f half_float false false 128 64 128 + image.floodfill_img_copy = floodfill_sampler_copy rgba rgba16f half_float false false 128 64 128 + #elif COLORED_LIGHTING == 192 + image.voxel_img = voxel_sampler red_integer r8ui unsigned_int true false 192 96 192 + image.floodfill_img = floodfill_sampler rgba rgba16f half_float false false 192 96 192 + image.floodfill_img_copy = floodfill_sampler_copy rgba rgba16f half_float false false 192 96 192 + #elif COLORED_LIGHTING == 256 + image.voxel_img = voxel_sampler red_integer r8ui unsigned_int true false 256 128 256 + image.floodfill_img = floodfill_sampler rgba rgba16f half_float false false 256 128 256 + image.floodfill_img_copy = floodfill_sampler_copy rgba rgba16f half_float false false 256 128 256 + #elif COLORED_LIGHTING == 384 + image.voxel_img = voxel_sampler red_integer r8ui unsigned_int true false 384 192 384 + image.floodfill_img = floodfill_sampler rgba rgba16f half_float false false 384 192 384 + image.floodfill_img_copy = floodfill_sampler_copy rgba rgba16f half_float false false 384 192 384 + #elif COLORED_LIGHTING == 512 + image.voxel_img = voxel_sampler red_integer r8ui unsigned_int true false 512 256 512 + image.floodfill_img = floodfill_sampler rgba rgba16f half_float false false 512 256 512 + image.floodfill_img_copy = floodfill_sampler_copy rgba rgba16f half_float false false 512 256 512 + #elif COLORED_LIGHTING == 768 + image.voxel_img = voxel_sampler red_integer r8ui unsigned_int true false 768 256 768 + image.floodfill_img = floodfill_sampler rgba rgba16f half_float false false 768 256 768 + image.floodfill_img_copy = floodfill_sampler_copy rgba rgba16f half_float false false 768 256 768 + #elif COLORED_LIGHTING == 1024 + image.voxel_img = voxel_sampler red_integer r8ui unsigned_int true false 1024 256 1024 + image.floodfill_img = floodfill_sampler rgba rgba16f half_float false false 1024 256 1024 + image.floodfill_img_copy = floodfill_sampler_copy rgba rgba16f half_float false false 1024 256 1024 + #endif + + #if RAIN_PUDDLES > 0 + image.puddle_img = puddle_sampler red_integer r8ui unsigned_int true false 128 128 + #endif + #endif +# Custom Noise + texture.noise=lib/textures/noise.png + texture.deferred.colortex3=lib/textures/cloud-water.png + texture.gbuffers.gaux4=lib/textures/cloud-water.png + +# Custom Uniforms + uniform.float.framemod8 = frameCounter % 8 + uniform.float.isEyeInCave = if(isEyeInWater == 0, 1.0 - smooth(202, if(eyeAltitude < 5.0, eyeBrightness.y / 240.0, 1.0), 6, 12), 0.0) + + uniform.float.inDry = smooth(101, if(in(biome_precipitation, 0), 1, 0), 20, 10) + uniform.float.inRainy = smooth(102, if(in(biome_precipitation, 1), 1, 0), 20, 10) + uniform.float.inSnowy = smooth(103, if(in(biome_precipitation, 2), 1, 0), 20, 10) + + variable.float.difX = cameraPosition.x - previousCameraPosition.x + variable.float.difY = cameraPosition.y - previousCameraPosition.y + variable.float.difZ = cameraPosition.z - previousCameraPosition.z + variable.float.difSum = abs(difX) + abs(difY) + abs(difZ) + variable.float.moving = if(difSum > 0.0 && difSum < 1.0, 1, 0) + variable.float.moved = smooth(2, moving, 0, 31536000) + uniform.float.starter = smooth(3, moved, 20, 20) + + uniform.float.frameTimeSmooth = smooth(5, frameTime, 5, 5) + uniform.float.eyeBrightnessM = smooth(4, eyeBrightness.y / 240.0, 5, 5) + uniform.float.eyeBrightnessM2 = smooth(4, if(eyeBrightness.y > 239.0, 1, 0), 2, 2) + uniform.float.rainFactor = smooth(1, rainStrength, 3, 3) + + uniform.float.inNetherWastes=smooth(50, if(in(biome, BIOME_NETHER_WASTES), 1, 0), 15, 15) + uniform.float.inCrimsonForest=smooth(51, if(in(biome, BIOME_CRIMSON_FOREST), 1, 0), 15, 15) + uniform.float.inWarpedForest=smooth(52, if(in(biome, BIOME_WARPED_FOREST), 1, 0), 15, 15) + uniform.float.inBasaltDeltas=smooth(53, if(in(biome, BIOME_BASALT_DELTAS), 1, 0), 15, 15) + uniform.float.inSoulValley=smooth(54, if(in(biome, BIOME_SOUL_SAND_VALLEY), 1, 0), 15, 15) + + uniform.float.inPaleGarden=smooth(54, if(in(biome, BIOME_PALE_GARDEN), 1, 0), 15, 15) + + uniform.float.maxBlindnessDarkness=max(blindness, darknessFactor) \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite.fsh new file mode 100644 index 0000000..fae1789 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define COMPOSITE + +#include "/program/composite.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite.vsh new file mode 100644 index 0000000..7bb5141 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define COMPOSITE + +#include "/program/composite.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite2.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite2.fsh new file mode 100644 index 0000000..6cc08b6 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite2.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define COMPOSITE2 + +#include "/program/composite2.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite2.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite2.vsh new file mode 100644 index 0000000..1a44979 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite2.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define COMPOSITE2 + +#include "/program/composite2.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite3.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite3.fsh new file mode 100644 index 0000000..a5bda41 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite3.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define COMPOSITE3 + +#include "/program/composite3.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite3.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite3.vsh new file mode 100644 index 0000000..5085a50 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite3.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define COMPOSITE3 + +#include "/program/composite3.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite4.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite4.fsh new file mode 100644 index 0000000..710be00 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite4.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define COMPOSITE4 + +#include "/program/composite4.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite4.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite4.vsh new file mode 100644 index 0000000..a606d30 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite4.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define COMPOSITE4 + +#include "/program/composite4.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite5.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite5.fsh new file mode 100644 index 0000000..f198bc1 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite5.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define COMPOSITE5 + +#include "/program/composite5.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite5.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite5.vsh new file mode 100644 index 0000000..d137c1e --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite5.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define COMPOSITE5 + +#include "/program/composite5.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite6.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite6.fsh new file mode 100644 index 0000000..c9845a3 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite6.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define COMPOSITE6 + +#include "/program/composite6.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite6.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite6.vsh new file mode 100644 index 0000000..f5a3ec0 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite6.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define COMPOSITE6 + +#include "/program/composite6.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite7.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite7.fsh new file mode 100644 index 0000000..a3b40be --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite7.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define COMPOSITE7 + +#include "/program/composite7.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite7.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite7.vsh new file mode 100644 index 0000000..3d9380f --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/composite7.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define COMPOSITE7 + +#include "/program/composite7.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/deferred1.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/deferred1.fsh new file mode 100644 index 0000000..766a657 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/deferred1.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define DEFERRED1 + +#include "/program/deferred1.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/deferred1.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/deferred1.vsh new file mode 100644 index 0000000..4fb36af --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/deferred1.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define DEFERRED1 + +#include "/program/deferred1.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/dh_terrain.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/dh_terrain.fsh new file mode 100644 index 0000000..e930e94 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/dh_terrain.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define DH_TERRAIN + +#include "/program/dh_terrain.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/dh_terrain.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/dh_terrain.vsh new file mode 100644 index 0000000..59bee82 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/dh_terrain.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define DH_TERRAIN + +#include "/program/dh_terrain.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/dh_water.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/dh_water.fsh new file mode 100644 index 0000000..0847015 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/dh_water.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define DH_WATER + +#include "/program/dh_water.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/dh_water.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/dh_water.vsh new file mode 100644 index 0000000..a40197e --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/dh_water.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define DH_WATER + +#include "/program/dh_water.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/final.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/final.fsh new file mode 100644 index 0000000..bfc1eea --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/final.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define FINAL + +#include "/program/final.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/final.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/final.vsh new file mode 100644 index 0000000..e51d6a3 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/final.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define FINAL + +#include "/program/final.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_armor_glint.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_armor_glint.fsh new file mode 100644 index 0000000..0f81aa4 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_armor_glint.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define GBUFFERS_ARMOR_GLINT + +#include "/program/gbuffers_armor_glint.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_armor_glint.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_armor_glint.vsh new file mode 100644 index 0000000..5136882 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_armor_glint.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define GBUFFERS_ARMOR_GLINT + +#include "/program/gbuffers_armor_glint.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_basic.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_basic.fsh new file mode 100644 index 0000000..64a508e --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_basic.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define GBUFFERS_BASIC + +#include "/program/gbuffers_basic.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_basic.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_basic.vsh new file mode 100644 index 0000000..177aee4 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_basic.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define GBUFFERS_BASIC + +#include "/program/gbuffers_basic.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_beaconbeam.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_beaconbeam.fsh new file mode 100644 index 0000000..2943ecd --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_beaconbeam.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define GBUFFERS_BEACONBEAM + +#include "/program/gbuffers_beaconbeam.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_beaconbeam.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_beaconbeam.vsh new file mode 100644 index 0000000..a6b10e9 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_beaconbeam.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define GBUFFERS_BEACONBEAM + +#include "/program/gbuffers_beaconbeam.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_block.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_block.fsh new file mode 100644 index 0000000..c32e321 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_block.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define GBUFFERS_BLOCK + +#include "/program/gbuffers_block.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_block.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_block.vsh new file mode 100644 index 0000000..0983b02 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_block.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define GBUFFERS_BLOCK + +#include "/program/gbuffers_block.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_clouds.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_clouds.fsh new file mode 100644 index 0000000..6fbcd1a --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_clouds.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define GBUFFERS_CLOUDS + +#include "/program/gbuffers_clouds.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_clouds.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_clouds.vsh new file mode 100644 index 0000000..a34eccf --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_clouds.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define GBUFFERS_CLOUDS + +#include "/program/gbuffers_clouds.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_damagedblock.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_damagedblock.fsh new file mode 100644 index 0000000..68514d5 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_damagedblock.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define GBUFFERS_DAMAGEDBLOCK + +#include "/program/gbuffers_damagedblock.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_damagedblock.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_damagedblock.vsh new file mode 100644 index 0000000..fcaf645 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_damagedblock.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define GBUFFERS_DAMAGEDBLOCK + +#include "/program/gbuffers_damagedblock.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_entities.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_entities.fsh new file mode 100644 index 0000000..c9a8f80 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_entities.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define GBUFFERS_ENTITIES + +#include "/program/gbuffers_entities.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_entities.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_entities.vsh new file mode 100644 index 0000000..889a031 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_entities.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define GBUFFERS_ENTITIES + +#include "/program/gbuffers_entities.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_entities_glowing.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_entities_glowing.fsh new file mode 100644 index 0000000..d564fad --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_entities_glowing.fsh @@ -0,0 +1,8 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define GBUFFERS_ENTITIES +#define GBUFFERS_ENTITIES_GLOWING + +#include "/program/gbuffers_entities.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_entities_glowing.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_entities_glowing.vsh new file mode 100644 index 0000000..dd4a249 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_entities_glowing.vsh @@ -0,0 +1,8 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define GBUFFERS_ENTITIES +#define GBUFFERS_ENTITIES_GLOWING + +#include "/program/gbuffers_entities.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_hand.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_hand.fsh new file mode 100644 index 0000000..0624efb --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_hand.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define GBUFFERS_HAND + +#include "/program/gbuffers_hand.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_hand.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_hand.vsh new file mode 100644 index 0000000..5409d8d --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_hand.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define GBUFFERS_HAND + +#include "/program/gbuffers_hand.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_line.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_line.fsh new file mode 100644 index 0000000..58c261d --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_line.fsh @@ -0,0 +1,8 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define GBUFFERS_BASIC +#define GBUFFERS_LINE + +#include "/program/gbuffers_basic.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_line.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_line.vsh new file mode 100644 index 0000000..4e8be3d --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_line.vsh @@ -0,0 +1,8 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define GBUFFERS_BASIC +#define GBUFFERS_LINE + +#include "/program/gbuffers_basic.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_skybasic.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_skybasic.fsh new file mode 100644 index 0000000..06c7e08 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_skybasic.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define GBUFFERS_SKYBASIC + +#include "/program/gbuffers_skybasic.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_skybasic.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_skybasic.vsh new file mode 100644 index 0000000..636dfef --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_skybasic.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define GBUFFERS_SKYBASIC + +#include "/program/gbuffers_skybasic.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_skytextured.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_skytextured.fsh new file mode 100644 index 0000000..b088107 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_skytextured.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define GBUFFERS_SKYTEXTURED + +#include "/program/gbuffers_skytextured.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_skytextured.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_skytextured.vsh new file mode 100644 index 0000000..9218f8c --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_skytextured.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define GBUFFERS_SKYTEXTURED + +#include "/program/gbuffers_skytextured.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_spidereyes.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_spidereyes.fsh new file mode 100644 index 0000000..a778796 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_spidereyes.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define GBUFFERS_SPIDEREYES + +#include "/program/gbuffers_spidereyes.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_spidereyes.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_spidereyes.vsh new file mode 100644 index 0000000..8ae1682 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_spidereyes.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define GBUFFERS_SPIDEREYES + +#include "/program/gbuffers_spidereyes.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_terrain.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_terrain.fsh new file mode 100644 index 0000000..2ceb55b --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_terrain.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define GBUFFERS_TERRAIN + +#include "/program/gbuffers_terrain.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_terrain.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_terrain.vsh new file mode 100644 index 0000000..8dab530 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_terrain.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define GBUFFERS_TERRAIN + +#include "/program/gbuffers_terrain.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_textured.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_textured.fsh new file mode 100644 index 0000000..5df967d --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_textured.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define GBUFFERS_TEXTURED + +#include "/program/gbuffers_textured.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_textured.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_textured.vsh new file mode 100644 index 0000000..99ae96a --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_textured.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define GBUFFERS_TEXTURED + +#include "/program/gbuffers_textured.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_water.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_water.fsh new file mode 100644 index 0000000..aae07af --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_water.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define GBUFFERS_WATER + +#include "/program/gbuffers_water.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_water.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_water.vsh new file mode 100644 index 0000000..1d7a022 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_water.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define GBUFFERS_WATER + +#include "/program/gbuffers_water.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_weather.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_weather.fsh new file mode 100644 index 0000000..9eafe4a --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_weather.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define GBUFFERS_WEATHER + +#include "/program/gbuffers_weather.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_weather.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_weather.vsh new file mode 100644 index 0000000..06f8576 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/gbuffers_weather.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define GBUFFERS_WEATHER + +#include "/program/gbuffers_weather.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/shadow.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/shadow.fsh new file mode 100644 index 0000000..331ba7f --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/shadow.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define NETHER +#define SHADOW + +#include "/program/shadow.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/shadow.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/shadow.vsh new file mode 100644 index 0000000..b7fd396 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/shadow.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define NETHER +#define SHADOW + +#include "/program/shadow.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/shadowcomp.csh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/shadowcomp.csh new file mode 100644 index 0000000..8ccf0d3 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world-1/shadowcomp.csh @@ -0,0 +1,7 @@ +#version 430 compatibility + +#define COMPUTE_SHADER +#define NETHER +#define SHADOWCOMP + +#include "/program/shadowcomp.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite.fsh new file mode 100644 index 0000000..dad90a8 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define COMPOSITE + +#include "/program/composite.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite.vsh new file mode 100644 index 0000000..0f78245 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define COMPOSITE + +#include "/program/composite.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite2.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite2.fsh new file mode 100644 index 0000000..f1f7e1a --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite2.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define COMPOSITE2 + +#include "/program/composite2.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite2.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite2.vsh new file mode 100644 index 0000000..f903444 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite2.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define COMPOSITE2 + +#include "/program/composite2.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite3.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite3.fsh new file mode 100644 index 0000000..1992c87 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite3.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define COMPOSITE3 + +#include "/program/composite3.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite3.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite3.vsh new file mode 100644 index 0000000..9e6a631 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite3.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define COMPOSITE3 + +#include "/program/composite3.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite4.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite4.fsh new file mode 100644 index 0000000..fa3387b --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite4.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define COMPOSITE4 + +#include "/program/composite4.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite4.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite4.vsh new file mode 100644 index 0000000..bf8857c --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite4.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define COMPOSITE4 + +#include "/program/composite4.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite5.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite5.fsh new file mode 100644 index 0000000..4fa6319 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite5.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define COMPOSITE5 + +#include "/program/composite5.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite5.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite5.vsh new file mode 100644 index 0000000..d6d7b0a --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite5.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define COMPOSITE5 + +#include "/program/composite5.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite6.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite6.fsh new file mode 100644 index 0000000..8822b30 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite6.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define COMPOSITE6 + +#include "/program/composite6.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite6.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite6.vsh new file mode 100644 index 0000000..2583e20 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite6.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define COMPOSITE6 + +#include "/program/composite6.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite7.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite7.fsh new file mode 100644 index 0000000..6c29473 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite7.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define COMPOSITE7 + +#include "/program/composite7.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite7.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite7.vsh new file mode 100644 index 0000000..8e57b6b --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/composite7.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define COMPOSITE7 + +#include "/program/composite7.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/deferred1.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/deferred1.fsh new file mode 100644 index 0000000..6098b13 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/deferred1.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define DEFERRED1 + +#include "/program/deferred1.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/deferred1.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/deferred1.vsh new file mode 100644 index 0000000..fad016d --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/deferred1.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define DEFERRED1 + +#include "/program/deferred1.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/dh_terrain.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/dh_terrain.fsh new file mode 100644 index 0000000..9fc89a9 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/dh_terrain.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define DH_TERRAIN + +#include "/program/dh_terrain.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/dh_terrain.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/dh_terrain.vsh new file mode 100644 index 0000000..db21519 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/dh_terrain.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define DH_TERRAIN + +#include "/program/dh_terrain.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/dh_water.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/dh_water.fsh new file mode 100644 index 0000000..892d517 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/dh_water.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define DH_WATER + +#include "/program/dh_water.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/dh_water.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/dh_water.vsh new file mode 100644 index 0000000..32a0a02 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/dh_water.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define DH_WATER + +#include "/program/dh_water.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/final.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/final.fsh new file mode 100644 index 0000000..742b4da --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/final.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define FINAL + +#include "/program/final.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/final.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/final.vsh new file mode 100644 index 0000000..c47d4a4 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/final.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define FINAL + +#include "/program/final.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_armor_glint.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_armor_glint.fsh new file mode 100644 index 0000000..58fe3b8 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_armor_glint.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define GBUFFERS_ARMOR_GLINT + +#include "/program/gbuffers_armor_glint.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_armor_glint.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_armor_glint.vsh new file mode 100644 index 0000000..a2b2ac5 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_armor_glint.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define GBUFFERS_ARMOR_GLINT + +#include "/program/gbuffers_armor_glint.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_basic.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_basic.fsh new file mode 100644 index 0000000..f13d648 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_basic.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define GBUFFERS_BASIC + +#include "/program/gbuffers_basic.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_basic.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_basic.vsh new file mode 100644 index 0000000..cdee473 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_basic.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define GBUFFERS_BASIC + +#include "/program/gbuffers_basic.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_beaconbeam.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_beaconbeam.fsh new file mode 100644 index 0000000..271c7fa --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_beaconbeam.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define GBUFFERS_BEACONBEAM + +#include "/program/gbuffers_beaconbeam.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_beaconbeam.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_beaconbeam.vsh new file mode 100644 index 0000000..46cd4ef --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_beaconbeam.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define GBUFFERS_BEACONBEAM + +#include "/program/gbuffers_beaconbeam.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_block.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_block.fsh new file mode 100644 index 0000000..479fe43 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_block.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define GBUFFERS_BLOCK + +#include "/program/gbuffers_block.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_block.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_block.vsh new file mode 100644 index 0000000..497e2e9 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_block.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define GBUFFERS_BLOCK + +#include "/program/gbuffers_block.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_clouds.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_clouds.fsh new file mode 100644 index 0000000..030c0ed --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_clouds.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define GBUFFERS_CLOUDS + +#include "/program/gbuffers_clouds.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_clouds.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_clouds.vsh new file mode 100644 index 0000000..1e29c7f --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_clouds.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define GBUFFERS_CLOUDS + +#include "/program/gbuffers_clouds.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_damagedblock.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_damagedblock.fsh new file mode 100644 index 0000000..d034df8 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_damagedblock.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define GBUFFERS_DAMAGEDBLOCK + +#include "/program/gbuffers_damagedblock.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_damagedblock.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_damagedblock.vsh new file mode 100644 index 0000000..62f9129 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_damagedblock.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define GBUFFERS_DAMAGEDBLOCK + +#include "/program/gbuffers_damagedblock.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_entities.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_entities.fsh new file mode 100644 index 0000000..ed4cba5 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_entities.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define GBUFFERS_ENTITIES + +#include "/program/gbuffers_entities.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_entities.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_entities.vsh new file mode 100644 index 0000000..09b502e --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_entities.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define GBUFFERS_ENTITIES + +#include "/program/gbuffers_entities.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_entities_glowing.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_entities_glowing.fsh new file mode 100644 index 0000000..d76a61f --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_entities_glowing.fsh @@ -0,0 +1,8 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define GBUFFERS_ENTITIES +#define GBUFFERS_ENTITIES_GLOWING + +#include "/program/gbuffers_entities.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_entities_glowing.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_entities_glowing.vsh new file mode 100644 index 0000000..abb6aa5 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_entities_glowing.vsh @@ -0,0 +1,8 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define GBUFFERS_ENTITIES +#define GBUFFERS_ENTITIES_GLOWING + +#include "/program/gbuffers_entities.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_hand.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_hand.fsh new file mode 100644 index 0000000..922d299 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_hand.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define GBUFFERS_HAND + +#include "/program/gbuffers_hand.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_hand.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_hand.vsh new file mode 100644 index 0000000..76fd7c1 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_hand.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define GBUFFERS_HAND + +#include "/program/gbuffers_hand.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_line.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_line.fsh new file mode 100644 index 0000000..f1c68c1 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_line.fsh @@ -0,0 +1,8 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define GBUFFERS_BASIC +#define GBUFFERS_LINE + +#include "/program/gbuffers_basic.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_line.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_line.vsh new file mode 100644 index 0000000..4df1974 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_line.vsh @@ -0,0 +1,8 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define GBUFFERS_BASIC +#define GBUFFERS_LINE + +#include "/program/gbuffers_basic.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_skybasic.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_skybasic.fsh new file mode 100644 index 0000000..63e2d90 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_skybasic.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define GBUFFERS_SKYBASIC + +#include "/program/gbuffers_skybasic.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_skybasic.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_skybasic.vsh new file mode 100644 index 0000000..2cda497 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_skybasic.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define GBUFFERS_SKYBASIC + +#include "/program/gbuffers_skybasic.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_skytextured.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_skytextured.fsh new file mode 100644 index 0000000..bdbf86e --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_skytextured.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define GBUFFERS_SKYTEXTURED + +#include "/program/gbuffers_skytextured.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_skytextured.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_skytextured.vsh new file mode 100644 index 0000000..a388b1f --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_skytextured.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define GBUFFERS_SKYTEXTURED + +#include "/program/gbuffers_skytextured.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_spidereyes.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_spidereyes.fsh new file mode 100644 index 0000000..3dace05 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_spidereyes.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define GBUFFERS_SPIDEREYES + +#include "/program/gbuffers_spidereyes.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_spidereyes.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_spidereyes.vsh new file mode 100644 index 0000000..1350630 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_spidereyes.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define GBUFFERS_SPIDEREYES + +#include "/program/gbuffers_spidereyes.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_terrain.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_terrain.fsh new file mode 100644 index 0000000..79df238 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_terrain.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define GBUFFERS_TERRAIN + +#include "/program/gbuffers_terrain.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_terrain.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_terrain.vsh new file mode 100644 index 0000000..0abbcf9 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_terrain.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define GBUFFERS_TERRAIN + +#include "/program/gbuffers_terrain.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_textured.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_textured.fsh new file mode 100644 index 0000000..e498e40 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_textured.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define GBUFFERS_TEXTURED + +#include "/program/gbuffers_textured.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_textured.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_textured.vsh new file mode 100644 index 0000000..2e296e6 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_textured.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define GBUFFERS_TEXTURED + +#include "/program/gbuffers_textured.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_water.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_water.fsh new file mode 100644 index 0000000..0059b60 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_water.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define GBUFFERS_WATER + +#include "/program/gbuffers_water.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_water.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_water.vsh new file mode 100644 index 0000000..b6fd22b --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_water.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define GBUFFERS_WATER + +#include "/program/gbuffers_water.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_weather.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_weather.fsh new file mode 100644 index 0000000..1f9c579 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_weather.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define GBUFFERS_WEATHER + +#include "/program/gbuffers_weather.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_weather.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_weather.vsh new file mode 100644 index 0000000..4f9d4ec --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/gbuffers_weather.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define GBUFFERS_WEATHER + +#include "/program/gbuffers_weather.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/shadow.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/shadow.fsh new file mode 100644 index 0000000..f9417e1 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/shadow.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define OVERWORLD +#define SHADOW + +#include "/program/shadow.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/shadow.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/shadow.vsh new file mode 100644 index 0000000..d810d07 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/shadow.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define OVERWORLD +#define SHADOW + +#include "/program/shadow.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/shadowcomp.csh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/shadowcomp.csh new file mode 100644 index 0000000..178e6e3 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world0/shadowcomp.csh @@ -0,0 +1,7 @@ +#version 430 compatibility + +#define COMPUTE_SHADER +#define OVERWORLD +#define SHADOWCOMP + +#include "/program/shadowcomp.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite.fsh new file mode 100644 index 0000000..2595a61 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define COMPOSITE + +#include "/program/composite.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite.vsh new file mode 100644 index 0000000..610f285 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define COMPOSITE + +#include "/program/composite.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite2.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite2.fsh new file mode 100644 index 0000000..829c5a3 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite2.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define COMPOSITE2 + +#include "/program/composite2.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite2.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite2.vsh new file mode 100644 index 0000000..cca9727 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite2.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define COMPOSITE2 + +#include "/program/composite2.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite3.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite3.fsh new file mode 100644 index 0000000..85ec078 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite3.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define COMPOSITE3 + +#include "/program/composite3.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite3.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite3.vsh new file mode 100644 index 0000000..6c329a8 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite3.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define COMPOSITE3 + +#include "/program/composite3.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite4.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite4.fsh new file mode 100644 index 0000000..0153d35 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite4.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define COMPOSITE4 + +#include "/program/composite4.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite4.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite4.vsh new file mode 100644 index 0000000..e6b0fff --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite4.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define COMPOSITE4 + +#include "/program/composite4.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite5.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite5.fsh new file mode 100644 index 0000000..b322d2e --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite5.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define COMPOSITE5 + +#include "/program/composite5.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite5.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite5.vsh new file mode 100644 index 0000000..75de49a --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite5.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define COMPOSITE5 + +#include "/program/composite5.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite6.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite6.fsh new file mode 100644 index 0000000..c94f04d --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite6.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define COMPOSITE6 + +#include "/program/composite6.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite6.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite6.vsh new file mode 100644 index 0000000..c803ba7 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite6.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define COMPOSITE6 + +#include "/program/composite6.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite7.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite7.fsh new file mode 100644 index 0000000..8563949 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite7.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define COMPOSITE7 + +#include "/program/composite7.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite7.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite7.vsh new file mode 100644 index 0000000..28acd20 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/composite7.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define COMPOSITE7 + +#include "/program/composite7.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/deferred1.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/deferred1.fsh new file mode 100644 index 0000000..84534e3 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/deferred1.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define DEFERRED1 + +#include "/program/deferred1.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/deferred1.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/deferred1.vsh new file mode 100644 index 0000000..2a219a2 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/deferred1.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define DEFERRED1 + +#include "/program/deferred1.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/dh_terrain.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/dh_terrain.fsh new file mode 100644 index 0000000..7c4a8cd --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/dh_terrain.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define DH_TERRAIN + +#include "/program/dh_terrain.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/dh_terrain.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/dh_terrain.vsh new file mode 100644 index 0000000..49a825a --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/dh_terrain.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define DH_TERRAIN + +#include "/program/dh_terrain.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/dh_water.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/dh_water.fsh new file mode 100644 index 0000000..056906e --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/dh_water.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define DH_WATER + +#include "/program/dh_water.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/dh_water.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/dh_water.vsh new file mode 100644 index 0000000..effa311 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/dh_water.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define DH_WATER + +#include "/program/dh_water.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/final.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/final.fsh new file mode 100644 index 0000000..d4b7964 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/final.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define FINAL + +#include "/program/final.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/final.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/final.vsh new file mode 100644 index 0000000..644075a --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/final.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define FINAL + +#include "/program/final.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_armor_glint.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_armor_glint.fsh new file mode 100644 index 0000000..e78df41 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_armor_glint.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define GBUFFERS_ARMOR_GLINT + +#include "/program/gbuffers_armor_glint.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_armor_glint.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_armor_glint.vsh new file mode 100644 index 0000000..7777023 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_armor_glint.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define GBUFFERS_ARMOR_GLINT + +#include "/program/gbuffers_armor_glint.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_basic.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_basic.fsh new file mode 100644 index 0000000..ae83ebd --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_basic.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define GBUFFERS_BASIC + +#include "/program/gbuffers_basic.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_basic.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_basic.vsh new file mode 100644 index 0000000..6c7a181 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_basic.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define GBUFFERS_BASIC + +#include "/program/gbuffers_basic.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_beaconbeam.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_beaconbeam.fsh new file mode 100644 index 0000000..747b947 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_beaconbeam.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define GBUFFERS_BEACONBEAM + +#include "/program/gbuffers_beaconbeam.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_beaconbeam.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_beaconbeam.vsh new file mode 100644 index 0000000..20de7ac --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_beaconbeam.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define GBUFFERS_BEACONBEAM + +#include "/program/gbuffers_beaconbeam.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_block.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_block.fsh new file mode 100644 index 0000000..5771e1d --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_block.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define GBUFFERS_BLOCK + +#include "/program/gbuffers_block.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_block.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_block.vsh new file mode 100644 index 0000000..4541d62 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_block.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define GBUFFERS_BLOCK + +#include "/program/gbuffers_block.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_clouds.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_clouds.fsh new file mode 100644 index 0000000..a2f62a2 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_clouds.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define GBUFFERS_CLOUDS + +#include "/program/gbuffers_clouds.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_clouds.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_clouds.vsh new file mode 100644 index 0000000..90673b3 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_clouds.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define GBUFFERS_CLOUDS + +#include "/program/gbuffers_clouds.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_damagedblock.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_damagedblock.fsh new file mode 100644 index 0000000..22f36b9 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_damagedblock.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define GBUFFERS_DAMAGEDBLOCK + +#include "/program/gbuffers_damagedblock.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_damagedblock.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_damagedblock.vsh new file mode 100644 index 0000000..0f8b7e7 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_damagedblock.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define GBUFFERS_DAMAGEDBLOCK + +#include "/program/gbuffers_damagedblock.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_entities.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_entities.fsh new file mode 100644 index 0000000..79660d9 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_entities.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define GBUFFERS_ENTITIES + +#include "/program/gbuffers_entities.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_entities.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_entities.vsh new file mode 100644 index 0000000..69f2e9f --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_entities.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define GBUFFERS_ENTITIES + +#include "/program/gbuffers_entities.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_entities_glowing.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_entities_glowing.fsh new file mode 100644 index 0000000..030727c --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_entities_glowing.fsh @@ -0,0 +1,8 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define GBUFFERS_ENTITIES +#define GBUFFERS_ENTITIES_GLOWING + +#include "/program/gbuffers_entities.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_entities_glowing.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_entities_glowing.vsh new file mode 100644 index 0000000..6f76621 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_entities_glowing.vsh @@ -0,0 +1,8 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define GBUFFERS_ENTITIES +#define GBUFFERS_ENTITIES_GLOWING + +#include "/program/gbuffers_entities.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_hand.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_hand.fsh new file mode 100644 index 0000000..1cc9097 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_hand.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define GBUFFERS_HAND + +#include "/program/gbuffers_hand.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_hand.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_hand.vsh new file mode 100644 index 0000000..5988429 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_hand.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define GBUFFERS_HAND + +#include "/program/gbuffers_hand.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_line.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_line.fsh new file mode 100644 index 0000000..f979206 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_line.fsh @@ -0,0 +1,8 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define GBUFFERS_BASIC +#define GBUFFERS_LINE + +#include "/program/gbuffers_basic.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_line.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_line.vsh new file mode 100644 index 0000000..bd68a35 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_line.vsh @@ -0,0 +1,8 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define GBUFFERS_BASIC +#define GBUFFERS_LINE + +#include "/program/gbuffers_basic.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_skybasic.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_skybasic.fsh new file mode 100644 index 0000000..a30a9e9 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_skybasic.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define GBUFFERS_SKYBASIC + +#include "/program/gbuffers_skybasic.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_skybasic.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_skybasic.vsh new file mode 100644 index 0000000..fc9cb0a --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_skybasic.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define GBUFFERS_SKYBASIC + +#include "/program/gbuffers_skybasic.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_skytextured.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_skytextured.fsh new file mode 100644 index 0000000..43cd0b5 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_skytextured.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define GBUFFERS_SKYTEXTURED + +#include "/program/gbuffers_skytextured.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_skytextured.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_skytextured.vsh new file mode 100644 index 0000000..bfa48f7 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_skytextured.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define GBUFFERS_SKYTEXTURED + +#include "/program/gbuffers_skytextured.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_spidereyes.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_spidereyes.fsh new file mode 100644 index 0000000..3704d64 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_spidereyes.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define GBUFFERS_SPIDEREYES + +#include "/program/gbuffers_spidereyes.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_spidereyes.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_spidereyes.vsh new file mode 100644 index 0000000..5e13fae --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_spidereyes.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define GBUFFERS_SPIDEREYES + +#include "/program/gbuffers_spidereyes.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_terrain.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_terrain.fsh new file mode 100644 index 0000000..5fc09bf --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_terrain.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define GBUFFERS_TERRAIN + +#include "/program/gbuffers_terrain.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_terrain.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_terrain.vsh new file mode 100644 index 0000000..7e8ceeb --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_terrain.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define GBUFFERS_TERRAIN + +#include "/program/gbuffers_terrain.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_textured.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_textured.fsh new file mode 100644 index 0000000..af8149a --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_textured.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define GBUFFERS_TEXTURED + +#include "/program/gbuffers_textured.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_textured.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_textured.vsh new file mode 100644 index 0000000..b79fbac --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_textured.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define GBUFFERS_TEXTURED + +#include "/program/gbuffers_textured.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_water.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_water.fsh new file mode 100644 index 0000000..468355f --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_water.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define GBUFFERS_WATER + +#include "/program/gbuffers_water.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_water.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_water.vsh new file mode 100644 index 0000000..6056a6b --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_water.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define GBUFFERS_WATER + +#include "/program/gbuffers_water.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_weather.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_weather.fsh new file mode 100644 index 0000000..24bb38a --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_weather.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define GBUFFERS_WEATHER + +#include "/program/gbuffers_weather.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_weather.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_weather.vsh new file mode 100644 index 0000000..5c798a7 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/gbuffers_weather.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define GBUFFERS_WEATHER + +#include "/program/gbuffers_weather.glsl" \ No newline at end of file diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/shadow.fsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/shadow.fsh new file mode 100644 index 0000000..f8e55e5 --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/shadow.fsh @@ -0,0 +1,7 @@ +#version 130 + +#define FRAGMENT_SHADER +#define END +#define SHADOW + +#include "/program/shadow.glsl" diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/shadow.vsh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/shadow.vsh new file mode 100644 index 0000000..db102cb --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/shadow.vsh @@ -0,0 +1,7 @@ +#version 130 + +#define VERTEX_SHADER +#define END +#define SHADOW + +#include "/program/shadow.glsl" diff --git a/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/shadowcomp.csh b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/shadowcomp.csh new file mode 100644 index 0000000..cabd78f --- /dev/null +++ b/shaderpacks/ComplementaryUnbound_r5.4/shaders/world1/shadowcomp.csh @@ -0,0 +1,7 @@ +#version 430 compatibility + +#define COMPUTE_SHADER +#define END +#define SHADOWCOMP + +#include "/program/shadowcomp.glsl" \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/Credits b/shaderpacks/MakeUp-UltraFast-9.1c/Credits new file mode 100644 index 0000000..caf52aa --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/Credits @@ -0,0 +1,49 @@ +Some of the code is inspired by the ideas presented below: + +------ + +- Enhanced ambient occlusion is based on Capt Tatsu's ambient occlusion used in + BSL Shaders: + https://bitslablab.com/bslshaders/ + +- Shadow bias technique from Emin implementation, based on a concept + reimagined by gri573: + https://www.complementary.dev/ + +- Interleaved noise from: + "NEXT GENERATION POST PROCESSING IN CALL OF DUTY: ADVANCED WARFARE" + http://advances.realtimerendering.com/s2014/index.html + +- TAA is based on Erkaman's TAA simple implementation: + https://gist.github.com/Erkaman + +- Phi noise by delu: + https://www.shadertoy.com/view/Nst3R7 + Based on TinyTexel: + https://www.shadertoy.com/view/wltSDn + Based on: + http://extremelearning.com.au/unreasonable-effectiveness-of-quasirandom-sequences/ + +- R dither based on: + http://extremelearning.com.au/unreasonable-effectiveness-of-quasirandom-sequences/ + +- Dither 13 and Dther 17 by atyuwen: + https://www.shadertoy.com/view/wl3cWX + Based on: + https://developer.oculus.com/blog/tech-note-shader-snippets-for-efficient-2d-dithering/ + +------ + +If any functions were listed here, and are no longer listed, +they have been removed or replaced by own functions. + +------ + +I am not a graphics developer, I made this shader out of curiosity and +my personal use, but I think it is good enough to be shared. + +I have not copied, but have tried to learn, adapt and modify +other people's ideas in favor of the shader. + +If you think I have violated your copyright, please notify me. +javierg.cim at gmail.com diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/ForDevelopers.EN.md b/shaderpacks/MakeUp-UltraFast-9.1c/ForDevelopers.EN.md new file mode 100644 index 0000000..a0a24d3 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/ForDevelopers.EN.md @@ -0,0 +1,108 @@ +# Welcome to the annotated edition of MakeUp. + +It is my desire that MakeUp can be used as a basis for creating more and better shaders, which is why I am writing this explanatory text about the source code. + +I hope that the comments you find within will be helpful to modify and/or extend MakeUp according to your needs. + +Happy editing! + +## Organization of shader files + +### shaders/common + +In order to avoid duplicate code, the various shaders used in the different dimensions of Minecraft refer to files located in this directory. This is where the main routines for each of the different types of blocks are located, as well as the rest of the steps in the Optifine/Iris work pipeline. + +The vertex and fragment shaders for each step are separated into individual files, which can be clearly identified by the name of the file in question. + +There isn't necessarily a file here for each step or type of block, as some blocks or steps share many things in common, and in MakeUp are treated similarly (or almost the same). + +The best examples of this are solid_blocks_fragment.glsl and solid_blocks_vertex.glsl, which control the drawing of the vast majority of game blocks that are not translucent or that require very special attention. + +The file names attempt to be explicit about their content or purpose. + +### shaders/lang + +Translation files. They name the options in the configuration screens. + +### shaders/lib + +Files with specific routines or declarations used in various places in the main routines are located here. + +The files located in this directory are treated as "libraries" and are called OUTSIDE of the main shader function that requests them (meaning they are not inserted inside the main function of the specific shader). Usually, they declare functions or values used by the requester. + +The file names attempt to be explicit about their content or purpose. + +### shaders/src + +The files here serve a similar role to those in shaders/lib. The difference lies in the way they are inserted into the code of the requesting shader. + +In this case, the code is intended to be inserted INSIDE the main function of the specific shader. They are simple snippets of code that, when used multiple times, are only written once here and are included in a "dirty" way in the code, without being strictly speaking functions. + +### shaders/textures + +As the name suggests, this is where the textures used by the shader are stored. +shaders/worldX + +The well-known folders that host the shaders corresponding to each dimension: + + world0: Overworld + world-1: Nether + world1: The End + +The shaders used for any other unspecified dimension are direct descendants of the "shaders" directory. + +----- + +# Main Drawing Flow + +## Buffers + +Buffers are used and assigned in the following way: + + - noisetex: Stores the water normals in two channels, with the third component being calculated at runtime. (RG8) + - colortex0: Bluenoise (not loaded). (R8) + - colortex1: Main buffer. When DOF is active, it is four channels, with the fourth channel storing the scene depth for antialiasing and to avoid sudden focus changes due to camera shake. (Without DOF: R11F_G11F_B10F, with DOF: RGBA16) + - colortex2: Unused. (R8) + - colortex3: Stores the history used for temporal sampling. When DOF is active, it is four channels, with the fourth channel storing the scene depth for antialiasing and to avoid sudden focus changes due to camera shake. (Without DOF: R11F_G11F_B10F, with DOF: RGBA16) + - gaux1: Stores a version of the scene that will be used for screen-space reflections and refractions. After it is used for that, it is used as an auxiliary to store the scene's bloom. (R11F_G11F_B10F) + - gaux2: Stores the cloud map. (R8) + - gaux3: Stores the historical value of the scene's auto-exposure. The auto-exposure value is obtained by doing a weighted average with the value of this channel and the calculated one in the current scene to create a gradual transition of auto-exposure over time. Yes, it is excessive to use an entire buffer to store a single floating-point value, but it is what it is. It is only used if the default auto-exposure method is used. (R16F) + - gaux4: Stores the color of the sky (without clouds or other objects) to give the color that should be used in the fog (yes, the fog is always the color of the "sky"). This way, objects are blurred and blended with the sky in the distance. + +----- + +# General drawing steps + +This is just a general description of the steps involved in drawing a typical scene. It does not have all the details and may vary depending on the dimension and options activated. + +1. The color of the sky or infinite distance is calculated in 'prepare'. This color is written in two places: + - colortex1: It will be used later to write the solid blocks there. + - gaux4: This buffer will be used to extract the color of the fog from it. + +2. In gbuffers_skybasic, elements such as stars are drawn over the previously drawn sky. Subsequently, textured sky elements are drawn (gbuffers_skytextured). All of this is written in colortex1. + +3. Solid blocks are created in the corresponding gbuffer programs. Here, the lighting of the blocks is calculated (including shadows). +The result will be written in: + - colortex1 + +4. In deferred, clouds and ambient occlusion will be calculated. The results will be written in: + - colortex1: The calculated scene is written here, the "a" channel will store the depth (only if it makes sense). + - gaux1: It will be used later as a data source for the calculation of screen-space reflections and refractions in the next step. + +5. Translucent blocks are drawn. The clouds are recalculated in low quality to be used in reflections. gaux1 is read as a source for screen-space refractions and reflections. The alpha channel continues to be used to store depth. The results are written to: + - colortex1 + +6. In Composite, the current frame's autoexposure level is calculated and weighted with the historical value saved in gaux3. Volumetric lighting is also calculated, and bloom is prepared. The autoexposure does not take into account any of these later effects. +"Preparing bloom" means saving a version of the current scene with the applied exposure level to gaux1. +The calculated autoexposure value is also saved to gaux3. + +7. In Composite1, DOF is calculated and bloom is applied. To apply bloom, a mipmap level of the gaux3 buffer calculated in the previous step is read. The result is written to colortex1 + +8. In Composite2, AA and motion blur are calculated. The result is written to colortex0. If temporal super-sampling is enabled, the history is written to colortex3. + +9. Finally, post-processing effects such as chromatic aberration, autoexposure, tone mapping, and color blindness aids are applied in Final. +The image is then sent to the screen. + +----- + +Review the rest of the directories or source code to find information related to that element. \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/LICENSE b/shaderpacks/MakeUp-UltraFast-9.1c/LICENSE new file mode 100644 index 0000000..0a04128 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/LICENSE @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/ParaDesarrolladores.ES.md b/shaderpacks/MakeUp-UltraFast-9.1c/ParaDesarrolladores.ES.md new file mode 100644 index 0000000..9320da4 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/ParaDesarrolladores.ES.md @@ -0,0 +1,109 @@ +# Bienvenido a la edición comentada de Makeup + +Es mi deseo que MakeUp puede ser utilizado como base para crear más y mejores shaders, es por eso que escribo esta texto explicativo del código fuente. + +Los comentarios que encuentres en el mismo espero te sean de ayuda para modificar y/o extender MakeUp de acuerdo a tus necesidades. + +¡Feliz edición! + +## Organización de los archivos del shader + +### shaders/common + +Con el propósito de evitar el código duplicado, los diversos shaders que se emplean en las distintas dimensiones de Minecraft hacen referencia a los archivos que se encuentran en este directorio. Es aquí donde se encuentran las rutinas principales, para cada uno de los diferentes tipos de bloques, así como el resto de pasos en la tubería de trabajo de Optifine/Iris. + +Los shaders de vertice y fragmento de cada paso se encuentran separados en archivos separados, que podrás identificar claramente por el nombre del archivo en cuestión. + +No necesariamente existe aquí un archivo para cada paso o tipo de bloque, pues algunos bloques o pasos comparten muchas cosas en común, y en MakeUp son tratados igual (o casi igual). + +Los mejores ejemplos de esto último son solid_blocks_fragment.glsl y solid_blocks_vertex.glsl, que controlan el dibujado de la gran mayoría de los bloques del juego que no sean translúcidos o merezcan una atención muy especial. + +El nombre de los archivos intenta ser explícito sobre su contenido o propósito. + +### shaders/lang + +Los archivos de traducción. Le dan nombre a las opciones en las pantallas de configuración. + +### shaders/lib + +Aquí se encuentran archivos con rutinas o declaraciones específicas que son empleadas en diversos lugares de las rutinas principales. + +Los archivos que se encuentran en este directorio son tomados como "bibliotecas", y son llamados FUERA de la función principal del shader que los solicita (es decir, que no se insertan dentro de la función main del shader en cuestión). Usualmente porque declaran funciones o valores empleados por quien los solicita. + +El nombre de los archivos intenta ser explícito sobre su contenido o propósito. + +### shaders/src + +Los archivos aquí cumplen un papel similar a los que se encuentran en shaders/lib. La diferencia radica en la forma en que son insertados en el código del shader que los solicita. + +En este caso, el código está pensado para ser insertado DENTRO de la función main del shader en cuestión. Son simples retazos de código que, al ser empleados varias veces, sólo están escritos una vez aquí, y son incluidos de forma "sucia" en el código, sin ser funciones estrictamente hablando. + +### shaders/textures + +Como su nombre lo indica, aquí se almacenan las texturas de las que hace uso el shader. + +### shaders/worldX + +Las ya conocidas carpetas que alojan a los shaders que corresponden a cada dimensión: + +- world0: Overworld +- world-1: Nether +- world1: The End + +Los shaders que se emplean para cualquier otra dimensión no especificada son descendientes directos del directorio "shaders". + +----- + +# Flujo de dibujado principal + +## Buffers + +Los buffers son utilizados y asignados de la siguiente manera: + +- noisetex: Almacena las normales del agua en dos canales, el tercer componente es calculado al momento. (RG8) +- colortex0: Ruido azul (no cargado). (R8) +- colortex1: Buffer principal. Cuando está actvo el DOF, es de cuatro canales, donde el cuarto canal almacena la profundidad de la escena para ser también suavizada por el antialias, y así evitar problemas en cambios de enfoque súbitos por la sacudida de la cámara. (Sin DOF: R11F_G11F_B10F, con DOF: RGBA16) +- colortex2: Sin usar. (R8) +- colortex3: Aquí se almacena el historial empleado por el muestreo temporal. Cuando está actvo el DOF, es de cuatro canales, donde el cuarto canal almacena la profundidad de la escena para ser también suavizada por el antialias, y así evitar problemas en cambios de enfoque súbitos por la sacudida de la cámara. (Sin DOF: R11F_G11F_B10F, con DOF: RGBA16) +- gaux1: Aquí se almacena una versión de la escena que será empleada en los reflejos y refracciones de espacio de pantalla. Después de ser empleado para ello, se utiliza como auxiliar para almacenar el bloom de la escena. (R11F_G11F_B10F) +- gaux2: Almacena el mapa para las nubes. (R8) +- gaux3: Almacena el valor histórico de autoexposición de la escena. El valor de autoexposición se obtiene haciendo un promedio ponderado con el valor de este canal y el calculado en la escena actual, a fin de hacer una transición de autoexposición gradual en el tiempo. Sí, es un exceso usar un buffer entero para guardar un único valor flotante, pero es lo que hay. Sólo es usado si se usa el método de autoexposición predeterminado. (R16F) +- gaux4: Almacena el color del cielo (sin nubes ni otros objetos), para otorgar el color que deberá emplearse en la niebla (sí, la niebla siempre es del color del "cielo"). De esta forma, los objetos se difuminan y confunden con el cielo a la distancia. + +----- + +# Pasos generales de dibujado + +Esta es sólo una descripción general de los pasos que sigue el dibujado de una escena típica. No tiene todos los detalles, y puede varíar según la dimensión y opciones activadas. + +1. Se calcula el color del cielo o distancia infinita en 'prepare'. Este color escribe en dos lugares: + - colortex1: Se empleará después para escribir ahí los bloques sólidos. + - gaux4: Este buffer se empleará para extraer de ella el color de la niebla. + +2. En gbuffers_skybasic se dibujan elementos como las estrellas sobre el cielo previamente dibujado. Posteriormente se dibujan los elementos del cielo texturizados (gbuffers_skytextured). Todo esto se escribe en colortex1. + +3. Los bloques sólidos se crean en los correspondientes programas gbuffer. Aquí se calcula la iluminación de los bloques (sombras incluídas). +El resultado se escribirá en: + - colortex1 + +4. En deferred, se calcularán las nubes y la oclusión ambiental. Los resultados se escribirán en: + - colortex1: Se escribe la escena calculada, el canal "a" almacenará la profundidad (sólo si tiene sentido). + - gaux1: Se empleará posteriormente como fuente de datos para el calculo de los reflejos y refracciones de espacio de pantalla en el paso siguiente. + +5. Se dibujan los bloques translúcidos. Se calculan de nuevo las nubes en baja calidad para ser empleadas en los reflejos. Se lee gaux1 como fuente para las refracciones y reflejos de pantalla. Se sigue empleando el canal alpha para almacenar la profundidad. Los resultados se escriben en: + - colortex1 + +6. En Composite se calcula el nivel de autoexposure del cuadro actual, y se pondera con el valor histórico guardado en gaux3. Se calcula también la luz volumétrica, y se prepara el bloom. El auto exposure no toma en cuenta ninguno de estos últimos efectos ni los posteriores. +"Preparar el bloom", significa guardar una versión de la escena actual con el nivel de exposición aplicado, en: gaux1. +Se guarda también el valor calculado de la autoexposición en: gaux3. + +7. En Composite1 se calcula el DOF, y se aplica el Bloom. Para aplicar el Bloom se lee un nivel de mipmap del buffer gaux3 calculado en el paso anterior. El resutado se escribe en: colortex1 + +8. En Composite2 se calcula el AA y el motion blur. El resultado se escribe en: colortex0. Si el supermuestreo temporal está activo, se escribe el histórico en colortex3. + +9. En Final, se aplican efectos de postprocesado, como aberración cromática, la autoexposición, el mapa de tonos, y ayudas para ceguera al color. +Para terminar, la imagen es enviada a la pantalla. + +----- + +Revisa el resto de directorios o el código fuente para encontrar información alusiva a ese elemento. diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/README.md b/shaderpacks/MakeUp-UltraFast-9.1c/README.md new file mode 100644 index 0000000..681d569 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/README.md @@ -0,0 +1,34 @@ +# MakeUp - Code +High performance Minecraft shader (Java). + +## Version: 9.1c + +### This version works in Optifine and Iris 1.5.1 or higher. + +## Main features +* Optional shadows +* Optional volumetric clouds +* Antialiasing (TAA) +* Depth of field +* Enhanced ambient occlusion +* Water reflection and refraction +* Motion blur +* Optional bloom +* Optional chromatic aberration +* Auto-exposure +* Shader for all native dimensions +* And more... +* FAST! + +## Tested on: +* Minecraft 1.12.+ - 1.21.x +* Nvidia and Intel +* Windows and Linux + +## You can: +* You can use the shader without restrictions. +* You can fork the shader from: [https://github.com/javiergcim/MakeUpUltraFast](https://github.com/javiergcim/MakeUpUltraFast) +* You can modify this shader for any purpose. +* If you modify or use the shader please add a credit, and the official URLs if possible: [https://modrinth.com/shader/makeup-ultra-fast-shaders](https://modrinth.com/shader/makeup-ultra-fast-shaders), [https://www.planetminecraft.com/mod/makeup-ultra-fast-shader/](https://www.planetminecraft.com/mod/makeup-ultra-fast-shader/), [https://www.curseforge.com/minecraft/customization/makeup-ultra-fast-shader](https://www.curseforge.com/minecraft/customization/makeup-ultra-fast-shader) and/or [https://github.com/javiergcim/MakeUpUltraFast](https://github.com/javiergcim/MakeUpUltraFast) + +Notification is not required, but would be appreciated. diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/helpful.txt b/shaderpacks/MakeUp-UltraFast-9.1c/helpful.txt new file mode 100644 index 0000000..00a1c91 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/helpful.txt @@ -0,0 +1,30 @@ +Teleport to Nether: +/execute in minecraft:the_nether run teleport ~ ~ ~ + +Teleport to The End: +/execute in minecraft:the_end run teleport ~ ~ ~ + +Teleport to Overworld: +/execute in minecraft:overworld run teleport ~ ~ ~ + +Stop time: +/gamerule doDaylightCycle false + +Blindness: +/effect give @p blindness 99999 + +Remove effects: +/effect clear @p + +Lightning bolt: +/summon lightning_bolt [pos] + +Moon phase: +/time set 18000 - Full Moon +/time set 44000 - Waning Gibbous +/time set 68000 - Last Quarter +/time set 92000 - Waning Crescent +/time set 116000 - New Moon +/time set 140000 - Waxing Crescent +/time set 164000 - First Quarter +/time set 188000 - Waxing Gibbous \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/block.properties b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/block.properties new file mode 100644 index 0000000..26138f9 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/block.properties @@ -0,0 +1,78 @@ +# MakeUp - block.properties + +#if MC_VERSION >= 11300 + + # GRASS LIKE ENTITIES + block.10031 = minecraft:cherry_sapling minecraft:torchflower minecraft:short_grass minecraft:grass minecraft:fern minecraft:seagrass biomesoplenty:dune_grass biomesoplenty:dead_grass biomesoplenty:desert_grass biomesoplenty:sprout biomesoplenty:bush environmental:mycelium_sprouts upgrade_aquatic:blue_pickerelweed upgrade_aquatic:purple_pickerelweed byg:beach_grass byg:clover_patch byg:flower_patch byg:horseweed byg:leaf_pile byg:prairie_grass byg:reeds byg:short_beach_grass byg:short_grass byg:tall_prairie_grass byg:weed_grass byg:wilted_grass byg:winter_grass ecotones:clover ecotones:reeds ecotones:sandy_grass ecotones:short_grass terrestria:cattail terrestria:dead_grass terrestria:sakura_leaf_pile terrestria:tall_cattail wildworld:acacia_leaf_pile wildworld:birch_leaf_pile wildworld:dark_oak_leaf_pile wildworld:jungle_leaf_pile wildworld:oak_leaf_pile wildworld:spruce_leaf_pile biomesoplenty:bush minecraft:nether_sprouts minecraft:warped_roots minecraft:crimson_roots projectvibrantjourneys:beach_grass projectvibrantjourneys:short_grass minecraft:oak_sapling minecraft:spruce_sapling minecraft:birch_sapling minecraft:jungle_sapling minecraft:acacia_sapling minecraft:dark_oak_sapling minecraft:dead_bush minecraft:dandelion minecraft:poppy minecraft:blue_orchid minecraft:allium minecraft:azure_bluet minecraft:red_tulip minecraft:orange_tulip minecraft:white_tulip minecraft:pink_tulip minecraft:oxeye_daisy minecraft:cornflower minecraft:lily_of_the_valley minecraft:wither_rose minecraft:sweet_berry_bush biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom atmospheric:rosewood_sapling atmospheric:morado_sapling atmospheric:yucca_sapling atmospheric:kousa_sapling atmospheric:aspen_sapling atmospheric:grimwood_sapling atmospheric:warm_monkey_brush atmospheric:hot_monkey_brush atmospheric:scalding_monkey_brush atmospheric:yucca_flower atmospheric:gilia autumnity:red_maple_sapling autumnity:orange_maple_sapling autumnity:yellow_maple_sapling autumnity:maple_sapling autumnity:autumn_crocus earthmobsmod:buttercup environmental:willow_sapling environmental:cherry_sapling environmental:pink_wisteria_sapling environmental:blue_wisteria_sapling environmental:purple_wisteria_sapling environmental:white_wisteria_sapling farmersdelight:wild_cabbages farmersdelight:wild_onions farmersdelight:wild_tomatoes farmersdelight:wild_carrots farmersdelight:wild_potatoes farmersdelight:wild_beetroots neapolitan:small_banana_frond neapolitan:banana_frond neapolitan:large_banana_frond upgrade_aquatic:river_sapling upgrade_aquatic:beachgrass upgrade_aquatic:white_searocket upgrade_aquatic:pink_searocket environmental:cattail environmental:cartwheel environmental:bluebell environmental:violet environmental:dianthus environmental:red_lotus_flower environmental:white_lotus_flower environmental:yellow_hibiscus environmental:orange_hibiscus environmental:red_hibiscus environmental:pink_hibiscus environmental:magenta_hibiscus environmental:purple_hibiscus buzzier_bees:buttercup buzzier_bees:white_clover buzzier_bees:pink_clover neapolitan:strawberry_pips biomesoplenty:origin_sapling biomesoplenty:flowering_oak_sapling biomesoplenty:rainbow_birch_sapling biomesoplenty:yellow_autumn_sapling biomesoplenty:orange_autumn_sapling biomesoplenty:maple_sapling biomesoplenty:fir_sapling biomesoplenty:redwood_sapling biomesoplenty:white_cherry_sapling biomesoplenty:pink_cherry_sapling biomesoplenty:mahogany_sapling biomesoplenty:jacaranda_sapling biomesoplenty:palm_sapling biomesoplenty:willow_sapling biomesoplenty:dead_sapling biomesoplenty:magic_sapling biomesoplenty:umbran_sapling biomesoplenty:hellbark_sapling astralsorcery:glow_flower botania:white_mystical_flower botania:gray_mystical_flower botania:orange_mystical_flower botania:magenta_mystical_flower botania:light_blue_mystical_flower botania:light_gray_mystical_flower botania:yellow_mystical_flower botania:lime_mystical_flower botania:pink_mystical_flower botania:cyan_mystical_flower botania:purple_mystical_flower botania:blue_mystical_flower botania:brown_mystical_flower botania:green_mystical_flower botania:red_mystical_flower botania:black_mystical_flower botania:white_mushroom botania:orange_mushroom botania:magenta_mushroom botania:light_blue_mushroom botania:yellow_mushroom botania:lime_mushroom botania:pink_mushroom botania:gray_mushroom botania:light_gray_mushroom botania:cyan_mushroom botania:purple_mushroom botania:blue_mushroom botania:brown_mushroom botania:green_mushroom botania:red_mushroom botania:black_mushroom botania:hydroangeas botania:manastar botania:pure_daisy botania:endoflame botania:thermalily botania:rosa_arcana botania:munchdew botania:entropinnyum botania:kekimurus botania:gourmaryllis botania:narslimmus botania:spectrolus botania:dandelifeon botania:rafflowsia botania:shulk_me_not botania:bellethorn botania:bellethorn_chibi botania:bergamute botania:dreadthorn botania:heisei_dream botania:tigerseye botania:jaded_amaranthus botania:orechid botania:fallen_kanade botania:exoflame botania:agricarnation botania:agricarnation_chibi botania:hopperhock botania:hopperhock_chibi botania:tangleberrie botania:jiyuulia botania:rannuncarpus botania:rannuncarpus_chibi botania:hyacidus botania:pollidisiac botania:clayconia botania:clayconia_chibi botania:loonium botania:daffomill botania:vinculotus botania:spectranthemum botania:medumone botania:marimorphosis botania:marimorphosis_chibi botania:bubbell botania:bubbell_chibi botania:solegnolia botania:solegnolia_chibi botania:orechid_ignem terrestria:tiny_cactus pamhc2trees:apple_sapling pamhc2trees:avocado_sapling pamhc2trees:candlenut_sapling pamhc2trees:cherry_sapling pamhc2trees:chestnut_sapling pamhc2trees:gooseberry_sapling pamhc2trees:lemon_sapling pamhc2trees:nutmeg_sapling pamhc2trees:orange_sapling pamhc2trees:peach_sapling pamhc2trees:pear_sapling pamhc2trees:plum_sapling pamhc2trees:walnut_sapling pamhc2trees:spiderweb_sapling pamhc2trees:hazelnut_sapling pamhc2trees:pawpaw_sapling pamhc2trees:soursop_sapling pamhc2trees:almond_sapling pamhc2trees:apricot_sapling pamhc2trees:banana_sapling pamhc2trees:cashew_sapling pamhc2trees:cinnamon_sapling pamhc2trees:coconut_sapling pamhc2trees:date_sapling pamhc2trees:dragonfruit_sapling pamhc2trees:durian_sapling pamhc2trees:fig_sapling pamhc2trees:grapefruit_sapling pamhc2trees:lime_sapling pamhc2trees:mango_sapling pamhc2trees:olive_sapling pamhc2trees:papaya_sapling pamhc2trees:paperbark_sapling pamhc2trees:pecan_sapling pamhc2trees:peppercorn_sapling pamhc2trees:persimmon_sapling pamhc2trees:pistachio_sapling pamhc2trees:pomegranate_sapling pamhc2trees:starfruit_sapling pamhc2trees:vanillabean_sapling pamhc2trees:breadfruit_sapling pamhc2trees:guava_sapling pamhc2trees:jackfruit_sapling pamhc2trees:lychee_sapling pamhc2trees:passionfruit_sapling pamhc2trees:rambutan_sapling pamhc2trees:tamarind_sapling pamhc2trees:maple_sapling pamhc2trees:pinenut_sapling byg:purple_bulbis_anomaly byg:blue_bulbis_anomaly byg:embur_wart byg:cryptic_bramble biomesoplenty:glowshroom biomesoplenty:toadstool biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom biomesoplenty:mangrove_root biomesoplenty:reed biomesoplenty:sprout biomesoplenty:bush pamhc2crops:aridgarden pamhc2crops:frostgarden pamhc2crops:shadedgarden pamhc2crops:soggygarden pamhc2crops:tropicalgarden pamhc2crops:windygarden pamhc2crops:pamamaranthcrop pamhc2crops:pambarleycrop pamhc2crops:pambeancrop pamhc2crops:pamchickpeacrop pamhc2crops:pamcorncrop pamhc2crops:pamlentilcrop pamhc2crops:pammilletcrop pamhc2crops:pamoatcrop pamhc2crops:pamquinoacrop pamhc2crops:pamricecrop pamhc2crops:pamryecrop pamhc2crops:pamsoybeancrops pamhc2crops:pamcottoncrop pamhc2crops:pamflaxcrop pamhc2crops:pamkenafcrop pamhc2crops:pamjutecrop pamhc2crops:pamsisalcrop pamhc2crops:pamartichokecrop pamhc2crops:pamasparaguscrop pamhc2crops:pambellpeppercrop pamhc2crops:pambroccolicrop pamhc2crops:pambrusselsproutcrop pamhc2crops:pamcabbagecrop pamhc2crops:pamcauliflowercrop pamhc2crops:pamcelerycrop pamhc2crops:pamchilipeppercrop pamhc2crops:pamcucumbercrop pamhc2crops:pameggplantcrop pamhc2crops:pamkalecrops pamhc2crops:pamlettucecrop pamhc2crops:pamokracrop pamhc2crops:pampeascrop pamhc2crops:pamspinachcrop pamhc2crops:pamtomatillocrop pamhc2crops:pamtomatocrop pamhc2crops:pamwintersquashcrop pamhc2crops:pamzucchinicrop pamhc2crops:pamarrowrootcrop pamhc2crops:pamcassavacrop pamhc2crops:pamgarliccrop pamhc2crops:pamjicamacrop pamhc2crops:pamleekcrop pamhc2crops:pamkohlrabicrop pamhc2crops:pamonioncrop pamhc2crops:pamparsnipcrop pamhc2crops:pampeanutcrop pamhc2crops:pamradishcrop pamhc2crops:pamrhubarbcrop pamhc2crops:pamrutabagacrop pamhc2crops:pamscallioncrop pamhc2crops:pamsweetpotatocrop pamhc2crops:pamtarocrop pamhc2crops:pamturnipcrop pamhc2crops:pamwaterchestnutcrop pamhc2crops:pamblackberrycrop pamhc2crops:pamblueberrycrop pamhc2crops:pamcactusfruitcrop pamhc2crops:pamcandleberrycrop pamhc2crops:pamcantaloupecrop pamhc2crops:pamcranberrycrop pamhc2crops:pamelderberrycrop pamhc2crops:pamgrapecrop pamhc2crops:pamgreengrapecrop pamhc2crops:pamhuckleberrycrop pamhc2crops:pamjuniperberrycrop pamhc2crops:pamkiwicrop pamhc2crops:pammullberrycrop pamhc2crops:pampineapplecrop pamhc2crops:pamraspberrycrop pamhc2crops:pamstrawberrycrop pamhc2crops:pamcoffeebeancrop pamhc2crops:pamtealeafcrop pamhc2crops:pamagavecrop pamhc2crops:pamwhitemushroomcrop pamhc2crops:pamgingercrop pamhc2crops:pamsesamecrop pamhc2crops:pamspiceleafcrop pamhc2crops:pammustardcrop byg:lament_sprouts byg:synthian_fungus byg:blue_glowcane byg:pink_glowcane byg:purple_glowcane byg:red_glowcane byg:warped_bush byg:blue_glowshroom byg:purple_glowshroom byg:scorched_bush byg:soul_shroom byg:soul_shroom_spore_end byg:death_cap byg:weeping_roots byg:nether_bristle byg:synthian_sprout byg:synthian_roots byg:hanging_synthian_roots byg:embur_sprouts byg:embur_roots byg:ivis_roots byg:ivis_sprout byg:bulbis_sprouts byg:ether_bush byg:thereal_bellflower byg:nightshade_sprouts byg:nightshade_roots byg:oddity_bush byg:shulkren_fungus byg:vermillion_sculk_tendrils byg:vermillion_sculk_growth byg:green_mushroom byg:weeping_milkcap byg:wood_blewit byg:black_puff byg:crimson_berry_bush byg:blueberry_bush byg:nightshade_berry_bush byg:winter_succulent byg:allium_flower_bush byg:alpine_bellflower byg:amaranth byg:angelica byg:begonia byg:bistort byg:black_rose byg:blue_sage byg:california_poppy byg:crocus byg:cyan_amaranth byg:cyan_rose byg:cyan_tulip byg:daffodil byg:fairy_slipper byg:firecracker_flower_bush byg:green_tulip byg:guzmania byg:incan_lily byg:iris byg:kovan_flower byg:lazarus_bellflower byg:lolipop_flower byg:magenta_amaranth byg:magenta_tulip byg:orange_amaranth byg:orange_daisy byg:osiria_rose byg:peach_leather_flower byg:pink_allium byg:pink_allium_flower_bush byg:pink_anemone byg:pink_daffodil byg:pink_orchid byg:protea_flower byg:purple_amaranth byg:purple_orchid byg:purple_sage byg:purple_tulip byg:red_cornflower byg:red_orchid byg:richea byg:rose byg:snowdrops byg:silver_vase_flower byg:torch_ginger byg:violet_leather_flower byg:white_anemone byg:white_sage byg:white_cyclamen byg:winter_rose byg:winter_scilla byg:yellow_daffodil byg:yellow_tulip byg:horseweed byg:winter_cyclamen cutecore:cherry_leaf_litter cutecore:cherry_wood_sapling cutecore:wisteria_sapling cutecore:wisteria_leaf_litter cutecore:lemon_leaf_litter cutecore:lemon_sapling cutecore:hyacinth cutecore:lotus_flower cutecore:violets cutecore:pink_rose cutecore:white_rose cutecore:rose cutecore:forget_me_nots cutecore:pink_carnation cutecore:red_carnation cutecore:white_carnation forbidden_arcanus:yellow_orchid forbidden_arcanus:golden_orchid immersiveengineering:hemp:growth=bottom0 immersiveengineering:hemp:growth=bottom1 immersiveengineering:hemp:growth=bottom2 immersiveengineering:hemp:growth=bottom3 simplefarming:apple_sapling simplefarming:apricot_sapling simplefarming:banana_sapling simplefarming:cherry_sapling simplefarming:mango_sapling simplefarming:olive_sapling simplefarming:orange_sapling simplefarming:pear_sapling simplefarming:plum_sapling simplefarming:barley_crop simplefarming:cassava_crop simplefarming:corn_crop simplefarming:cotton_crop simplefarming:cross_crop simplefarming:cucumber_crop simplefarming:cumin_plant simplefarming:eggplant_crop simplefarming:ginger_crop simplefarming:honeydew_crop simplefarming:kenaf_crop simplefarming:lettuce_crop simplefarming:oat_crop simplefarming:onion_crop simplefarming:pea_crop simplefarming:peanut_crop simplefarming:pepper_crop simplefarming:quinoa_plant simplefarming:radish_crop simplefarming:rice_crop simplefarming:rye_crop simplefarming:scrop simplefarming:hcrop simplefarming:marshmallow_crop simplefarming:sunflower_plant simplefarming:sorghum_crop simplefarming:soybean_crop simplefarming:spinach_crop simplefarming:sweet_potato_crop simplefarming:tomato_crop simplefarming:turnip_crop simplefarming:wild_crop simplefarming:yam_crop simplefarming:zucchini_crop byg:aspen_sapling byg:baobab_sapling byg:blue_enchanted_sapling byg:green_enchanted_sapling byg:pink_cherry_sapling byg:white_cherry_sapling byg:cika_sapling byg:cypress_sapling byg:ebony_sapling byg:ether_sapling byg:fir_sapling byg:aspen_sapling byg:holly_berry_sapling byg:holly_sapling byg:jacaranda_sapling byg:flowering_jacaranda_sapling byg:indigo_jacaranda_sapling byg:indigo_flowering_jacaranda_sapling byg:lament_sapling byg:mahogany_sapling byg:mangrove_sapling byg:maple_sapling byg:red_maple_sapling byg:silver_maple_sapling byg:nightshade_sapling byg:flowering_nightshade_sapling byg:palm_sapling byg:palo_verde_sapling byg:flowering_palo_verde_sapling byg:pine_sapling byg:rainbow_eucalyptus_sapling byg:redwood_sapling byg:pine_sapling byg:skyris_sapling byg:green_apple_skyris_sapling byg:willow_sapling byg:witch_hazel_sapling byg:blooming_witch_hazel_sapling byg:zelkova_sapling byg:withering_oak_sapling byg:araucaria_sapling byg:blue_spruce_sapling byg:brown_birch_sapling byg:brown_oak_sapling byg:zelkova_sapling byg:brown_zelkova_sapling byg:joshua_sapling byg:ripe_joshua_sapling byg:orange_birch_sapling byg:orange_oak_sapling byg:orange_spruce_sapling byg:orchard_sapling byg:flowering_orchard_sapling byg:ripe_orchard_sapling byg:red_birch_sapling byg:red_oak_sapling byg:red_spruce_sapling byg:yellow_birch_sapling byg:yellow_spruce_sapling byg:green_mushroom occultism:otherworld_sapling_natural occultism:otherworld_sapling integrateddynamics:menril_sapling projectvibrantjourneys:glowcap projectvibrantjourneys:crimson_nettle projectvibrantjourneys:warped_nettle twilightforest:mayapple deeperdarker:echo_sapling create_dd:rubber_sapling vegandelight:wild_soybean + + # CROPS LIKE ENTITIES + block.10059 = minecraft:wheat minecraft:carrots minecraft:potatoes minecraft:beetroots farmersdelight:cabbages farmersdelight:budding_tomatoes farmersdelight:onions vegandelight:soybean_crop + + # LOWER-HALF ENTITIES + block.10175 = minecraft:pitcher_plant:half=lower minecraft:sunflower:half=lower minecraft:lilac:half=lower minecraft:tall_grass:half=lower minecraft:large_fern:half=lower minecraft:rose_bush:half=lower minecraft:peony:half=lower minecraft:tall_seagrass:half=lower atmospheric:water_hyacinth:half=lower atmospheric:tall_yucca_flower:half=lower environmental:tall_cattail:half=lower environmental:pink_delphinium:half=lower environmental:blue_delphinium:half=lower environmental:purple_delphinium:half=lower environmental:white_delphinium:half=lower environmental:bird_of_paradise:half=lower environmental:giant_tall_grass:half=lower farmersdelight:wild_rice:half=lower upgrade_aquatic:flowering_rush:half=lower upgrade_aquatic:tall_beachgrass:half=lower upgrade_aquatic:tall_blue_pickerelweed:half=lower upgrade_aquatic:tall_purple_pickerelweed:half=lower biomesoplenty:barley:half=lower biomesoplenty:goldenrod:half=lower biomesoplenty:blue_hydrangea:half=lower biomesoplenty:watergrass:half=lower botania:white_double_flower:half=lower botania:orange_double_flower:half=lower botania:magenta_double_flower:half=lower botania:light_blue_double_flower:half=lower botania:yellow_double_flower:half=lower botania:lime_double_flower:half=lower botania:pink_double_flower:half=lower botania:gray_double_flower:half=lower botania:light_gray_double_flower:half=lower botania:cyan_double_flower:half=lower botania:purple_double_flower:half=lower botania:blue_double_flower:half=lower botania:brown_double_flower:half=upper botania:green_double_flower:half=upper botania:red_double_flower:half=upper botania:black_double_flower:half=lower biomesoplenty:reed:half=lower biomesoplenty:cattail:half=lower byg:tall_crimson_roots:half=lower byg:tall_ether_grass:half=lower byg:reeds:half=lower byg:tall_prairie_grass:half=lower byg:tall_allium:half=lower byg:azalea:half=lower byg:tall_pink_allium:half=lower moreflowerbushes:purple_hibiscus:half=lower moreflowerbushes:mountain_laurel:half=lower moreflowerbushes:larkspur:half=lower moreflowerbushes:golden_shower:half=lower moreflowerbushes:fuchsia:half=lower moreflowerbushes:butterfly_weed:half=lower moreflowerbushes:blue_sage:half=lower moreflowerbushes:blue_hortensia:half=lower byg:japanese_orchid:half=lower byg:delphinium:half=lower byg:foxglove:half=lower cutecore:pink_rosebush:half=lower cutecore:white_rosebush:half=lower cutecore:pink_hydrangeas:half=lower cutecore:blue_hydrangeas:half=lower cutecore:purple_hydrangeas:half=lower farmersdelight:rice create_bic_bit:sunflowerstem:half=lower + + # UPPER-HALF ENTITIES + block.10176 = minecraft:pitcher_plant:half=upper minecraft:sunflower:half=upper minecraft:lilac:half=upper minecraft:tall_grass:half=upper minecraft:large_fern:half=upper minecraft:rose_bush:half=upper minecraft:peony:half=upper minecraft:tall_seagrass:half=upper atmospheric:water_hyacinth:half=upper atmospheric:tall_yucca_flower:half=upper environmental:tall_cattail:half=upper environmental:pink_delphinium:half=upper environmental:blue_delphinium:half=upper environmental:purple_delphinium:half=upper environmental:white_delphinium:half=upper environmental:bird_of_paradise:half=upper environmental:giant_tall_grass:half=upper farmersdelight:wild_rice:half=upper upgrade_aquatic:flowering_rush:half=upper upgrade_aquatic:tall_beachgrass:half=upper upgrade_aquatic:tall_blue_pickerelweed:half=upper upgrade_aquatic:tall_purple_pickerelweed:half=upper biomesoplenty:barley:half=upper biomesoplenty:goldenrod:half=upper biomesoplenty:blue_hydrangea:half=upper biomesoplenty:watergrass:half=upper botania:white_double_flower:half=upper botania:orange_double_flower:half=upper botania:magenta_double_flower:half=upper botania:light_blue_double_flower:half=upper botania:yellow_double_flower:half=upper botania:lime_double_flower:half=upper botania:pink_double_flower:half=upper botania:gray_double_flower:half=upper botania:light_gray_double_flower:half=upper botania:cyan_double_flower:half=upper botania:purple_double_flower:half=upper botania:blue_double_flower:half=upper botania:brown_double_flower:half=upper botania:green_double_flower:half=upper botania:red_double_flower:half=upper botania:black_double_flower:half=upper biomesoplenty:reed:half=upper biomesoplenty:cattail:half=upper byg:tall_crimson_roots:half=upper byg:tall_ether_grass:half=upper byg:reeds:half=upper byg:tall_prairie_grass:half=upper byg:tall_allium:half=upper byg:azalea:half=upper byg:tall_pink_allium:half=upper moreflowerbushes:purple_hibiscus:half=upper moreflowerbushes:mountain_laurel:half=upper moreflowerbushes:larkspur:half=upper moreflowerbushes:golden_shower:half=upper moreflowerbushes:fuchsia:half=upper moreflowerbushes:butterfly_weed:half=upper moreflowerbushes:blue_sage:half=upper moreflowerbushes:blue_hortensia:half=upper byg:japanese_orchid:half=upper byg:delphinium:half=upper byg:foxglove:half=upper cutecore:pink_rosebush:half=upper cutecore:white_rosebush:half=upper cutecore:pink_hydrangeas:half=upper cutecore:blue_hydrangeas:half=upper cutecore:purple_hydrangeas:half=upper farmersdelight:rice_panicles create_bic_bit:sunflowerstem:half=upper + + # LEAVES + block.10018 = minecraft:cherry_leaves minecraft:oak_leaves minecraft:spruce_leaves minecraft:birch_leaves minecraft:jungle_leaves minecraft:acacia_leaves minecraft:dark_oak_leaves minecraft:pale_oak_leaves minecraft:azalea_leaves minecraft:azalea_leaves_flowers minecraft:flowering_azalea_leaves minecraft:mangrove_leaves biomesoplenty:origin_leaves biomesoplenty:flowering_oak_leaves biomesoplenty:rainbow_birch_leaves biomesoplenty:yellow_autumn_leaves biomesoplenty:orange_autumn_leaves biomesoplenty:maple_leaves biomesoplenty:fir_leaves biomesoplenty:redwood_leaves biomesoplenty:mahogany_leaves biomesoplenty:palm_leaves biomesoplenty:willow_leaves biomesoplenty:dead_leaves biomesoplenty:magic_leaves biomesoplenty:umbran_leaves biomesoplenty:hellbark_leaves biomesoplenty:pink_cherry_leaves biomesoplenty:white_cherry_leaves biomesoplenty:jacaranda_leaves quark:blue_blossom_leaves quark:lavender_blossom_leaves quark:orange_blossom_leaves quark:pink_blossom_leaves quark:yellow_blossom_leaves atmospheric:rosewood_leaves atmospheric:morado_leaves atmospheric:flowering_morado_leaves atmospheric:yucca_leaves atmospheric:kousa_leaves atmospheric:aspen_leaves atmospheric:grimwood_leaves autumnity:red_maple_leaves autumnity:orange_maple_leaves autumnity:yellow_maple_leaves autumnity:maple_leaves environmental:willow_leaves environmental:cherry_leaves environmental:pink_wisteria_leaves environmental:blue_wisteria_leaves environmental:purple_wisteria_leaves environmental:white_wisteria_leaves environmental:pink_hanging_wisteria_leaves environmental:blue_hanging_wisteria_leaves environmental:purple_hanging_wisteria_leaves environmental:white_hanging_wisteria_leaves environmental:hanging_willow_leaves upgrade_aquatic:river_leaves byg:aspen_leaves byg:araucaria_leaves byg:baobab_leaves byg:blooming_witch_hazel_leaves byg:blue_enchanted_leaves byg:blue_spruce_leaves byg:brown_birch_leaves byg:brown_oak_leaves byg:brown_zelkova_leaves byg:cika_leaves byg:cypress_leaves byg:ebony_leaves byg:fir_leaves byg:flowering_orchard_leaves byg:flowering_nightshade_leaves byg:flowering_palo_verde_leaves byg:green_apple_skyris_leaves byg:green_enchanted_leaves byg:holly_berry_leaves byg:holly_leaves byg:indigo_jacaranda_leaves byg:jacaranda_leaves byg:joshua_leaves byg:mahogany_leaves byg:mangrove_leaves byg:maple_leaves byg:orange_birch_leaves byg:orange_oak_leaves byg:orange_spruce_leaves byg:orchard_leaves byg:palo_verde_leaves byg:pine_leaves byg:pink_cherry_leaves byg:rainbow_eucalyptus_leaves byg:red_birch_leaves byg:red_maple_leaves byg:red_oak_leaves byg:red_spruce_leaves byg:redwood_leaves byg:ripe_joshua_leaves byg:ripe_orchard_leaves byg:silver_maple_leaves byg:skyris_leaves byg:white_cherry_leaves byg:willow_leaves byg:witch_hazel_leaves byg:yellow_birch_leaves byg:yellow_spruce_leaves byg:zelkova_leaves ecotones:hazel_leaves sakurarosea:alt_sakura_leaves sakurarosea:sakura_leaves sakurarosea:white_sakura_leaves terrestria:cypress_leaves terrestria:dark_japanese_maple_leaves terrestria:hemlock_leaves terrestria:japanese_maple_leaves terrestria:japanese_maple_shrub_leaves terrestria:jungle_palm_leaves terrestria:rainbow_eucalyptus_leaves terrestria:redwood_leaves terrestria:rubber_leaves terrestria:sakura_leaves terrestria:willow_leaves terrestria:yucca_palm_leaves traverse:brown_autumnal_leaves traverse:fir_leaves traverse:orange_autumnal_leaves traverse:red_autumnal_leaves traverse:yellow_autumnal_leaves vanillaenhanced:redwood_leaves wild_explorer:autumn_oak_leaves wild_explorer:autumn_birch_leaves wild_explorer:pink_cherry_oak_leaves wild_explorer:white_cherry_oak_leaves wild_explorer:palm_leaves cutecore:cherry_wood_leaves cutecore:cherry_wood_leaves_fruit cutecore:wisteria_leaves cutecore:lemon_leaves cutecore:lemon_leaves_fruiting dynamictrees:jungle_leaves dynamictrees:oak_leaves dynamictrees:spruce_leaves dynamictrees:dark_oak_leaves dynamictrees:acacia_leaves dynamictrees:birch_leaves simplefarming:apple_leaves simplefarming:apricot_leaves simplefarming:banana_leaves simplefarming:cherry_leaves simplefarming:mango_leaves simplefarming:olive_leaves simplefarming:orange_leaves simplefarming:pear_leaves simplefarming:plum_leaves mythicbotany:dreamwood_leaves undergarden:smogstem_leaves undergarden:wigglewood_leaves occultism:otherworld_leaves occultism:otherworld_leaves_natural integrateddynamics:menril_leaves extlights:xmas_leaves extlights:xmas_leaves_bulb extlights:xmas_leaves_bulb_red extlights:xmas_leaves_bulb_green extlights:xmas_leaves_bulb_blue extlights:xmas_leaves_bulb_blinking_redgreen extlights:xmas_leaves_bulb_blinking_redblue extlights:xmas_leaves_bulb_blinking_greenblue extlights:xmas_leaves_bulb_blinking_rgb extlights:xmas_leaves_bulb_smooth_redgreen extlights:xmas_leaves_bulb_smooth_redblue extlights:xmas_leaves_bulb_smooth_greenblue extlights:xmas_leaves_bulb_smooth_rgb techreborn:rubber_leaves blockus:legacy_leaves blockus:white_oak_leaves architects_palette:twisted_leaves twilightforest:twilight_oak_leaves twilightforest:canopy_leaves twilightforest:mangrove_leaves twilightforest:dark_leaves twilightforest:time_leaves twilightforest:transformation_leaves twilightforest:mining_leaves twilightforest:sorting_leaves twilightforest:giant_leaves twilightforest:thorn_leaves tfc:wood/leaves/acacia tfc:wood/leaves/ash tfc:wood/leaves/aspen tfc:wood/leaves/birch tfc:wood/leaves/blackwood tfc:wood/leaves/chestnut tfc:wood/leaves/douglas_fir tfc:wood/leaves/hickory tfc:wood/leaves/kapok tfc:wood/leaves/mangrove tfc:wood/leaves/maple tfc:wood/leaves/oak tfc:wood/leaves/palm tfc:wood/leaves/pine tfc:wood/leaves/rosewood tfc:wood/leaves/sequoia tfc:wood/leaves/spruce tfc:wood/leaves/sycamore tfc:wood/leaves/white_cedar tfc:wood/leaves/willow tfc:plant/cherry_leaves tfc:plant/green_apple_leaves tfc:plant/lemon_leaves tfc:plant/olive_leaves tfc:plant/orange_leaves tfc:plant/peach_leaves tfc:plant/plum_leaves tfc:plant/red_apple_leaves deeperdarker:echo_leaves create_dd:rubber_leaves + + # NO-WAVEABLE SMALL ELEMENTS + block.10032 = sugar_cane tube_coral brain_coral fire_coral bubble_coral horn_coral dead_tube_coral dead_brain_coral dead_fire_coral dead_bubble_coral dead_horn_coral tube_coral_fan brain_coral_fan fire_coral_fan bubble_coral_fan horn_coral_fan dead_tube_coral_fan dead_brain_coral_fan dead_fire_coral_fan dead_bubble_coral_fan dead_horn_coral_fan nether_wart tfc:plant/athyrium_fern tfc:plant/canna tfc:plant/goldenrod tfc:plant/pampas_grass tfc:plant/perovskia tfc:plant/rose tfc:plant/beachgrass tfc:plant/bluegrass tfc:plant/bromegrass tfc:plant/fountain_grass tfc:plant/manatee_grass tfc:plant/orchard_grass tfc:plant/ryegrass tfc:plant/scutch_grass tfc:plant/star_grass tfc:plant/timothy_grass tfc:plant/raddia_grass tfc:plant/allium tfc:plant/anthurium tfc:plant/arrowhead tfc:plant/badderlocks tfc:plant/barrel_cactus tfc:plant/blood_lily tfc:plant/blue_ginger tfc:plant/blue_orchid tfc:plant/bur_reed tfc:plant/butterfly_milkweed tfc:plant/black_orchid tfc:plant/calendula tfc:plant/cattail tfc:plant/cobblestone_lichen tfc:plant/coontail tfc:plant/cordgrass tfc:plant/dandelion tfc:plant/dead_bush tfc:plant/desert_flame tfc:plant/duckweed tfc:plant/eel_grass tfc:plant/field_horsetail tfc:plant/foxglove tfc:plant/grape_hyacinth tfc:plant/green_algae tfc:plant/gutweed tfc:plant/guzmania tfc:plant/heliconia tfc:plant/heather tfc:plant/hibiscus tfc:plant/houstonia tfc:plant/kangaroo_paw tfc:plant/king_fern tfc:plant/labrador_tea tfc:plant/lady_fern tfc:plant/laminaria tfc:plant/licorice_fern tfc:plant/artists_conk tfc:plant/lily_of_the_valley tfc:plant/lilac tfc:plant/lotus tfc:plant/maiden_pink tfc:plant/marigold tfc:plant/meads_milkweed tfc:plant/milfoil tfc:plant/morning_glory tfc:plant/philodendron tfc:plant/moss tfc:plant/nasturtium tfc:plant/ostrich_fern tfc:plant/oxeye_daisy tfc:plant/phragmite tfc:plant/pickerelweed tfc:plant/pistia tfc:plant/poppy tfc:plant/primrose tfc:plant/pulsatilla tfc:plant/red_algae tfc:plant/reindeer_lichen tfc:plant/red_sealing_wax_palm tfc:plant/sacred_datura tfc:plant/sagebrush tfc:plant/sago tfc:plant/saguaro_fruit tfc:plant/sapphire_tower tfc:plant/sargassum tfc:plant/sea_lavender tfc:plant/sea_palm tfc:plant/silver_spurflower tfc:plant/snapdragon_pink tfc:plant/snapdragon_red tfc:plant/snapdragon_white tfc:plant/snapdragon_yellow tfc:plant/strelitzia tfc:plant/switchgrass tfc:plant/sword_fern tfc:plant/tall_fescue_grass tfc:plant/toquilla_palm tfc:plant/trillium tfc:plant/tropical_milkweed tfc:plant/tulip_orange tfc:plant/tulip_pink tfc:plant/tulip_red tfc:plant/tulip_white tfc:plant/turtle_grass tfc:plant/vriesea tfc:plant/water_canna tfc:plant/white_water_lily tfc:plant/purple_water_lily tfc:plant/yellow_water_lily tfc:plant/water_taro tfc:plant/yucca tfc:plant/hanging_vines_plant tfc:plant/hanging_vines tfc:plant/spanish_moss_plant tfc:plant/spanish_moss tfc:plant/liana_plant tfc:plant/liana tfc:plant/tree_fern_plant tfc:plant/tree_fern tfc:plant/arundo_plant tfc:plant/arundo tfc:plant/dry_phragmite_plant tfc:plant/dry_phragmite tfc:plant/winged_kelp_plant tfc:plant/winged_kelp tfc:plant/leafy_kelp_plant tfc:plant/leafy_kelp tfc:plant/giant_kelp_plant tfc:plant/giant_kelp_flower tfc:plant/ivy tfc:plant/jungle_vines tfc:plant/saguaro_plant tfc:plant/saguaro tfc:plant/golden_bamboo tfc:plant/golden_bamboo_sapling tfc:wild_crop/barley tfc:wild_crop/oat tfc:wild_crop/rye tfc:wild_crop/maize tfc:wild_crop/wheat tfc:wild_crop/rice tfc:wild_crop/beet tfc:wild_crop/cabbage tfc:wild_crop/carrot tfc:wild_crop/garlic tfc:wild_crop/green_bean tfc:wild_crop/potato tfc:wild_crop/onion tfc:wild_crop/soybean tfc:wild_crop/squash tfc:wild_crop/sugarcane tfc:wild_crop/tomato tfc:wild_crop/jute tfc:wild_crop/papyrus tfc:wild_crop/pumpkin tfc:wild_crop/melon tfc:wild_crop/red_bell_pepper tfc:wild_crop/yellow_bell_pepper tfc:plant/snowberry_bush tfc:plant/bunchberry_bush tfc:plant/gooseberry_bush tfc:plant/cloudberry_bush tfc:plant/strawberry_bush tfc:plant/wintergreen_berry_bush tfc:plant/cranberry_bush + + # REFLECTIVE + block.10008 = minecraft:water minecraft:flowing_water subwild:water_puddle tfc:fluid/finite_fresh_water tfc:fluid/fresh_water tfc:fluid/finite_salt_water tfc:fluid/salt_water tfc:fluid/finite_river_water tfc:fluid/river_water tfc:fluid/spring_water tfc:fluid/finite_spring_water + block.10079 = ice slime_block white_stained_glass orange_stained_glass magenta_stained_glass light_blue_stained_glass yellow_stained_glass lime_stained_glass pink_stained_glass gray_stained_glass light_gray_stained_glass cyan_stained_glass purple_stained_glass blue_stained_glass brown_stained_glass green_stained_glass red_stained_glass black_stained_glass white_stained_glass_pane orange_stained_glass_pane magenta_stained_glass_pane light_blue_stained_glass_pane yellow_stained_glass_pane lime_stained_glass_pane pink_stained_glass_pane gray_stained_glass_pane light_gray_stained_glass_pane cyan_stained_glass_pane purple_stained_glass_pane blue_stained_glass_pane brown_stained_glass_pane green_stained_glass_pane red_stained_glass_pane black_stained_glass_pane tinted_glass deeperdarker:soundproof_glass naturalist:crimson_froglass naturalist:verdant_froglass naturalist:azure_froglass naturalist:crimson_froglass_pane naturalist:verdant_froglass_pane naturalist:azure_froglass_pane createframed:white_stained_framed_glass_door createframed:white_stained_framed_glass_trapdoor createframed:white_stained_tiled_glass createframed:white_stained_tiled_glass_pane createframed:white_stained_framed_glass createframed:white_stained_framed_glass_pane createframed:horizontal_white_stained_framed_glass createframed:horizontal_white_stained_framed_glass_pane createframed:vertical_white_stained_framed_glass createframed:vertical_white_stained_framed_glass_pane createframed:light_gray_stained_framed_glass_door createframed:light_gray_stained_framed_glass_trapdoor createframed:light_gray_stained_tiled_glass createframed:light_gray_stained_tiled_glass_pane createframed:light_gray_stained_framed_glass createframed:light_gray_stained_framed_glass_pane createframed:horizontal_light_gray_stained_framed_glass createframed:horizontal_light_gray_stained_framed_glass_pane createframed:vertical_light_gray_stained_framed_glass createframed:vertical_light_gray_stained_framed_glass_pane createframed:gray_stained_framed_glass_door createframed:gray_stained_framed_glass_trapdoor createframed:gray_stained_tiled_glass createframed:gray_stained_tiled_glass_pane createframed:gray_stained_framed_glass createframed:gray_stained_framed_glass_pane createframed:horizontal_gray_stained_framed_glass createframed:horizontal_gray_stained_framed_glass_pane createframed:vertical_gray_stained_framed_glass createframed:vertical_gray_stained_framed_glass_pane createframed:black_stained_framed_glass_door createframed:black_stained_framed_glass_trapdoor createframed:black_stained_tiled_glass createframed:black_stained_tiled_glass_pane createframed:black_stained_framed_glass createframed:black_stained_framed_glass_pane createframed:horizontal_black_stained_framed_glass createframed:horizontal_black_stained_framed_glass_pane createframed:vertical_black_stained_framed_glass createframed:vertical_black_stained_framed_glass_pane createframed:brown_stained_framed_glass_door createframed:brown_stained_framed_glass_trapdoor createframed:brown_stained_tiled_glass createframed:brown_stained_tiled_glass_pane createframed:brown_stained_framed_glass createframed:brown_stained_framed_glass_pane createframed:horizontal_brown_stained_framed_glass createframed:horizontal_brown_stained_framed_glass_pane createframed:vertical_brown_stained_framed_glass createframed:vertical_brown_stained_framed_glass_pane createframed:red_stained_framed_glass_door createframed:red_stained_framed_glass_trapdoor createframed:red_stained_tiled_glass createframed:red_stained_tiled_glass_pane createframed:red_stained_framed_glass createframed:red_stained_framed_glass_pane createframed:horizontal_red_stained_framed_glass createframed:horizontal_red_stained_framed_glass_pane createframed:vertical_red_stained_framed_glass createframed:vertical_red_stained_framed_glass_pane createframed:orange_stained_framed_glass_door createframed:orange_stained_framed_glass_trapdoor createframed:orange_stained_tiled_glass createframed:orange_stained_tiled_glass_pane createframed:orange_stained_framed_glass createframed:orange_stained_framed_glass_pane createframed:horizontal_orange_stained_framed_glass createframed:horizontal_orange_stained_framed_glass_pane createframed:vertical_orange_stained_framed_glass createframed:vertical_orange_stained_framed_glass_pane createframed:yellow_stained_framed_glass_door createframed:yellow_stained_framed_glass_trapdoor createframed:yellow_stained_tiled_glass createframed:yellow_stained_tiled_glass_pane createframed:yellow_stained_framed_glass createframed:yellow_stained_framed_glass_pane createframed:horizontal_yellow_stained_framed_glass createframed:horizontal_yellow_stained_framed_glass_pane createframed:vertical_yellow_stained_framed_glass createframed:vertical_yellow_stained_framed_glass_pane createframed:lime_stained_framed_glass_door createframed:lime_stained_framed_glass_trapdoor createframed:lime_stained_tiled_glass createframed:lime_stained_tiled_glass_pane createframed:lime_stained_framed_glass createframed:lime_stained_framed_glass_pane createframed:horizontal_lime_stained_framed_glass createframed:horizontal_lime_stained_framed_glass_pane createframed:vertical_lime_stained_framed_glass createframed:vertical_lime_stained_framed_glass_pane createframed:green_stained_framed_glass_door createframed:green_stained_framed_glass_trapdoor createframed:green_stained_tiled_glass createframed:green_stained_tiled_glass_pane createframed:green_stained_framed_glass createframed:green_stained_framed_glass_pane createframed:horizontal_green_stained_framed_glass createframed:horizontal_green_stained_framed_glass_pane createframed:vertical_green_stained_framed_glass createframed:vertical_green_stained_framed_glass_pane createframed:cyan_stained_framed_glass_door createframed:cyan_stained_framed_glass_trapdoor createframed:cyan_stained_tiled_glass createframed:cyan_stained_tiled_glass_pane createframed:cyan_stained_framed_glass createframed:cyan_stained_framed_glass_pane createframed:horizontal_cyan_stained_framed_glass createframed:horizontal_cyan_stained_framed_glass_pane createframed:vertical_cyan_stained_framed_glass createframed:vertical_cyan_stained_framed_glass_pane createframed:light_blue_stained_framed_glass_door createframed:light_blue_stained_framed_glass_trapdoor createframed:light_blue_stained_tiled_glass createframed:light_blue_stained_tiled_glass_pane createframed:light_blue_stained_framed_glass createframed:light_blue_stained_framed_glass_pane createframed:horizontal_light_blue_stained_framed_glass createframed:horizontal_light_blue_stained_framed_glass_pane createframed:vertical_light_blue_stained_framed_glass createframed:vertical_light_blue_stained_framed_glass_pane createframed:blue_stained_framed_glass_door createframed:blue_stained_framed_glass_trapdoor createframed:blue_stained_tiled_glass createframed:blue_stained_tiled_glass_pane createframed:blue_stained_framed_glass createframed:blue_stained_framed_glass_pane createframed:horizontal_blue_stained_framed_glass createframed:horizontal_blue_stained_framed_glass_pane createframed:vertical_blue_stained_framed_glass createframed:vertical_blue_stained_framed_glass_pane createframed:purple_stained_framed_glass_door createframed:purple_stained_framed_glass_trapdoor createframed:purple_stained_tiled_glass createframed:purple_stained_tiled_glass_pane createframed:purple_stained_framed_glass createframed:purple_stained_framed_glass_pane createframed:horizontal_purple_stained_framed_glass createframed:horizontal_purple_stained_framed_glass_pane createframed:vertical_purple_stained_framed_glass createframed:vertical_purple_stained_framed_glass_pane createframed:magenta_stained_framed_glass_door createframed:magenta_stained_framed_glass_trapdoor createframed:magenta_stained_tiled_glass createframed:magenta_stained_tiled_glass_pane createframed:magenta_stained_framed_glass createframed:magenta_stained_framed_glass_pane createframed:horizontal_magenta_stained_framed_glass createframed:horizontal_magenta_stained_framed_glass_pane createframed:vertical_magenta_stained_framed_glass createframed:vertical_magenta_stained_framed_glass_pane createframed:pink_stained_framed_glass_door createframed:pink_stained_framed_glass_trapdoor createframed:pink_stained_tiled_glass createframed:pink_stained_tiled_glass_pane createframed:pink_stained_framed_glass createframed:pink_stained_framed_glass_pane createframed:horizontal_pink_stained_framed_glass createframed:horizontal_pink_stained_framed_glass_pane createframed:vertical_pink_stained_framed_glass createframed:vertical_pink_stained_framed_glass_pane + + # EMMISIVE (LIKE GLOWSTONE) + block.10089 = ochre_froglight verdant_froglight pearlescent_froglight glowstone shroomlight torch wall_torch redstone_torch redstone_wall_torch jack_o_lantern redstone_lamp lantern sea_lantern soul_lantern soul_torch soul_wall_torch cataclysm:void_lantern_block deeperdarker:sculk_gleam + + # NEW EMMISIVE + block.10090 = magma_block end_root campfire:lit=true soul_campfire:lit=true beacon betterendforge:mossy_glowshroom_hymenophore betterendforge:mossy_glowshroom_fur betterendforge:blue_vine_lantern betterendforge:blue_vine_fur betterendforge::lumecorn:shape=light_top_middle betterendforge::lumecorn:shape=light_middle betterendforge::lumecorn:shape=light_bottom betterendforge::purple_polypore betterendforge::bulb_vine:shape=bottom + + # FAKE EMMISORS + block.10213 = soul_fire + + # METAL-LIKE + block.10400 = iron_block iron_trapdoor gold_block emerald_block lapis_block diamond_block copper_block exposed_copper weathered_copper oxidized_copper cut_copper exposed_cut_copper weathered_cut_copper oxidized_cut_copper cut_copper_stairs exposed_cut_copper_stairs weathered_cut_copper_stairs oxidized_cut_copper_stairs cut_copper_slab exposed_cut_copper_slab weathered_cut_copper_slab oxidized_cut_copper_slab waxed_cut_copper_slab waxed_weathered_cut_copper_slab waxed_weathered_copper waxed_exposed_copper waxed_copper_block waxed_oxidized_cut_copper_slab waxed_weathered_cut_copper_slab waxed_exposed_cut_copper_slab waxed_cuyt_copper_slab waxed_oxidized_copper waxed_cut_copper waxed_exposed_cut_copper waxed_weathered_cut_copper waxed_oxidized_cut_copper waxed_cut_copper_stairs waxed_exposed_cut_copper_stairs waxed_weathered_cut_copper_stairs waxed_oxidized_cut_copper_stairs heavy_weighted_pressure_plate light_weighted_pressure_plate iron_bars tfc:metal/anvil/bismuth tfc:metal/block/bismuth tfc:metal/bars/bismuth tfc:metal/trapdoor/bismuth tfc:metal/block/bismuth_stairs tfc:block/metal/block/bismuth_slab tfc:block/metal/block/bismuth_slab_top tfc:metal/anvil/bismuth_bronze tfc:metal/block/bismuth_bronze tfc:metal/bars/bismuth_bronze tfc:metal/trapdoor/bismuth_bronze tfc:metal/block/bismuth_bronze_stairs tfc:block/metal/block/bismuth_bronze_slab tfc:block/metal/block/bismuth_bronze_slab_top tfc:metal/anvil/black_bronze tfc:metal/block/black_bronze tfc:metal/bars/black_bronze tfc:metal/trapdoor/black_bronze tfc:metal/block/black_bronze_stairs tfc:block/metal/block/black_bronze_slab tfc:block/metal/block/black_bronze_slab_top tfc:metal/anvil/bronze tfc:metal/block/bronze tfc:metal/bars/bronze tfc:metal/trapdoor/bronze tfc:metal/block/bronze_stairs tfc:block/metal/block/bronze_slab tfc:block/metal/block/bronze_slab_top tfc:metal/anvil/brass tfc:metal/block/brass tfc:metal/bars/brass tfc:metal/trapdoor/brass tfc:metal/block/brass_stairs tfc:block/metal/block/brass_slab tfc:block/metal/block/brass_slab_top tfc:metal/anvil/copper tfc:metal/block/copper tfc:metal/bars/copper tfc:metal/trapdoor/copper tfc:metal/block/copper_stairs tfc:block/metal/block/copper_slab tfc:block/metal/block/copper_slab_top tfc:metal/anvil/gold tfc:metal/block/gold tfc:metal/bars/gold tfc:metal/trapdoor/gold tfc:metal/block/gold_stairs tfc:block/metal/block/gold_slab tfc:block/metal/block/gold_slab_top tfc:metal/anvil/nickel tfc:metal/block/nickel tfc:metal/bars/nickel tfc:metal/trapdoor/nickel tfc:metal/block/nickel_stairs tfc:block/metal/block/nickel_slab tfc:block/metal/block/nickel_slab_top tfc:metal/anvil/rose_gold tfc:metal/block/rose_gold tfc:metal/bars/rose_gold tfc:metal/trapdoor/rose_gold tfc:metal/block/rose_gold_stairs tfc:block/metal/block/rose_gold_slab tfc:block/metal/block/rose_gold_slab_top tfc:metal/anvil/silver tfc:metal/block/silver tfc:metal/bars/silver tfc:metal/trapdoor/silver tfc:metal/block/silver_stairs tfc:block/metal/block/silver_slab tfc:block/metal/block/silver_slab_top tfc:metal/anvil/tin tfc:metal/block/tin tfc:metal/bars/tin tfc:metal/trapdoor/tin tfc:metal/block/tin_stairs tfc:block/metal/block/tin_slab tfc:block/metal/block/tin_slab_top tfc:metal/anvil/zinc tfc:metal/block/zinc tfc:metal/bars/zinc tfc:metal/trapdoor/zinc tfc:metal/block/zinc_stairs tfc:block/metal/block/zinc_slab tfc:block/metal/block/zinc_slab_top tfc:metal/anvil/sterling_silver tfc:metal/block/sterling_silver tfc:metal/bars/sterling_silver tfc:metal/trapdoor/sterling_silver tfc:metal/block/sterling_silver_stairs tfc:block/metal/block/sterling_silver_slab tfc:block/metal/block/sterling_silver_slab_top tfc:metal/anvil/wrought_iron tfc:metal/block/wrought_iron tfc:metal/bars/wrought_iron tfc:metal/trapdoor/wrought_iron tfc:metal/block/wrought_iron_stairs tfc:block/metal/block/wrought_iron_slab tfc:block/metal/block/wrought_iron_slab_top tfc:metal/anvil/cast_iron tfc:metal/block/cast_iron tfc:metal/bars/cast_iron tfc:metal/trapdoor/cast_iron tfc:metal/block/cast_iron_stairs tfc:block/metal/block/cast_iron_slab tfc:block/metal/block/cast_iron_slab_top tfc:metal/anvil/pig_iron tfc:metal/block/pig_iron tfc:metal/bars/pig_iron tfc:metal/trapdoor/pig_iron tfc:metal/block/pig_iron_stairs tfc:block/metal/block/pig_iron_slab tfc:block/metal/block/pig_iron_slab_top tfc:metal/anvil/steel tfc:metal/block/steel tfc:metal/bars/steel tfc:metal/trapdoor/steel tfc:metal/block/steel_stairs tfc:block/metal/block/steel_slab tfc:block/metal/block/steel_slab_top tfc:metal/anvil/black_steel tfc:metal/block/black_steel tfc:metal/bars/black_steel tfc:metal/trapdoor/black_steel tfc:metal/block/black_steel_stairs tfc:block/metal/block/black_steel_slab tfc:block/metal/block/black_steel_slab_top tfc:metal/anvil/blue_steel tfc:metal/block/blue_steel tfc:metal/bars/blue_steel tfc:metal/trapdoor/blue_steel tfc:metal/block/blue_steel_stairs tfc:block/metal/block/blue_steel_slab tfc:block/metal/block/blue_steel_slab_top tfc:metal/anvil/red_steel tfc:metal/block/red_steel tfc:metal/bars/red_steel tfc:metal/trapdoor/red_steel tfc:metal/block/red_steel_stairs tfc:block/metal/block/red_steel_slab tfc:block/metal/block/red_steel_slab_top tfc:metal/anvil/weak_steel tfc:metal/block/weak_steel tfc:metal/bars/weak_steel tfc:metal/trapdoor/weak_steel tfc:metal/block/weak_steel_stairs tfc:block/metal/block/weak_steel_slab tfc:block/metal/block/weak_steel_slab_top tfc:metal/anvil/weak_blue_steel tfc:metal/block/weak_blue_steel tfc:metal/bars/weak_blue_steel tfc:metal/trapdoor/weak_blue_steel tfc:metal/block/weak_blue_steel_stairs tfc:block/metal/block/weak_blue_steel_slab tfc:block/metal/block/weak_blue_steel_slab_top tfc:metal/anvil/weak_red_steel tfc:metal/block/weak_red_steel tfc:metal/bars/weak_red_steel tfc:metal/trapdoor/weak_red_steel tfc:metal/block/weak_red_steel_stairs tfc:block/metal/block/weak_red_steel_slab tfc:block/metal/block/weak_red_steel_slab_top tfc:metal/anvil/high_carbon_steel tfc:metal/block/high_carbon_steel tfc:metal/bars/high_carbon_steel tfc:metal/trapdoor/high_carbon_steel tfc:metal/block/high_carbon_steel_stairs tfc:block/metal/block/high_carbon_steel_slab tfc:block/metal/block/high_carbon_steel_slab_top tfc:metal/anvil/high_carbon_black_steel tfc:metal/block/high_carbon_black_steel tfc:metal/bars/high_carbon_black_steel tfc:metal/trapdoor/high_carbon_black_steel tfc:metal/block/high_carbon_black_steel_stairs tfc:block/metal/block/high_carbon_black_steel_slab tfc:block/metal/block/high_carbon_black_steel_slab_top tfc:metal/anvil/high_carbon_blue_steel tfc:metal/block/high_carbon_blue_steel tfc:metal/bars/high_carbon_blue_steel tfc:metal/trapdoor/high_carbon_blue_steel tfc:metal/block/high_carbon_blue_steel_stairs tfc:block/metal/block/high_carbon_blue_steel_slab tfc:block/metal/block/high_carbon_blue_steel_slab_top tfc:metal/anvil/high_carbon_red_steel tfc:metal/block/high_carbon_red_steel tfc:metal/bars/high_carbon_red_steel tfc:metal/trapdoor/high_carbon_red_steel tfc:metal/block/high_carbon_red_steel_stairs tfc:block/metal/block/high_carbon_red_steel_slab tfc:block/metal/block/high_carbon_red_steel_slab_top tfc:metal/anvil/bismuth tfc:metal/block/bismuth tfc:metal/bars/bismuth tfc:metal/trapdoor/bismuth tfc:metal/block/bismuth_stairs tfc:block/metal/block/bismuth_slab tfc:block/metal/block/bismuth_slab_top create:copper_ladder create:brass_ladder create:copper_scaffolding create:brass_scaffolding create:brass_block create:copper_bars create:brass_bars create:smart_chute create:fluid_tank create:steam_whistle create:steam_engine create:spout create:hose_pulley create:item_drain create:train_casing create:smart_fluid_pipe create:fluid_pipe create:mechanical_pump create:copper_valve_handle create:fluid_valve create:mechanical_crafter create:sequenced_gearshift create:flywheel create:rotation_speed_controller create:mechanical_arm create:railway_casing create:controls create:brass_funnel create:brass_tunnel create:content_observer create:stockpile_switch create:redstone_link create:pulse_repeater create:pulse_extender create:peculiar_bell create_jetpack:jetpack create_enchantment_industry:printer create_enchantment_industry:disenchanter cataclysm:ancient_metal_block cataclysm:cursium_block cataclysm:enderite_block cataclysm:witherite_block cataclysm:ignitium_block cataclysm:mechanical_fusion_anvil cataclysm:emp cataclysm:black_steel_block create_dd:furnace_engine create_dd:bore_block create_dd:industrial_fan create_dd:hydraulic_press create_dd:item_stockpile create_dd:fluid_reservoir create_dd:dark_metal_block create_dd:dark_metal_plating create_dd:dark_metal_block_slab create_dd:dark_metal_block_stairs create_dd:dark_metal_bricks create_dd:dark_metal_brick_slab create_dd:dark_metal_brick_stairs create:zinc_block create:industrial_iron_block create:train_door create:chute create:item_vault create:haunted_bell minecraft:netherite_block create_jetpack:netherite_jetpack createutilities:void_steel_block createutilities:void_steel_scaffolding createutilities:void_casing createutilities:void_steel_bars createutilities:void_steel_ladder createutilities:void_motor createutilities:void_chest createutilities:void_tank createutilities:void_battery railways:smokestack_caboosestyle railways:smokestack_long railways:smokestack_coalburner railways:smokestack_oilburner railways:smokestack_streamlined railways:smokestack_woodburner railways:fuel_tank railways:portable_fuel_interface create_power_loader:empty_brass_chunk_loader create_power_loader:brass_chunk_loader create_connected:empty_fan_catalyst create_connected:fan_blasting_catalyst create_connected:fan_smoking_catalyst create_connected:fan_splashing_catalyst create_connected:fan_haunting_catalyst create_connected:sequenced_pulse_generator create_connected:item_silo create_things_and_misc:card_reader create_things_and_misc:card_press create_things_and_misc:sprinkler create_things_and_misc:brass_tiles create_things_and_misc:brass_tiles_slab create_things_and_misc:brass_tiles_stair create_things_and_misc:brass_bricks create_things_and_misc:brass_brick_slab create_things_and_misc:brass_brick_stairs vintageimprovements:vanadium_block createcasing:brass_shaft createcasing:creative_casing create_dd:stargaze_singularity_scaffolding create_dd:stargaze_singularity_block create_dd:stargaze_singularity_casing create_dd:mithril_scaffolding create_dd:mithril_block create_dd:mithril_casing create_dd:bronze_scaffolding create_dd:bronze_block create_dd:bronze_casing create_dd:steel_scaffolding create_dd:steel_block create_dd:steel_casing create_dd:industrial_iron_block create_dd:industrial_casing create_dd:tin_scaffolding create_dd:tin_block create_dd:chromatic_block create_dd:refined_radiance_scaffolding create_dd:refined_radiance_block create_dd:refined_radiance_casing create_dd:shadow_steel_scaffolding create_dd:shadow_steel_block create_dd:shadow_steel_casing create_dd:blaze_gold_scaffolding create_dd:blaze_gold_block create_dd:blaze_gold_casing create_dd:hydraulic_scaffolding create_dd:hydraulic_casing create_dd:overburden_scaffolding create_dd:overburden_casing create_dd:train_scaffolding create_dd:zinc_scaffolding create_dd:industrial_scaffolding create_dd:netherite_scaffolding create_dd:bronze_saw create_dd:bronze_drill createbigcannons:big_cartridge createbigcannons:cast_iron_block createbigcannons:nethersteel_block createbigcannons:basin_foundry_lid createbigcannons:wrought_iron_drop_mortar_end createbigcannons:wrought_iron_cannon_end createbigcannons:wrought_iron_cannon_chamber create_dd:flywheel railways:slashed_locometal railways:riveted_locometal railways:locometal_pillar railways:locometal_smokebox railways:plated_locometal railways:flat_slashed_locometal railways:flat_riveted_locometal railways:brass_wrapped_locometal railways:copper_wrapped_locometal railways:iron_wrapped_locometal railways:locometal_boiler railways:brass_wrapped_locometal_boiler railways:copper_wrapped_locometal_boiler railways:iron_wrapped_locometal_boiler railways:white_slashed_locometal railways:white_riveted_locometal railways:white_locometal_pillar railways:white_locometal_smokebox railways:white_plated_locometal railways:white_flat_slashed_locometal railways:white_flat_riveted_locometal railways:white_brass_wrapped_locometal railways:white_copper_wrapped_locometal railways:white_iron_wrapped_locometal railways:white_locometal_boiler railways:white_brass_wrapped_locometal_boiler railways:white_copper_wrapped_locometal_boiler railways:white_iron_wrapped_locometal_boiler railways:light_gray_slashed_locometal railways:light_gray_riveted_locometal railways:light_gray_locometal_pillar railways:light_gray_locometal_smokebox railways:light_gray_plated_locometal railways:light_gray_flat_slashed_locometal railways:light_gray_flat_riveted_locometal railways:light_gray_brass_wrapped_locometal railways:light_gray_copper_wrapped_locometal railways:light_gray_iron_wrapped_locometal railways:light_gray_locometal_boiler railways:light_gray_brass_wrapped_locometal_boiler railways:light_gray_copper_wrapped_locometal_boiler railways:light_gray_iron_wrapped_locometal_boiler railways:gray_slashed_locometal railways:gray_riveted_locometal railways:gray_locometal_pillar railways:gray_locometal_smokebox railways:gray_plated_locometal railways:gray_flat_slashed_locometal railways:gray_flat_riveted_locometal railways:gray_brass_wrapped_locometal railways:gray_copper_wrapped_locometal railways:gray_iron_wrapped_locometal railways:gray_locometal_boiler railways:gray_brass_wrapped_locometal_boiler railways:gray_copper_wrapped_locometal_boiler railways:gray_iron_wrapped_locometal_boiler railways:black_slashed_locometal railways:black_riveted_locometal railways:black_locometal_pillar railways:black_locometal_smokebox railways:black_plated_locometal railways:black_flat_slashed_locometal railways:black_flat_riveted_locometal railways:black_brass_wrapped_locometal railways:black_copper_wrapped_locometal railways:black_iron_wrapped_locometal railways:black_locometal_boiler railways:black_brass_wrapped_locometal_boiler railways:black_copper_wrapped_locometal_boiler railways:black_iron_wrapped_locometal_boiler railways:brown_slashed_locometal railways:brown_riveted_locometal railways:brown_locometal_pillar railways:brown_locometal_smokebox railways:brown_plated_locometal railways:brown_flat_slashed_locometal railways:brown_flat_riveted_locometal railways:brown_brass_wrapped_locometal railways:brown_copper_wrapped_locometal railways:brown_iron_wrapped_locometal railways:brown_locometal_boiler railways:brown_brass_wrapped_locometal_boiler railways:brown_copper_wrapped_locometal_boiler railways:brown_iron_wrapped_locometal_boiler railways:red_slashed_locometal railways:red_riveted_locometal railways:red_locometal_pillar railways:red_locometal_smokebox railways:red_plated_locometal railways:red_flat_slashed_locometal railways:red_flat_riveted_locometal railways:red_brass_wrapped_locometal railways:red_copper_wrapped_locometal railways:red_iron_wrapped_locometal railways:red_locometal_boiler railways:red_brass_wrapped_locometal_boiler railways:red_copper_wrapped_locometal_boiler railways:red_iron_wrapped_locometal_boiler railways:orange_slashed_locometal railways:orange_riveted_locometal railways:orange_locometal_pillar railways:orange_locometal_smokebox railways:orange_plated_locometal railways:orange_flat_slashed_locometal railways:orange_flat_riveted_locometal railways:orange_brass_wrapped_locometal railways:orange_copper_wrapped_locometal railways:orange_iron_wrapped_locometal railways:orange_locometal_boiler railways:orange_brass_wrapped_locometal_boiler railways:orange_copper_wrapped_locometal_boiler railways:orange_iron_wrapped_locometal_boiler railways:yellow_slashed_locometal railways:yellow_riveted_locometal railways:yellow_locometal_pillar railways:yellow_locometal_smokebox railways:yellow_plated_locometal railways:yellow_flat_slashed_locometal railways:yellow_flat_riveted_locometal railways:yellow_brass_wrapped_locometal railways:yellow_copper_wrapped_locometal railways:yellow_iron_wrapped_locometal railways:yellow_locometal_boiler railways:yellow_brass_wrapped_locometal_boiler railways:yellow_copper_wrapped_locometal_boiler railways:yellow_iron_wrapped_locometal_boiler railways:lime_slashed_locometal railways:lime_riveted_locometal railways:lime_locometal_pillar railways:lime_locometal_smokebox railways:lime_plated_locometal railways:lime_flat_slashed_locometal railways:lime_flat_riveted_locometal railways:lime_brass_wrapped_locometal railways:lime_copper_wrapped_locometal railways:lime_iron_wrapped_locometal railways:lime_locometal_boiler railways:lime_brass_wrapped_locometal_boiler railways:lime_copper_wrapped_locometal_boiler railways:lime_iron_wrapped_locometal_boiler railways:green_slashed_locometal railways:green_riveted_locometal railways:green_locometal_pillar railways:green_locometal_smokebox railways:green_plated_locometal railways:green_flat_slashed_locometal railways:green_flat_riveted_locometal railways:green_brass_wrapped_locometal railways:green_copper_wrapped_locometal railways:green_iron_wrapped_locometal railways:green_locometal_boiler railways:green_brass_wrapped_locometal_boiler railways:green_copper_wrapped_locometal_boiler railways:green_iron_wrapped_locometal_boiler railways:cyan_slashed_locometal railways:cyan_riveted_locometal railways:cyan_locometal_pillar railways:cyan_locometal_smokebox railways:cyan_plated_locometal railways:cyan_flat_slashed_locometal railways:cyan_flat_riveted_locometal railways:cyan_brass_wrapped_locometal railways:cyan_copper_wrapped_locometal railways:cyan_iron_wrapped_locometal railways:cyan_locometal_boiler railways:cyan_brass_wrapped_locometal_boiler railways:cyan_copper_wrapped_locometal_boiler railways:cyan_iron_wrapped_locometal_boiler railways:light_blue_slashed_locometal railways:light_blue_riveted_locometal railways:light_blue_locometal_pillar railways:light_blue_locometal_smokebox railways:light_blue_plated_locometal railways:light_blue_flat_slashed_locometal railways:light_blue_flat_riveted_locometal railways:light_blue_brass_wrapped_locometal railways:light_blue_copper_wrapped_locometal railways:light_blue_iron_wrapped_locometal railways:light_blue_locometal_boiler railways:light_blue_brass_wrapped_locometal_boiler railways:light_blue_copper_wrapped_locometal_boiler railways:light_blue_iron_wrapped_locometal_boiler railways:blue_slashed_locometal railways:blue_riveted_locometal railways:blue_locometal_pillar railways:blue_locometal_smokebox railways:blue_plated_locometal railways:blue_flat_slashed_locometal railways:blue_flat_riveted_locometal railways:blue_brass_wrapped_locometal railways:blue_copper_wrapped_locometal railways:blue_iron_wrapped_locometal railways:blue_locometal_boiler railways:blue_brass_wrapped_locometal_boiler railways:blue_copper_wrapped_locometal_boiler railways:blue_iron_wrapped_locometal_boiler railways:purple_slashed_locometal railways:purple_riveted_locometal railways:purple_locometal_pillar railways:purple_locometal_smokebox railways:purple_plated_locometal railways:purple_flat_slashed_locometal railways:purple_flat_riveted_locometal railways:purple_brass_wrapped_locometal railways:purple_copper_wrapped_locometal railways:purple_iron_wrapped_locometal railways:purple_locometal_boiler railways:purple_brass_wrapped_locometal_boiler railways:purple_copper_wrapped_locometal_boiler railways:purple_iron_wrapped_locometal_boiler railways:magenta_slashed_locometal railways:magenta_riveted_locometal railways:magenta_locometal_pillar railways:magenta_locometal_smokebox railways:magenta_plated_locometal railways:magenta_flat_slashed_locometal railways:magenta_flat_riveted_locometal railways:magenta_brass_wrapped_locometal railways:magenta_copper_wrapped_locometal railways:magenta_iron_wrapped_locometal railways:magenta_locometal_boiler railways:magenta_brass_wrapped_locometal_boiler railways:magenta_copper_wrapped_locometal_boiler railways:magenta_iron_wrapped_locometal_boiler railways:pink_slashed_locometal railways:pink_riveted_locometal railways:pink_locometal_pillar railways:pink_locometal_smokebox railways:pink_plated_locometal railways:pink_flat_slashed_locometal railways:pink_flat_riveted_locometal railways:pink_brass_wrapped_locometal railways:pink_copper_wrapped_locometal railways:pink_iron_wrapped_locometal railways:pink_locometal_boiler railways:pink_brass_wrapped_locometal_boiler railways:pink_copper_wrapped_locometal_boiler railways:pink_iron_wrapped_locometal_boiler create:copper_shingles create:copper_shingle_stairs create:copper_shingle_slab create:waxed_copper_shingles create:waxed_copper_shingle_stairs create:waxed_copper_shingle_slab create:exposed_copper_shingles create:exposed_copper_shingle_stairs create:exposed_copper_shingle_slab create:waxed_exposed_copper_shingles create:waxed_exposed_copper_shingle_stairs create:waxed_exposed_copper_shingle_slab create:weathered_copper_shingles create:weathered_copper_shingle_stairs create:weathered_copper_shingle_slab create:waxed_weathered_copper_shingles create:waxed_weathered_copper_shingle_stairs create:waxed_weathered_copper_shingle_slab create:oxidized_copper_shingles create:oxidized_copper_shingle_stairs create:oxidized_copper_shingle_slab create:waxed_oxidized_copper_shingles create:waxed_oxidized_copper_shingle_stairs create:waxed_oxidized_copper_shingle_slab create:copper_tiles create:copper_tile_stairs create:copper_tile_slab create:waxed_copper_tiles create:waxed_copper_tile_stairs create:waxed_copper_tile_slab create:exposed_copper_tiles create:exposed_copper_tile_stairs create:exposed_copper_tile_slab create:waxed_exposed_copper_tiles create:waxed_exposed_copper_tile_stairs create:waxed_exposed_copper_tile_slab create:weathered_copper_tiles create:weathered_copper_tile_stairs create:weathered_copper_tile_slab create:waxed_weathered_copper_tiles create:waxed_weathered_copper_tile_stairs create:waxed_weathered_copper_tile_slab create:oxidized_copper_tiles create:oxidized_copper_tile_stairs create:oxidized_copper_tile_slab create:waxed_oxidized_copper_tiles create:waxed_oxidized_copper_tile_stairs create:waxed_oxidized_copper_tile_slab create_dd:steel_polished_block create_dd:steel_polished_stairs create_dd:steel_polished_slab create_dd:steel_tiled_block create_dd:steel_tiled_stairs create_dd:steel_tiled_slab create_dd:zinc_polished_block create_dd:zinc_polished_stairs create_dd:zinc_polished_slab create_dd:zinc_tiled_block create_dd:zinc_tiled_stairs create_dd:zinc_tiled_slab create_dd:bronze_polished_block create_dd:bronze_polished_stairs create_dd:bronze_polished_slab create_dd:bronze_tiled_block create_dd:bronze_tiled_stairs create_dd:bronze_tiled_slab createbigcannons:cast_iron_sliding_breech createbigcannons:unbored_cast_iron_sliding_breech createbigcannons:incomplete_cast_iron_sliding_breech createbigcannons:cast_iron_quickfiring_breech createbigcannons:cast_iron_screw_breech createbigcannons:unbored_cast_iron_screw_breech createbigcannons:incomplete_cast_iron_screw_breech createbigcannons:cast_iron_cannon_end createbigcannons:cast_iron_autocannon_breech createbigcannons:unbored_cast_iron_autocannon_breech createbigcannons:incomplete_cast_iron_autocannon_breech createbigcannons:cast_iron_autocannon_recoil_spring createbigcannons:unbored_cast_iron_autocannon_recoil_spring createbigcannons:incomplete_cast_iron_autocannon_recoil_spring createbigcannons:cast_iron_autocannon_barrel createbigcannons:unbored_cast_iron_autocannon_barrel createbigcannons:very_small_cast_iron_cannon_layer createbigcannons:small_cast_iron_cannon_layer createbigcannons:medium_cast_iron_cannon_layer createbigcannons:large_cast_iron_cannon_layer createbigcannons:very_large_cast_iron_cannon_layer createbigcannons:unbored_very_small_cast_iron_cannon_layer createbigcannons:unbored_small_cast_iron_cannon_layer createbigcannons:unbored_medium_cast_iron_cannon_layer createbigcannons:unbored_large_cast_iron_cannon_layer createbigcannons:unbored_very_large_cast_iron_cannon_layer createbigcannons:cast_iron_cannon_barrel createbigcannons:built_up_cast_iron_cannon_barrel createbigcannons:cast_iron_cannon_chamber createbigcannons:built_up_cast_iron_cannon_chamber createbigcannons:thick_cast_iron_cannon_chamber createbigcannons:bronze_sliding_breech createbigcannons:unbored_bronze_sliding_breech createbigcannons:incomplete_bronze_sliding_breech createbigcannons:bronze_quickfiring_breech createbigcannons:bronze_screw_breech createbigcannons:unbored_bronze_screw_breech createbigcannons:incomplete_bronze_screw_breech createbigcannons:bronze_cannon_end createbigcannons:bronze_autocannon_breech createbigcannons:unbored_bronze_autocannon_breech createbigcannons:incomplete_bronze_autocannon_breech createbigcannons:bronze_autocannon_recoil_spring createbigcannons:unbored_bronze_autocannon_recoil_spring createbigcannons:incomplete_bronze_autocannon_recoil_spring createbigcannons:bronze_autocannon_barrel createbigcannons:unbored_bronze_autocannon_barrel createbigcannons:very_small_bronze_cannon_layer createbigcannons:small_bronze_cannon_layer createbigcannons:medium_bronze_cannon_layer createbigcannons:large_bronze_cannon_layer createbigcannons:very_large_bronze_cannon_layer createbigcannons:unbored_very_small_bronze_cannon_layer createbigcannons:unbored_small_bronze_cannon_layer createbigcannons:unbored_medium_bronze_cannon_layer createbigcannons:unbored_large_bronze_cannon_layer createbigcannons:unbored_very_large_bronze_cannon_layer createbigcannons:bronze_cannon_barrel createbigcannons:built_up_bronze_cannon_barrel createbigcannons:bronze_cannon_chamber createbigcannons:built_up_bronze_cannon_chamber createbigcannons:thick_bronze_cannon_chamber createbigcannons:steel_sliding_breech createbigcannons:unbored_steel_sliding_breech createbigcannons:incomplete_steel_sliding_breech createbigcannons:steel_quickfiring_breech createbigcannons:steel_screw_breech createbigcannons:unbored_steel_screw_breech createbigcannons:incomplete_steel_screw_breech createbigcannons:steel_cannon_end createbigcannons:steel_autocannon_breech createbigcannons:unbored_steel_autocannon_breech createbigcannons:incomplete_steel_autocannon_breech createbigcannons:steel_autocannon_recoil_spring createbigcannons:unbored_steel_autocannon_recoil_spring createbigcannons:incomplete_steel_autocannon_recoil_spring createbigcannons:steel_autocannon_barrel createbigcannons:unbored_steel_autocannon_barrel createbigcannons:very_small_steel_cannon_layer createbigcannons:small_steel_cannon_layer createbigcannons:medium_steel_cannon_layer createbigcannons:large_steel_cannon_layer createbigcannons:very_large_steel_cannon_layer createbigcannons:unbored_very_small_steel_cannon_layer createbigcannons:unbored_small_steel_cannon_layer createbigcannons:unbored_medium_steel_cannon_layer createbigcannons:unbored_large_steel_cannon_layer createbigcannons:unbored_very_large_steel_cannon_layer createbigcannons:steel_cannon_barrel createbigcannons:built_up_steel_cannon_barrel createbigcannons:steel_cannon_chamber createbigcannons:built_up_steel_cannon_chamber createbigcannons:thick_steel_cannon_chamber createbigcannons:nethersteel_sliding_breech createbigcannons:unbored_nethersteel_sliding_breech createbigcannons:incomplete_nethersteel_sliding_breech createbigcannons:nethersteel_quickfiring_breech createbigcannons:nethersteel_screw_breech createbigcannons:unbored_nethersteel_screw_breech createbigcannons:incomplete_nethersteel_screw_breech createbigcannons:nethersteel_cannon_end createbigcannons:nethersteel_autocannon_breech createbigcannons:unbored_nethersteel_autocannon_breech createbigcannons:incomplete_nethersteel_autocannon_breech createbigcannons:nethersteel_autocannon_recoil_spring createbigcannons:unbored_nethersteel_autocannon_recoil_spring createbigcannons:incomplete_nethersteel_autocannon_recoil_spring createbigcannons:nethersteel_autocannon_barrel createbigcannons:unbored_nethersteel_autocannon_barrel createbigcannons:very_small_nethersteel_cannon_layer createbigcannons:small_nethersteel_cannon_layer createbigcannons:medium_nethersteel_cannon_layer createbigcannons:large_nethersteel_cannon_layer createbigcannons:very_large_nethersteel_cannon_layer createbigcannons:unbored_very_small_nethersteel_cannon_layer createbigcannons:unbored_small_nethersteel_cannon_layer createbigcannons:unbored_medium_nethersteel_cannon_layer createbigcannons:unbored_large_nethersteel_cannon_layer createbigcannons:unbored_very_large_nethersteel_cannon_layer createbigcannons:nethersteel_cannon_barrel createbigcannons:built_up_nethersteel_cannon_barrel createbigcannons:nethersteel_cannon_chamber createbigcannons:built_up_nethersteel_cannon_chamber createbigcannons:thick_nethersteel_cannon_chamber createcasing:brass_mixer createcasing:brass_press createcasing:brass_depot createcasing:copper_mixer createcasing:copper_press createcasing:copper_depot createcasing:railway_gearbox createcasing:railway_encased_chain_drive createcasing:railway_adjustable_chain_gearshift createcasing:railway_mixer createcasing:railway_press createcasing:railway_depot createcasing:creative_gearbox createcasing:creative_encased_chain_drive createcasing:creative_adjustable_chain_gearshift createcasing:creative_mixer createcasing:creative_press createcasing:creative_depot createcasing:industrial_iron_gearbox createcasing:industrial_iron_encased_chain_drive createcasing:industrial_iron_adjustable_chain_gearshift createcasing:industrial_iron_mixer createcasing:industrial_iron_press createcasing:industrial_iron_depot createdeco:brass_coinstack createdeco:brass_bars createdeco:brass_bars_overlay createdeco:brass_mesh_fence createdeco:brass_hull createdeco:brass_catwalk createdeco:brass_catwalk_stairs createdeco:brass_catwalk_railing createdeco:brass_support_wedge createdeco:brass_support createdeco:brass_sheet_metal createdeco:brass_door createdeco:locked_brass_door createdeco:brass_trapdoor createdeco:red_brass_lamp createdeco:green_brass_lamp createdeco:blue_brass_lamp createdeco:yellow_brass_lamp createdeco:iron_coinstack createdeco:iron_bars createdeco:iron_bars_overlay createdeco:iron_mesh_fence createdeco:iron_hull createdeco:iron_catwalk createdeco:iron_catwalk_stairs createdeco:iron_catwalk_railing createdeco:iron_support_wedge createdeco:iron_support createdeco:iron_sheet_metal createdeco:iron_door createdeco:locked_iron_door createdeco:iron_trapdoor createdeco:red_iron_lamp createdeco:green_iron_lamp createdeco:blue_iron_lamp createdeco:yellow_iron_lamp createdeco:copper_coinstack createdeco:copper_bars createdeco:copper_bars_overlay createdeco:copper_mesh_fence createdeco:copper_hull createdeco:copper_catwalk createdeco:copper_catwalk_stairs createdeco:copper_catwalk_railing createdeco:copper_support_wedge createdeco:copper_support createdeco:copper_sheet_metal createdeco:copper_door createdeco:locked_copper_door createdeco:copper_trapdoor createdeco:red_copper_lamp createdeco:green_copper_lamp createdeco:blue_copper_lamp createdeco:yellow_copper_lamp createdeco:industrial_iron_coinstack createdeco:industrial_iron_bars createdeco:industrial_iron_bars_overlay createdeco:industrial_iron_mesh_fence createdeco:industrial_iron_hull createdeco:industrial_iron_catwalk createdeco:industrial_iron_catwalk_stairs createdeco:industrial_iron_catwalk_railing createdeco:industrial_iron_support_wedge createdeco:industrial_iron_support createdeco:industrial_iron_sheet_metal createdeco:industrial_iron_door createdeco:locked_industrial_iron_door createdeco:industrial_iron_trapdoor createdeco:red_industrial_iron_lamp createdeco:green_industrial_iron_lamp createdeco:blue_industrial_iron_lamp createdeco:yellow_industrial_iron_lamp createdeco:zinc_coinstack createdeco:zinc_bars createdeco:zinc_bars_overlay createdeco:zinc_mesh_fence createdeco:zinc_hull createdeco:zinc_catwalk createdeco:zinc_catwalk_stairs createdeco:zinc_catwalk_railing createdeco:zinc_support_wedge createdeco:zinc_support createdeco:zinc_sheet_metal createdeco:zinc_door createdeco:locked_zinc_door createdeco:zinc_trapdoor createdeco:red_zinc_lamp createdeco:green_zinc_lamp createdeco:blue_zinc_lamp createdeco:yellow_zinc_lamp + + # SAND-LIKE + block.10410 = sand red_sand dirt_path gravel suspicious_gravel suspicious_sand white_concrete_powder light_gray_concrete_powder gray_concrete_powder black_concrete_powder brown_concrete_powder red_concrete_powder orange_concrete_powder yellow_concrete_powder lime_concrete_powder green_concrete_powder cyan_concrete_powder light_blue_concrete_powder blue_concrete_powder purple_concrete_powder magenta_concrete_powder pink_concrete_powder coarse_dirt + + # FABRIC-LIKE + block.10440 = white_carpet orange_carpet magenta_carpet light_blue_carpet yellow_carpet lime_carpet pink_carpet gray_carpet light_gray_carpet cyan_carpet purple_carpet blue_carpet brown_carpet green_carpet red_carpet black_carpet white_wool orange_wool magenta_wool light_blue_wool yellow_wool lime_wool pink_wool gray_wool light_gray_wool cyan_wool purple_wool blue_wool brown_wool green_wool red_wool black_wool estrogen:moth_wool estrogen:quilted_moth_wool estrogen:moth_wool_carpet estrogen:quilted_moth_wool_carpet farmersdelight:canvas_rug farmersdelight:full_tatami_mat farmersdelight:half_tatami_mat farmersdelight:tatami sophisticated_backpacks:backpack create_dd:blueprint_block create_dd:blueprint_carpet create_dd:mysterious_blueprint_carpet handcrafted:acacia_couch handcrafted:birch_couch handcrafted:bamboo_couch handcrafted:cherry_couch handcrafted:crimson_couch handcrafted:dark_oak_couch handcrafted:jungle_couch handcrafted:mangrove_couch handcrafted:oak_couch handcrafted:spruce_couch handcrafted:warped_couch handcrafted:acacia_fancy_bed handcrafted:birch_fancy_bed handcrafted:bamboo_fancy_bed handcrafted:cherry_fancy_bed handcrafted:crimson_fancy_bed handcrafted:dark_oak_fancy_bed handcrafted:jungle_fancy_bed handcrafted:mangrove_fancy_bed handcrafted:oak_fancy_bed handcrafted:spruce_fancy_bed handcrafted:warped_fancy_bed create:white_seat interiors:white_chair interiors:white_floor_chair create:light_gray_seat interiors:light_gray_chair interiors:light_gray_floor_chair create:gray_seat interiors:gray_chair interiors:gray_floor_chair create:black_seat interiors:black_chair interiors:black_floor_chair create:brown_seat interiors:brown_chair interiors:brown_floor_chair create:red_seat interiors:red_chair interiors:red_floor_chair create:orange_seat interiors:orange_chair interiors:orange_floor_chair create:yellow_seat interiors:yellow_chair interiors:yellow_floor_chair create:lime_seat interiors:lime_chair interiors:lime_floor_chair create:green_seat interiors:green_chair interiors:green_floor_chair create:cyan_seat interiors:cyan_chair interiors:cyan_floor_chair create:light_blue_seat interiors:light_blue_chair interiors:light_blue_floor_chair create:blue_seat interiors:blue_chair interiors:blue_floor_chair create:purple_seat interiors:purple_chair interiors:purple_floor_chair create:magenta_seat interiors:magenta_chair interiors:magenta_floor_chair create:pink_seat interiors:pink_chair interiors:pink_floor_chair +#else + + # WAVING ENTITIES + block.10031 = minecraft:tallgrass biomesoplenty:plant_0 biomesoplenty:plant_1 atum:oasis_grass atum:dead_grass atum:shrub atum:weed thebetweenlands:blue_eyed_grass thebetweenlands:bottle_brush_grass thebetweenlands:cave_grass thebetweenlands:swamp_tallgrass thebetweenlands:pale_grass xlfoodmod:grass midnight:fingered_grass midnight:tall_midnight_grass tconstruct:slime_grass_tall pvj:short_grass pvj:chickenweed pvj:clovers pvj:crabgrass pvj:beach_grass biomesoplenty:coral coralreef:coral biomesoplenty:seaweed + block.10059 = minecraft:wheat minecraft:carrots minecraft:potatoes minecraft:beetroots pvj:wild_wheat pvj:wild_potato pvj:wild_beetroot pvj:wild_carrot + block.10175 = minecraft:double_plant:half=lower thebetweenlands:swamp_double_tallgrass:half=lower thebetweenlands:tall_cattail:half=lower midnight:double_midnight_grass:half=lower zawa:eucalyptus_bottom botania:doubleflower1:half=lower botania:doubleflower2:half=lower zawa:karvy_bottom + block.10176 = minecraft:double_plant:half=upper thebetweenlands:swamp_double_tallgrass:half=upper thebetweenlands:tall_cattail:half=upper midnight:double_midnight_grass:half=upper zawa:eucalyptus_top botania:doubleflower1:half=upper botania:doubleflower2:half=upper zawa:karvy_top + + block.10018 = minecraft:leaves minecraft:leaves2 biomesoplenty:leaves_0 biomesoplenty:leaves_1 biomesoplenty:leaves_2 biomesoplenty:leaves_3 biomesoplenty:leaves_4 biomesoplenty:leaves_5 atum:palm_leaves atum:deadwood_leaves quark:variant_leaves twilightforest:twilight_leaves twilightforest:magic_leaves twilightforest:twilight_leaves_3 twilightforest:dark_leaves twilightforest:giant_leaves midnight:shadowroot_leaves midnight:dark_willow_leaves aether_legacy:aether_leaves aether_legacy:crystal_leaves dynamictrees:leaves0 dynamictrees:leaves1 betterwithmods:blood_leaves rustic:leaves thebetweenlands:leaves_weedwood_tree thebetweenlands:leaves_sap_tree thebetweenlands:leaves_rubber_tree thebetweenlands:leaves_hearthgrove_tree thebetweenlands:leaves_nibbletwig_tree thebetweenlands:leaves_spirit_tree_top thebetweenlands:leaves_spirit_tree_middle thebetweenlands:leaves_spirit_tree_bottom ic2:leaves tconstruct:slime_leaves forestry:leaves pvj:leaves_willow pvj:leaves_mangrove pvj:leaves_palm pvj:leaves_redwood pvj:leaves_fir pvj:leaves_pine pvj:leaves_aspen pvj:leaves_red_maple pvj:leaves_orange_maple pvj:leaves_baobab pvj:leaves_cottonwood pvj:leaves_juniper pvj:leaves_juniper_berried pvj:leaves_white_cherry_blossom pvj:leaves_pink_cherry_blossom pvj:leaves_jacaranda extrabiomesxl:leaf_autumn_brown extrabiomesxl:leaf_autumn_orange extrabiomesxl:leaf_autumn_red extrabiomesxl:leaf_autumn_yellow extrabiomesxl:leaf_cypress_bald extrabiomesxl:leaf_cypress_regular extrabiomesxl:leaf_fir extrabiomesxl:leaf_japanese_maple_regular extrabiomesxl:leaf_japanese_maple_shrub extrabiomesxl:leaf_rainbow_eucalyptus extrabiomesxl:leaf_redwood extrabiomesxl:leaf_sakura extrautils2:ironwood_leaves musiccraft:mleaves thaumcraft:leaves_greatwood thaumcraft:leaves_silverwood + + # REFLECTIVE + block.10008 = minecraft:water minecraft:flowing_water 113_water_mechanics:downwards_bubble_column 113_water_mechanics:upwards_bubble_column bubble_elevator:bubble_column magma_bubble_column:magma_bubble_column + block.10079 = ice slime stained_glass stained_glass_pane + + # EMMISIVE (LIKE GLOWSTONE) + block.10089 = glowstone torch redstone_torch lit_pumpkin lit_redstone_lamp beacon + + # NO-WAVEABLE + block.10032 = reeds sugar_cane tube_coral brain_coral fire_coral bubble_coral horn_coral dead_tube_coral dead_brain_coral dead_fire_coral dead_bubble_coral dead_horn_coral tube_coral_fan brain_coral_fan fire_coral_fan bubble_coral_fan horn_coral_fan dead_tube_coral_fan dead_brain_coral_fan dead_fire_coral_fan dead_bubble_coral_fan dead_horn_coral_fan sapling nether_wart + + # NEW EMMISIVE + block.10090 = magma fire flowing_lava lava end_root beacon betterendforge:mossy_glowshroom_hymenophore betterendforge:mossy_glowshroom_fur betterendforge:blue_vine_lantern betterendforge:blue_vine_fur betterendforge::lumecorn:shape=light_top_middle betterendforge::lumecorn:shape=light_middle betterendforge::lumecorn:shape=light_bottom betterendforge::purple_polypore betterendforge::bulb_vine:shape=bottom + + # FAKE EMMISORS + block.10213 = soul_fire + + # METAL-LIKE + block.10400 = iron_block gold_block emerald_block lapis_block diamond_block + + # SAND-LIKE + block.10410 = sand red_sand dirt_path + + # FABRIC-LIKE + block.10440 = white_carpet orange_carpet magenta_carpet light_blue_carpet yellow_carpet lime_carpet pink_carpet gray_carpet light_gray_carpet cyan_carpet purple_carpet blue_carpet brown_carpet green_carpet red_carpet black_carpet white_wool orange_wool magenta_wool light_blue_wool yellow_wool lime_wool pink_wool gray_wool light_gray_wool cyan_wool purple_wool blue_wool brown_wool green_wool red_wool black_wool + #endif diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/basic_blocks_fragment.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/basic_blocks_fragment.glsl new file mode 100644 index 0000000..fa3ecf6 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/basic_blocks_fragment.glsl @@ -0,0 +1,15 @@ +#include "/lib/config.glsl" + +/* Uniforms, ins, outs */ +varying vec4 tint_color; +varying vec2 texcoord; +varying vec3 basic_light; + +// MAIN FUNCTION ------------------ + +void main() { + vec4 block_color = tint_color; + block_color.rgb *= basic_light; + + #include "/src/writebuffers.glsl" +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/basic_blocks_vertex.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/basic_blocks_vertex.glsl new file mode 100644 index 0000000..3fac767 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/basic_blocks_vertex.glsl @@ -0,0 +1,59 @@ +#include "/lib/config.glsl" + +/* Color utils */ + +#ifdef THE_END + #include "/lib/color_utils_end.glsl" +#elif defined NETHER + #include "/lib/color_utils_nether.glsl" +#else + #include "/lib/color_utils.glsl" +#endif + +/* Uniforms */ + +uniform float rainStrength; +uniform mat4 gbufferProjectionInverse; + +#if defined SHADOW_CASTING && !defined NETHER + uniform mat4 gbufferModelViewInverse; +#endif + +/* Ins / Outs */ + +varying vec4 tint_color; +varying vec2 texcoord; +varying vec3 basic_light; + +/* Utility functions */ + +#include "/lib/luma.glsl" +#include "/lib/basic_utils.glsl" + +#if AA_TYPE > 0 + #include "/src/taa_offset.glsl" +#endif + +// MAIN FUNCTION ------------------ + +void main() { + #include "/src/basiccoords_vertex.glsl" + #include "/src/position_vertex.glsl" + tint_color = gl_Color; + + basic_light = day_blend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); + basic_light = mix(basic_light, ZENITH_SKY_RAIN_COLOR * luma(basic_light), rainStrength); + + vec2 illumination = clamp(abs(lmcoord), 0.0, 1.0); // Fix lines without correct illumination data + illumination.y = (max(illumination.y, 0.065) - 0.065) * 1.06951871657754; + + #if defined UNKNOWN_DIM + vec3 candle_color = + CANDLE_BASELIGHT * ((illumination.x * illumination.x) + pow(illumination.x * 1.205, 6.0)) * 2.75; + #else + vec3 candle_color = + CANDLE_BASELIGHT * ((illumination.x * illumination.x) + pow(illumination.x * 1.165, 6.0)); + #endif + + basic_light += candle_color; +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/clouds_blocks_fragment.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/clouds_blocks_fragment.glsl new file mode 100644 index 0000000..4624cfd --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/clouds_blocks_fragment.glsl @@ -0,0 +1,38 @@ +#include "/lib/config.glsl" + +/* Uniforms */ + +uniform sampler2D tex; +uniform float far; +uniform float blindness; + +#if MC_VERSION >= 11900 + uniform float darknessFactor; + uniform float darknessLightFactor; +#endif + +#if V_CLOUDS == 0 || defined UNKNOWN_DIM + uniform float pixel_size_x; + uniform float pixel_size_y; + uniform sampler2D gaux4; +#endif + +/* Ins / Outs */ + +#if V_CLOUDS == 0 || defined UNKNOWN_DIM + varying vec2 texcoord; + varying vec4 tint_color; +#endif + +// Main function --------- + +void main() { + #if V_CLOUDS == 0 || defined UNKNOWN_DIM + vec4 block_color = texture2D(tex, texcoord) * tint_color; + #include "/src/cloudfinalcolor.glsl" + #include "/src/writebuffers.glsl" + #elif MC_VERSION <= 11300 + vec4 block_color = vec4(0.0); + #include "/src/writebuffers.glsl" + #endif +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/clouds_blocks_vertex.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/clouds_blocks_vertex.glsl new file mode 100644 index 0000000..b6063d2 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/clouds_blocks_vertex.glsl @@ -0,0 +1,40 @@ +#include "/lib/config.glsl" + +/* Uniforms */ + +uniform mat4 gbufferProjectionInverse; + +#if V_CLOUDS == 0 || defined UNKNOWN_DIM + uniform float rainStrength; +#endif + +#if defined SHADOW_CASTING && !defined NETHER + uniform mat4 gbufferModelViewInverse; +#endif + +/* Ins / Outs */ + +#if V_CLOUDS == 0 || defined UNKNOWN_DIM + varying vec2 texcoord; + varying vec4 tint_color; +#endif + +/* Utility functions */ + +#if AA_TYPE > 0 + #include "/src/taa_offset.glsl" +#endif + +#if V_CLOUDS == 0 || defined UNKNOWN_DIM + #include "/lib/luma.glsl" +#endif + +// MAIN FUNCTION ------------------ + +void main() { + #if V_CLOUDS == 0 || defined UNKNOWN_DIM + texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + tint_color = gl_Color; + #endif + #include "/src/position_vertex.glsl" +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/composite1_fragment.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/composite1_fragment.glsl new file mode 100644 index 0000000..a2c8270 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/composite1_fragment.glsl @@ -0,0 +1,66 @@ +#include "/lib/config.glsl" + +#ifdef DOF + const bool colortex1MipmapEnabled = true; +#endif + +#ifdef BLOOM + const bool gaux1MipmapEnabled = true; +#endif + +/* Uniforms */ + +uniform sampler2D colortex1; +uniform sampler2D gaux1; +uniform float inv_aspect_ratio; + +#ifdef DOF + uniform float centerDepthSmooth; + uniform float pixel_size_x; + uniform float pixel_size_y; + uniform float viewWidth; + uniform float viewHeight; + uniform float fov_y_inv; +#endif + +/* Ins / Outs */ + +varying vec2 texcoord; + +#include "/lib/bloom.glsl" + +/* Utility functions */ + +#if defined BLOOM || defined DOF + #include "/lib/dither.glsl" +#endif + +#ifdef DOF + #include "/lib/blur.glsl" +#endif + +// MAIN FUNCTION ------------------ + +void main() { + vec4 block_color = texture2D(colortex1, texcoord); + + #if defined BLOOM || defined DOF + #if AA_TYPE > 0 + float dither = shifted_eclectic_r_dither(gl_FragCoord.xy); + #else + float dither = semiblue(gl_FragCoord.xy); + #endif + #endif + + #ifdef DOF + block_color.rgb = noised_blur(block_color, colortex1, texcoord, DOF_STRENGTH, dither); + #endif + + #ifdef BLOOM + vec3 bloom = mipmap_bloom(gaux1, texcoord, dither); + block_color.rgb += bloom; + #endif + + /* DRAWBUFFERS:1 */ + gl_FragData[0] = block_color; +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/composite1_vertex.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/composite1_vertex.glsl new file mode 100644 index 0000000..6fadd41 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/composite1_vertex.glsl @@ -0,0 +1,12 @@ +#include "/lib/config.glsl" + +/* Ins / Outs */ + +varying vec2 texcoord; + +// MAIN FUNCTION ------------------ + +void main() { + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + texcoord = gl_MultiTexCoord0.xy; +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/composite2_fragment.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/composite2_fragment.glsl new file mode 100644 index 0000000..ab7e2e4 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/composite2_fragment.glsl @@ -0,0 +1,110 @@ +#include "/lib/config.glsl" + +#if MC_VERSION < 11300 + const bool colortex0Clear = false; + const bool colortex1Clear = false; + const bool colortex2Clear = false; + const bool colortex3Clear = false; + const bool gaux1Clear = false; + const bool gaux2Clear = false; + const bool gaux3Clear = false; + const bool gaux4Clear = false; +#endif + +/* Uniforms */ + +uniform sampler2D colortex1; + +#if AA_TYPE > 0 || defined MOTION_BLUR + uniform sampler2D colortex3; // TAA past averages + uniform float pixel_size_x; + uniform float pixel_size_y; + uniform mat4 gbufferProjectionInverse; + uniform mat4 gbufferProjection; + uniform mat4 gbufferModelViewInverse; + uniform vec3 cameraPosition; + uniform vec3 previousCameraPosition; + uniform mat4 gbufferPreviousProjection; + uniform mat4 gbufferPreviousModelView; + uniform sampler2D depthtex0; + uniform float frameTime; +#endif + +/* Ins / Outs */ + +varying vec2 texcoord; + +/* Utility functions */ + +#if AA_TYPE > 0 || defined MOTION_BLUR + #include "/lib/projection_utils.glsl" +#endif + +#ifdef MOTION_BLUR + #include "/lib/dither.glsl" + #include "/lib/motion_blur.glsl" +#endif + +#if AA_TYPE > 0 + #include "/lib/luma.glsl" + #include "/lib/fast_taa.glsl" +#endif + +// MAIN FUNCTION ------------------ + +void main() { + vec4 block_color = texture2D(colortex1, texcoord); + + // Precalc past position and velocity + #if AA_TYPE > 0 || defined MOTION_BLUR + // Retrojection of previous frame + float z_depth = texture2D(depthtex0, texcoord).r; + vec2 texcoord_past; + vec3 curr_view_pos; + vec3 curr_feet_player_pos; + vec3 prev_feet_player_pos; + vec3 prev_view_pos; + vec2 final_pos; + + if(z_depth < 0.56) { + texcoord_past = texcoord; + } else { + curr_view_pos = + vec3(vec2(gbufferProjectionInverse[0].x, gbufferProjectionInverse[1].y) * (texcoord * 2.0 - 1.0) + gbufferProjectionInverse[3].xy, gbufferProjectionInverse[3].z); + curr_view_pos /= (gbufferProjectionInverse[2].w * (z_depth * 2.0 - 1.0) + gbufferProjectionInverse[3].w); + curr_feet_player_pos = mat3(gbufferModelViewInverse) * curr_view_pos + gbufferModelViewInverse[3].xyz; + + prev_feet_player_pos = + z_depth > 0.56 ? curr_feet_player_pos + cameraPosition - previousCameraPosition : curr_feet_player_pos; + prev_view_pos = mat3(gbufferPreviousModelView) * prev_feet_player_pos + gbufferPreviousModelView[3].xyz; + final_pos = + vec2(gbufferPreviousProjection[0].x, gbufferPreviousProjection[1].y) * prev_view_pos.xy + gbufferPreviousProjection[3].xy; + texcoord_past = (final_pos / -prev_view_pos.z) * 0.5 + 0.5; + } + + #endif + + #ifdef MOTION_BLUR + // "Speed" + vec2 velocity = texcoord - texcoord_past; + block_color.rgb = motion_blur(block_color.rgb, z_depth, velocity, colortex1); + #endif + + #if AA_TYPE > 0 + #ifdef DOF + block_color = fast_taa_depth(block_color, texcoord_past); + #else + block_color.rgb = fast_taa(block_color.rgb, texcoord_past); + #endif + + // Black splat fix test + block_color = clamp(block_color, vec4(0.0), vec4(100.0)); + + /* DRAWBUFFERS:13 */ + gl_FragData[0] = block_color; // colortex1 + gl_FragData[1] = block_color; // To TAA averages + #else + /* DRAWBUFFERS:1 */ + gl_FragData[0] = block_color; // colortex1 + #endif +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/composite2_vertex.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/composite2_vertex.glsl new file mode 100644 index 0000000..5266c0b --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/composite2_vertex.glsl @@ -0,0 +1,12 @@ +#include "/lib/config.glsl" + +/* Ins / Outs */ + +varying vec2 texcoord; + +// MAIN FUNCTION ------------------ + +void main() { + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + texcoord = gl_MultiTexCoord0.xy; +} \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/composite_fragment.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/composite_fragment.glsl new file mode 100644 index 0000000..39aa72b --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/composite_fragment.glsl @@ -0,0 +1,239 @@ +#include "/lib/config.glsl" +const bool colortex1MipmapEnabled = true; + +/* Color utils */ + +#ifdef THE_END + #include "/lib/color_utils_end.glsl" +#elif defined NETHER + #include "/lib/color_utils_nether.glsl" +#else + #include "/lib/color_utils.glsl" +#endif + +/* Uniforms */ + +uniform sampler2D colortex1; +uniform float far; +uniform float near; +uniform float blindness; +uniform float rainStrength; +uniform sampler2D depthtex0; +uniform int isEyeInWater; +uniform ivec2 eyeBrightnessSmooth; + +#if MC_VERSION >= 11900 + uniform float darknessFactor; +#endif + +#if VOL_LIGHT == 1 && !defined NETHER + uniform sampler2D depthtex1; + uniform vec3 sunPosition; + uniform vec3 moonPosition; + uniform float light_mix; + uniform mat4 gbufferProjectionInverse; + uniform mat4 gbufferModelViewInverse; + uniform mat4 gbufferModelView; + uniform float vol_mixer; +#endif + +#if VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER + uniform float light_mix; + uniform mat4 gbufferProjectionInverse; + uniform mat4 gbufferModelViewInverse; + uniform mat4 gbufferModelView; + uniform float vol_mixer; + uniform vec3 shadowLightPosition; + uniform mat4 shadowModelView; + uniform mat4 shadowProjection; + uniform sampler2DShadow shadowtex1; + + #if defined COLORED_SHADOW + uniform sampler2DShadow shadowtex0; + uniform sampler2D shadowcolor0; + #endif +#endif + +/* Ins / Outs */ + +varying vec2 texcoord; +varying vec3 direct_light_color; +varying float exposure; + +#if VOL_LIGHT == 1 && !defined NETHER + varying vec3 vol_light_color; + varying vec2 lightpos; + varying vec3 astro_pos; +#endif + +#if VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER + varying vec3 vol_light_color; +#endif + +#if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + varying mat4 modeli_times_projectioni; +#endif + +/* Utility functions */ + +#include "/lib/basic_utils.glsl" +#include "/lib/depth.glsl" + +#ifdef BLOOM + #include "/lib/luma.glsl" +#endif + +#if VOL_LIGHT == 1 && !defined NETHER + #include "/lib/dither.glsl" + #include "/lib/volumetric_light.glsl" +#endif + +#if VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER + #include "/lib/dither.glsl" + #include "/lib/volumetric_light.glsl" +#endif + +// MAIN FUNCTION ------------------ + +void main() { + vec4 block_color = texture2D(colortex1, texcoord); + float d = texture2D(depthtex0, texcoord).r; + float linear_d = ld(d); + + vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + + // Depth to distance + float screen_distance = linear_d * far; + + // Underwater fog + if(isEyeInWater == 1) { + float water_absorption = clamp(-pow((-linear_d + 1.0), (2.0 + (WATER_ABSORPTION * 4.0))) + 1.0, 0.0, 1.0); + + block_color.rgb = + mix(block_color.rgb, WATER_COLOR * direct_light_color * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667), water_absorption); + + } else if(isEyeInWater == 2) { + block_color = mix(block_color, vec4(1.0, .1, 0.0, 1.0), clamp(sqrt(linear_d * far * 0.125), 0.0, 1.0)); + } + + #if MC_VERSION >= 11900 + if((blindness > .01 || darknessFactor > .01) && linear_d > 0.999) { + block_color.rgb = vec3(0.0); + } + #else + if(blindness > .01 && linear_d > 0.999) { + block_color.rgb = vec3(0.0); + } + #endif + + #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + #if AA_TYPE > 0 + float dither = shifted_eclectic_r_dither(gl_FragCoord.xy); + #else + float dither = semiblue(gl_FragCoord.xy); + #endif + #endif + + #if VOL_LIGHT == 1 && !defined NETHER + #if defined THE_END + float vol_light = 0.1; + if(d > 0.9999) { + vol_light = 0.5; + } + #else + float vol_light = ss_godrays(dither); + #endif + + vec4 center_world_pos = modeli_times_projectioni * (vec4(0.5, 0.5, 1.0, 1.0) * 2.0 - 1.0); + vec3 center_view_vector = normalize(center_world_pos.xyz); + + vec4 world_pos = modeli_times_projectioni * (vec4(texcoord, 1.0, 1.0) * 2.0 - 1.0); + vec3 view_vector = normalize(world_pos.xyz); + + #if defined THE_END + // Fixed light source position in sky for intensity calculation + vec3 intermediate_vector = + normalize((gbufferModelViewInverse * gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz); + float vol_intensity = + clamp(dot(center_view_vector, intermediate_vector), 0.0, 1.0); + + vol_intensity *= clamp(dot(view_vector, intermediate_vector), 0.0, 1.0); + + vol_intensity *= 0.666; + + block_color.rgb += (vol_light_color * vol_light * vol_intensity * 2.0); + #else + // Light source position for depth based godrays intensity calculation + vec3 intermediate_vector = + normalize((gbufferModelViewInverse * vec4(astro_pos, 0.0)).xyz); + float vol_intensity = + clamp(dot(center_view_vector, intermediate_vector), 0.0, 1.0); + vol_intensity *= dot(view_vector, intermediate_vector); + vol_intensity = + pow(clamp(vol_intensity, 0.0, 1.0), vol_mixer) * 0.5 * abs(light_mix * 2.0 - 1.0); + + block_color.rgb = + mix(block_color.rgb, vol_light_color * vol_light, vol_intensity * (vol_light * 0.5 + 0.5) * (1.0 - rainStrength)); + #endif + #endif + + #if VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER + #if defined COLORED_SHADOW + vec3 vol_light = get_volumetric_color_light(dither, screen_distance, modeli_times_projectioni); + #else + float vol_light = get_volumetric_light(dither, screen_distance, modeli_times_projectioni); + #endif + + // Volumetric intensity adjustments + + vec4 world_pos = modeli_times_projectioni * (vec4(texcoord, 1.0, 1.0) * 2.0 - 1.0); + vec3 view_vector = normalize(world_pos.xyz); + + #if defined THE_END + // Fixed light source position in sky for volumetrics intensity calculation (The End) + float vol_intensity = dot(view_vector, normalize((gbufferModelViewInverse * gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz)); + #else + // Light source position for volumetrics intensity calculation + float vol_intensity = dot(view_vector, normalize((gbufferModelViewInverse * vec4(shadowLightPosition, 0.0)).xyz)); + #endif + + #if defined THE_END + vol_intensity = + ((square_pow(clamp((vol_intensity + .666667) * 0.6, 0.0, 1.0)) * 0.5)); + block_color.rgb += (vol_light_color * vol_light * vol_intensity * 2.0); + #else + vol_intensity = + pow(clamp((vol_intensity + 0.5) * 0.666666666666666, 0.0, 1.0), vol_mixer) * 0.6 * abs(light_mix * 2.0 - 1.0); + + block_color.rgb = + mix(block_color.rgb, vol_light_color * vol_light, vol_intensity * (vol_light * 0.5 + 0.5) * (1.0 - rainStrength)); + #endif + #endif + + // Dentro de la nieve + #ifdef BLOOM + if(isEyeInWater == 3) { + block_color.rgb = + mix(block_color.rgb, vec3(0.7, 0.8, 1.0) / exposure, clamp(screen_distance * .5, 0.0, 1.0)); + } + #else + if(isEyeInWater == 3) { + block_color.rgb = + mix(block_color.rgb, vec3(0.85, 0.9, 0.6), clamp(screen_distance * .5, 0.0, 1.0)); + } + #endif + + #ifdef BLOOM + // Bloom source + float bloom_luma = smoothstep(0.85, 1.0, luma(block_color.rgb * exposure)) * 0.5; + + /* DRAWBUFFERS:146 */ + gl_FragData[0] = block_color; + gl_FragData[1] = block_color * bloom_luma; + gl_FragData[2] = vec4(exposure, 0.0, 0.0, 0.0); + #else + /* DRAWBUFFERS:16 */ + gl_FragData[0] = block_color; + gl_FragData[1] = vec4(exposure, 0.0, 0.0, 0.0); + #endif +} \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/composite_vertex.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/composite_vertex.glsl new file mode 100644 index 0000000..f624efb --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/composite_vertex.glsl @@ -0,0 +1,115 @@ +#include "/lib/config.glsl" + +/* Color utils */ + +#ifdef THE_END + #include "/lib/color_utils_end.glsl" +#else + #include "/lib/color_utils.glsl" +#endif + +/* Uniforms */ + +uniform float rainStrength; +uniform ivec2 eyeBrightnessSmooth; + +#if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + uniform int isEyeInWater; +#endif + +#if VOL_LIGHT == 1 && !defined NETHER + uniform float light_mix; + uniform vec3 sunPosition; + uniform vec3 moonPosition; + uniform mat4 gbufferProjection; +#endif + +#if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + uniform mat4 gbufferModelViewInverse; + uniform mat4 gbufferProjectionInverse; +#endif + +uniform sampler2D colortex1; +uniform sampler2D gaux3; +uniform float viewWidth; +uniform float viewHeight; +uniform float frameTime; + +/* Ins / Outs */ + +varying vec2 texcoord; +varying vec3 direct_light_color; + +#if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + varying vec3 vol_light_color; // Flat +#endif + +varying float exposure; // Flat + +#if VOL_LIGHT == 1 && !defined NETHER + varying vec2 lightpos; // Flat + varying vec3 astro_pos; // Flat +#endif + +#if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + varying mat4 modeli_times_projectioni; +#endif + +/* Utility functions */ + +#include "/lib/luma.glsl" + +// MAIN FUNCTION ------------------ + +void main() { + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + texcoord = gl_MultiTexCoord0.xy; + + vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + + direct_light_color = day_blend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); + direct_light_color = mix(direct_light_color, ZENITH_SKY_RAIN_COLOR * luma(direct_light_color), rainStrength); + + // Exposure + #if !defined UNKNOWN_DIM + float mipmap_level = log2(min(viewWidth, viewHeight)) - 1.0; + + vec3 exposure_col = texture2DLod(colortex1, vec2(0.5), mipmap_level).rgb; + exposure_col += texture2DLod(colortex1, vec2(0.25), mipmap_level).rgb; + exposure_col += texture2DLod(colortex1, vec2(0.75), mipmap_level).rgb; + exposure_col += texture2DLod(colortex1, vec2(0.25, 0.75), mipmap_level).rgb; + exposure_col += texture2DLod(colortex1, vec2(0.75, 0.25), mipmap_level).rgb; + + exposure = clamp(luma(exposure_col), 0.0005, 100.0); + + float prev_exposure = texture2D(gaux3, vec2(0.5)).r; + + exposure = (exp(-exposure) * 3.03) + 0.6; + exposure = mix(exposure, prev_exposure, exp(-frameTime * 1.25)); + #else + exposure = 1.0; + #endif + + #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + float vol_attenuation; + if(isEyeInWater == 0) { + vol_attenuation = 1.0; + } else { + vol_attenuation = 0.1 + (eye_bright_smooth.y * 0.002); + } + + vol_light_color = day_blend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR) * 1.2 * vol_attenuation; + #endif + + #if VOL_LIGHT == 1 && !defined NETHER + astro_pos = sunPosition * step(0.5, light_mix) * 2.0 + moonPosition; + vec4 tpos = vec4(astro_pos, 1.0) * gbufferProjection; + tpos = vec4(tpos.xyz / tpos.w, 1.0); + vec2 pos1 = tpos.xy / tpos.z; + lightpos = pos1 * 0.5 + 0.5; + #endif + + #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + modeli_times_projectioni = gbufferModelViewInverse * gbufferProjectionInverse; + #endif +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/damage_fragment.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/damage_fragment.glsl new file mode 100644 index 0000000..ebe8c60 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/damage_fragment.glsl @@ -0,0 +1,17 @@ +#include "/lib/config.glsl" + +/* Uniforms */ + +uniform sampler2D tex; + +/* Ins / Outs */ + +varying vec2 texcoord; + +// MAIN FUNCTION ------------------ + +void main() { + vec4 block_color = texture2D(tex, texcoord); + + #include "/src/writebuffers.glsl" +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/damage_vertex.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/damage_vertex.glsl new file mode 100644 index 0000000..d8ed7e7 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/damage_vertex.glsl @@ -0,0 +1,27 @@ +#include "/lib/config.glsl" + +/* Uniforms */ + +uniform mat4 gbufferProjectionInverse; + +/* Ins / Outs */ + +varying vec2 texcoord; +varying float var_fog_frag_coord; + +/* Utility functions */ + +#if AA_TYPE > 0 + #include "/src/taa_offset.glsl" +#endif + +// MAIN FUNCTION ------------------ + +void main() { + texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + vec4 homopos = gbufferProjectionInverse * vec4(gl_Position.xyz / gl_Position.w, 1.0); + vec3 viewPos = homopos.xyz / homopos.w; + gl_FogFragCoord = length(viewPos.xyz); +} \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/deferred_fragment.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/deferred_fragment.glsl new file mode 100644 index 0000000..e229ab6 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/deferred_fragment.glsl @@ -0,0 +1,199 @@ +#include "/lib/config.glsl" + +/* Color utils */ + +#ifdef THE_END + #include "/lib/color_utils_end.glsl" +#elif defined NETHER + #include "/lib/color_utils_nether.glsl" +#else + #include "/lib/color_utils.glsl" +#endif + +/* Uniforms */ + +uniform sampler2D colortex1; +uniform ivec2 eyeBrightnessSmooth; +uniform int isEyeInWater; +uniform sampler2D depthtex0; +uniform float far; +uniform float near; +uniform float blindness; +uniform float rainStrength; +uniform sampler2D gaux3; + +#if V_CLOUDS != 0 + uniform sampler2D gaux2; +#endif + +#ifdef NETHER + uniform vec3 fogColor; +#endif + +#if AO == 1 + uniform float inv_aspect_ratio; + uniform float fov_y_inv; +#endif + +#if V_CLOUDS != 0 && !defined UNKNOWN_DIM + uniform sampler2D noisetex; + uniform vec3 cameraPosition; + uniform vec3 sunPosition; + + #if defined DISTANT_HORIZONS + uniform sampler2D dhDepthTex0; + uniform float dhNearPlane; + uniform float dhFarPlane; + uniform float viewWidth; + uniform float viewHeight; + #endif +#endif + +uniform mat4 gbufferModelViewInverse; +uniform mat4 gbufferProjectionInverse; +uniform float pixel_size_x; +uniform float pixel_size_y; + +#if AO == 1 || (V_CLOUDS != 0 && !defined UNKNOWN_DIM) + uniform mat4 gbufferProjection; + uniform float frameTimeCounter; +#endif + +/* Ins / Outs */ + +varying vec2 texcoord; +varying vec3 up_vec; // Flat + +#if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY + varying float umbral; + varying vec3 cloud_color; + varying vec3 dark_cloud_color; +#endif + +#if AO == 1 + varying float fog_density_coeff; +#endif + +/* Utility functions */ + +#include "/lib/depth.glsl" +#include "/lib/luma.glsl" + +#ifdef DISTANT_HORIZONS + #include "/lib/depth_dh.glsl" +#endif + +#if AO == 1 || (V_CLOUDS != 0 && !defined UNKNOWN_DIM) + #include "/lib/dither.glsl" +#endif + +#if AO == 1 + #include "/lib/ao.glsl" +#endif + +#if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) + #include "/lib/projection_utils.glsl" + + #ifdef THE_END + #include "/lib/volumetric_clouds_end.glsl" + #else + #include "/lib/volumetric_clouds.glsl" + #endif +#endif + +// MAIN FUNCTION ------------------ + +void main() { + vec4 block_color = texture2D(colortex1, texcoord); + float d = texture2D(depthtex0, texcoord).r; + float linear_d = ld(d); + + vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + + vec3 view_vector = vec3(1.0); + + #if AO == 1 || (V_CLOUDS != 0 && !defined UNKNOWN_DIM) + #if AA_TYPE > 0 + float dither = shifted_eclectic_r_dither(gl_FragCoord.xy); + #else + float dither = semiblue(gl_FragCoord.xy); + #endif + #endif + + #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY + if(linear_d > 0.9999) { // Only sky + vec4 world_pos = gbufferModelViewInverse * gbufferProjectionInverse * (vec4(texcoord, 1.0, 1.0) * 2.0 - 1.0); + view_vector = normalize(world_pos.xyz); + + #ifdef THE_END + float bright = dot(view_vector, vec3(0.0, 0.89442719, 0.4472136)); + bright = clamp((bright * 2.0) - 1.0, 0.0, 1.0); + bright *= bright * bright * bright; + #else + float bright = dot(view_vector, normalize((gbufferModelViewInverse * vec4(sunPosition, 0.0)).xyz)); + bright = clamp(bright * bright * bright, 0.0, 1.0); + #endif + + #ifdef THE_END + #ifdef END_CLOUDS + block_color.rgb = get_end_cloud(view_vector, block_color.rgb, bright, dither, cameraPosition, CLOUD_STEPS_AVG); + #endif + #else + block_color.rgb = get_cloud(view_vector, block_color.rgb, bright, dither, cameraPosition, CLOUD_STEPS_AVG, umbral, cloud_color, dark_cloud_color); + #endif + } + + #else + #if defined NETHER + #if !defined DISTANT_HORIZONS + if(linear_d > 0.9999) { // Only sky + block_color = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); + } + #endif + #elif !defined NETHER && !defined THE_END + if(linear_d > 0.9999 && isEyeInWater == 1) { // Only sky and water + vec4 screen_pos = vec4(gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), gl_FragCoord.z, 1.0); + vec4 fragposition = gbufferProjectionInverse * (screen_pos * 2.0 - 1.0); + + vec4 world_pos = gbufferModelViewInverse * vec4(fragposition.xyz, 0.0); + view_vector = normalize(world_pos.xyz); + } + #endif + #endif + + #if AO == 1 + // AO distance attenuation + #if defined NETHER + if(NETHER_FOG_DISTANCE == 0) { + linear_d = sqrt(linear_d); + } else { + float screen_distance = 2.0 * near * far / (far + near - (2.0 * d - 1.0) * (far - near)); + linear_d = screen_distance / NETHER_SIGHT; + } + #endif + float ao_att = + pow(clamp(linear_d * 1.6, 0.0, 1.0), mix(fog_density_coeff, 1.0, rainStrength)); + + float final_ao = mix(dbao(dither), 1.0, ao_att); + block_color.rgb *= final_ao; + // block_color = vec4(vec3(final_ao), 1.0); + // block_color = vec4(vec3(linear_d), 1.0); + #endif + + #if defined THE_END || defined NETHER + #define NIGHT_CORRECTION 1.0 + #else + #define NIGHT_CORRECTION day_blend_float(1.0, 1.0, 0.1) + #endif + + // Underwater sky + if(isEyeInWater == 1) { + if(linear_d > 0.9999) { + block_color.rgb = mix(NIGHT_CORRECTION * WATER_COLOR * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667), block_color.rgb, max(clamp(view_vector.y - 0.1, 0.0, 1.0), rainStrength)); + } + } + + /* DRAWBUFFERS:14 */ + gl_FragData[0] = vec4(block_color.rgb, d); + gl_FragData[1] = block_color; +} \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/deferred_vertex.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/deferred_vertex.glsl new file mode 100644 index 0000000..59515d3 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/deferred_vertex.glsl @@ -0,0 +1,59 @@ +#include "/lib/config.glsl" + +/* Color utils */ + +#ifdef THE_END + #include "/lib/color_utils_end.glsl" +#elif defined NETHER + #include "/lib/color_utils_nether.glsl" +#else + #include "/lib/color_utils.glsl" +#endif +/* Uniforms */ + +uniform mat4 gbufferModelView; + +#if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY + uniform float rainStrength; +#endif + +/* Ins / Outs */ + +varying vec2 texcoord; +varying vec3 up_vec; + +#if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY + varying float umbral; + varying vec3 cloud_color; + varying vec3 dark_cloud_color; +#endif + +#if AO == 1 + varying float fog_density_coeff; +#endif + +/* Utility functions */ + +#if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY + #include "/lib/luma.glsl" +#endif + + // MAIN FUNCTION ------------------ + +void main() { + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + texcoord = gl_MultiTexCoord0.xy; + up_vec = normalize(gbufferModelView[1].xyz); + + #if AO == 1 + #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + fog_density_coeff = FOG_DENSITY * FOG_ADJUST; + #else + fog_density_coeff = day_blend_float(FOG_SUNSET, FOG_DAY, FOG_NIGHT) * FOG_ADJUST; + #endif + #endif + + #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY + #include "/lib/volumetric_clouds_vertex.glsl" + #endif +} \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/final_fragment.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/final_fragment.glsl new file mode 100644 index 0000000..6b35fb9 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/final_fragment.glsl @@ -0,0 +1,150 @@ +#include "/lib/config.glsl" + +// Do not remove comments. It works! +/* + +noisetex - Water normals +colortex0 - Blue noise +colortex1 - Antialiasing auxiliar +colortex2 - Clouds texture 2 +colortex3 - TAA Averages history +gaux1 - Screen-Space-Reflection / Bloom auxiliar +gaux2 - Clouds texture 1 +gaux3 - Exposure auxiliar +gaux4 - Fog auxiliar + +const int noisetexFormat = RG8; +const int colortex0Format = R8; +*/ +#ifdef DOF +/* +const int colortex1Format = RGBA16F; +*/ +#else +/* +const int colortex1Format = R11F_G11F_B10F; +*/ +#endif +/* +const int colortex2Format = R8; +*/ +#ifdef DOF +/* +const int colortex3Format = RGBA16F; +*/ +#else +/* +const int colortex3Format = R11F_G11F_B10F; +*/ +#endif +/* +const int gaux1Format = R11F_G11F_B10F; +const int gaux2Format = R8; +const int gaux3Format = R16F; +const int gaux4Format = R11F_G11F_B10F; + +const int shadowcolor0Format = RGBA8; +*/ + +// Buffers clear +const bool colortex0Clear = false; +const bool colortex1Clear = false; +const bool colortex2Clear = false; +const bool colortex3Clear = false; +const bool gaux1Clear = false; +const bool gaux2Clear = false; +const bool gaux3Clear = false; +const bool gaux4Clear = false; + +/* Uniforms */ + +#ifdef DEBUG_MODE + uniform sampler2D shadowtex1; + uniform sampler2D shadowcolor0; + uniform sampler2D colortex3; +#endif + +uniform sampler2D gaux3; +uniform sampler2D colortex1; +uniform float viewWidth; + +#if AA_TYPE == 3 + uniform float pixel_size_x; + uniform float pixel_size_y; +#endif + +/* Ins / Outs */ + +varying vec2 texcoord; +varying float exposure; + +/* Utility functions */ + +#if AA_TYPE == 3 + #include "/lib/post.glsl" +#endif + +#include "/lib/basic_utils.glsl" +#include "/lib/tone_maps.glsl" + +#ifdef COLOR_BLINDNESS + #include "/lib/color_blindness.glsl" +#endif + +#if CHROMA_ABER == 1 + #include "/lib/aberration.glsl" +#endif + +// MAIN FUNCTION ------------------ + +void main() { + #if CHROMA_ABER == 1 + vec3 block_color = color_aberration(); + #else + vec3 block_color = texture2D(colortex1, texcoord).rgb; + #if AA_TYPE == 3 + block_color = sharpen(colortex1, block_color, texcoord); + #endif + #endif + + block_color *= vec3(exposure); + + #if defined UNKNOWN_DIM + block_color = custom_sigmoid_alt(block_color); + #else + block_color = custom_sigmoid(block_color); + #endif + + // Color-grading ----- + // DEVELOPER: If your post processing effect only involves the current pixel, + // it can be placed here. For example: + + // Saturation: + // float actual_luma = luma(block_color); + // block_color = mix(vec3(actual_luma), block_color, 1.5); + + // Color-blindness correction + #ifdef COLOR_BLINDNESS + block_color = color_blindness(block_color); + #endif + + #ifdef DEBUG_MODE + // vec3 block_color; + if(texcoord.x < 0.5 && texcoord.y < 0.5) { + block_color = texture2D(shadowtex1, texcoord * 2.0).rrr; + } else if(texcoord.x >= 0.5 && texcoord.y >= 0.5) { + block_color = vec3(texture2D(gaux3, vec2(0.5)).r * 0.25); + } else if(texcoord.x < 0.5 && texcoord.y >= 0.5) { + block_color = texture2D(colortex1, ((texcoord - vec2(0.0, 0.5)) * 2.0)).rgb; + } else if(texcoord.x >= 0.5 && texcoord.y < 0.5) { + block_color = texture2D(shadowcolor0, ((texcoord - vec2(0.5, 0.0)) * 2.0)).rgb; + } else { + block_color = vec3(0.5); + } + + gl_FragData[0] = vec4(block_color, 1.0); + + #else + gl_FragData[0] = vec4(block_color, 1.0); + #endif +} \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/final_vertex.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/final_vertex.glsl new file mode 100644 index 0000000..fb3e342 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/final_vertex.glsl @@ -0,0 +1,35 @@ +#include "/lib/config.glsl" + +/* Color utils */ + +#ifdef THE_END + #include "/lib/color_utils_end.glsl" +#elif defined NETHER + #include "/lib/color_utils_nether.glsl" +#else + #include "/lib/color_utils.glsl" +#endif + +/* Uniforms */ + +uniform sampler2D gaux3; + +/* Ins / Outs */ + +varying vec2 texcoord; +varying float exposure; + +#include "/lib/luma.glsl" + +void main() { + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + texcoord = gl_MultiTexCoord0.xy; + + // Tonemaping --- + // x: Block, y: Sky --- + #if !defined UNKNOWN_DIM + exposure = texture2D(gaux3, vec2(0.5)).r; + #else + exposure = 1.0; + #endif +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/glint_blocks_fragment.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/glint_blocks_fragment.glsl new file mode 100644 index 0000000..3876edd --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/glint_blocks_fragment.glsl @@ -0,0 +1,19 @@ +#include "/lib/config.glsl" + +/* Uniforms */ + +uniform sampler2D tex; + +/* Ins / Outs */ + +varying vec2 texcoord; +varying vec4 tint_color; + +// MAIN FUNCTION ------------------ + +void main() { + // Toma el color puro del bloque + vec4 block_color = texture2D(tex, texcoord) * tint_color * 0.5; + + #include "/src/writebuffers.glsl" +} \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/glint_blocks_vertex.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/glint_blocks_vertex.glsl new file mode 100644 index 0000000..d826b44 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/glint_blocks_vertex.glsl @@ -0,0 +1,24 @@ +#include "/lib/config.glsl" + +/* Uniforms */ + +uniform mat4 gbufferModelViewInverse; +uniform mat4 gbufferProjectionInverse; + +/* Ins / Outs */ + +varying vec2 texcoord; +varying vec4 tint_color; + +#if AA_TYPE > 0 + #include "/src/taa_offset.glsl" +#endif + +// MAIN FUNCTION ------------------ + +void main() { + #include "/src/basiccoords_vertex.glsl" + #include "/src/position_vertex.glsl" + + tint_color = gl_Color; +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/line_blocks_fragment.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/line_blocks_fragment.glsl new file mode 100644 index 0000000..2238c24 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/line_blocks_fragment.glsl @@ -0,0 +1,13 @@ +/* Utility functions */ + +#include "/lib/config.glsl" + +/* Ins / Outs */ + +varying vec4 tint_color; + +void main() { + vec4 block_color = tint_color; + + #include "/src/writebuffers.glsl" +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/line_blocks_vertex.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/line_blocks_vertex.glsl new file mode 100644 index 0000000..edaf054 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/line_blocks_vertex.glsl @@ -0,0 +1,29 @@ +#include "/lib/config.glsl" + +/* Uniforms */ + +uniform float viewHeight; +uniform float viewWidth; + +/* Ins / Outs */ + +varying vec4 tint_color; + +/* Utility functions */ + +#if AA_TYPE > 1 + #include "/src/taa_offset.glsl" +#endif + +#include "/lib/mu_ftransform.glsl" + +// MAIN FUNCTION ------------------ + +void main() { + tint_color = gl_Color; + gl_Position = mu_ftransform(); + + #if AA_TYPE > 1 + gl_Position.xy += taa_offset * gl_Position.w; + #endif +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/prepare_fragment.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/prepare_fragment.glsl new file mode 100644 index 0000000..b90a83a --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/prepare_fragment.glsl @@ -0,0 +1,57 @@ +#include "/lib/config.glsl" + +/* Color utils */ + +#ifdef THE_END + #include "/lib/color_utils_end.glsl" +#elif defined NETHER + #include "/lib/color_utils_nether.glsl" +#else + #include "/lib/color_utils.glsl" +#endif + +/* Uniforms */ + +uniform mat4 gbufferProjectionInverse; +uniform float pixel_size_x; +uniform float pixel_size_y; +uniform float rainStrength; + +/* Ins / Outs */ + +varying vec3 up_vec; +varying vec3 hi_sky_color; +varying vec3 low_sky_color; + +/* Utility functions */ + +#include "/lib/dither.glsl" + +// MAIN FUNCTION ------------------ + +void main() { + #if defined THE_END || defined NETHER + vec3 block_color = ZENITH_DAY_COLOR; + #else + + #if AA_TYPE > 0 + float dither = shifted_dither13(gl_FragCoord.xy); + #else + float dither = dither13(gl_FragCoord.xy); + #endif + + dither = (dither - .5) * 0.0625; + + vec4 fragpos = + gbufferProjectionInverse * + (vec4(gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), gl_FragCoord.z, 1.0) * 2.0 - 1.0); + vec3 nfragpos = normalize(fragpos.xyz); + float n_u = clamp(dot(nfragpos, up_vec) + dither, 0.0, 1.0); + vec3 block_color = + mix(low_sky_color, hi_sky_color, smoothstep(0.0, 1.0, pow(n_u, 0.333))); + + block_color = xyz_to_rgb(block_color); + #endif + + #include "/src/writebuffers.glsl" +} \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/prepare_vertex.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/prepare_vertex.glsl new file mode 100644 index 0000000..c51bb3f --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/prepare_vertex.glsl @@ -0,0 +1,37 @@ +#include "/lib/config.glsl" + +/* Color utils */ + +#ifdef THE_END + #include "/lib/color_utils_end.glsl" +#elif defined NETHER + #include "/lib/color_utils_nether.glsl" +#else + #include "/lib/color_utils.glsl" +#endif + +/* Uniforms */ + +uniform mat4 gbufferModelView; +uniform float rainStrength; + +/* Ins / Outs */ + +varying vec3 up_vec; +varying vec3 hi_sky_color; +varying vec3 low_sky_color; + +/* Utility functions */ + +#include "/lib/luma.glsl" + +// MAIN FUNCTION ------------------ + +void main() { + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + + #include "/src/hi_sky.glsl" + #include "/src/low_sky.glsl" + + up_vec = normalize(gbufferModelView[1].xyz); +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/shadow_fragment.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/shadow_fragment.glsl new file mode 100644 index 0000000..f02adc1 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/shadow_fragment.glsl @@ -0,0 +1,27 @@ +#include "/lib/config.glsl" + +/* Uniforms */ + +uniform sampler2D tex; + +/* Ins / Outs */ + +varying vec2 texcoord; + +#ifdef COLORED_SHADOW + varying float is_water; +#endif + +// MAIN FUNCTION ------------------ + +void main() { + #ifdef COLORED_SHADOW + if(is_water > 0.98) + discard; // Is water + #endif + + vec4 block_color = texture2D(tex, texcoord); + + /* DRAWBUFFERS:0 */ + gl_FragData[0] = block_color; +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/shadow_vertex.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/shadow_vertex.glsl new file mode 100644 index 0000000..d446ffc --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/shadow_vertex.glsl @@ -0,0 +1,41 @@ +#include "/lib/config.glsl" + +/* Uniforms */ + +uniform mat4 shadowProjection; +uniform mat4 shadowProjectionInverse; +uniform mat4 shadowModelView; +uniform mat4 shadowModelViewInverse; + +/* Ins / Outs */ + +varying vec2 texcoord; + +#ifdef COLORED_SHADOW + varying float is_water; +#endif + +attribute vec4 mc_Entity; + +// MAIN FUNCTION ------------------ + +void main() { + texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + + vec4 position = shadowModelViewInverse * shadowProjectionInverse * gl_ModelViewProjectionMatrix * gl_Vertex; + gl_Position = shadowProjection * shadowModelView * position; + + float dist = length(gl_Position.xy); + float distortFactor = dist * SHADOW_DIST + (1.0 - SHADOW_DIST); + + gl_Position.xy *= 1.0 / distortFactor; + gl_Position.z = gl_Position.z * 0.2; + + #ifdef COLORED_SHADOW + is_water = 0.0; + + if(mc_Entity.x == ENTITY_WATER) { + is_water = 1.0; + } + #endif +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/skybasic_fragment.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/skybasic_fragment.glsl new file mode 100644 index 0000000..f70dd86 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/skybasic_fragment.glsl @@ -0,0 +1,92 @@ +#include "/lib/config.glsl" + +/* Color utils */ + +#ifdef THE_END + #include "/lib/color_utils_end.glsl" +#elif defined NETHER + #include "/lib/color_utils_nether.glsl" +#else + #include "/lib/color_utils.glsl" +#endif + +/* Uniforms */ + +uniform sampler2D gaux4; +uniform float pixel_size_x; +uniform float pixel_size_y; + +#ifdef NETHER + uniform vec3 fogColor; +#endif + +#if MC_VERSION < 11604 + uniform mat4 gbufferProjectionInverse; + uniform float viewWidth; + uniform float viewHeight; + uniform float rainStrength; +#endif + +/* Ins / Outs */ + +#if MC_VERSION < 11604 + varying vec3 up_vec; + varying vec3 hi_sky_color; + varying vec3 low_sky_color; +#endif + +varying vec4 star_data; + +/* Utility functions */ + +#if MC_VERSION < 11604 + #include "/lib/dither.glsl" +#endif + +// MAIN FUNCTION ------------------ + +void main() { + #if defined THE_END + #if MC_VERSION < 11604 + vec4 background_color = vec4(ZENITH_DAY_COLOR, 1.0); + #endif + vec4 block_color = vec4(0.0, 0.0, 0.0, 1.0); + #elif defined NETHER // Unused + #if MC_VERSION < 11604 + vec4 background_color = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); + #endif + vec4 block_color = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); + #else + #if MC_VERSION < 11604 + #if AA_TYPE > 0 + float dither = shifted_dither13(gl_FragCoord.xy); + #else + float dither = dither13(gl_FragCoord.xy); + #endif + + dither = (dither - .5) * 0.0625; + + vec4 fragpos = + gbufferProjectionInverse * + (vec4(gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), gl_FragCoord.z, 1.0) * 2.0 - 1.0); + vec3 nfragpos = normalize(fragpos.xyz); + float n_u = clamp(dot(nfragpos, up_vec) + dither, 0.0, 1.0); + vec4 background_color = vec4(mix(low_sky_color, hi_sky_color, smoothstep(0.0, 1.0, pow(n_u, 0.333))), 1.0); + background_color.rgb = xyz_to_rgb(background_color.rgb); + #else + + // Toma el color puro del bloque + vec4 background_color = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)); + #endif + + vec4 block_color = star_data; + + block_color = mix(background_color, block_color, block_color); + + #if MC_VERSION >= 11604 + block_color.a = star_data.a; + #endif + #endif + + #include "/src/writebuffers.glsl" +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/skybasic_vertex.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/skybasic_vertex.glsl new file mode 100644 index 0000000..12396b7 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/skybasic_vertex.glsl @@ -0,0 +1,64 @@ +#include "/lib/config.glsl" + +/* Color utils */ + +#if MC_VERSION < 11604 + #ifdef THE_END + #include "/lib/color_utils_end.glsl" + #elif defined NETHER + #include "/lib/color_utils_nether.glsl" + #else + #include "/lib/color_utils.glsl" + #endif +#endif + +/* Uniforms */ + +uniform mat4 gbufferModelView; + +#if MC_VERSION < 11604 + uniform float rainStrength; +#endif + +/* Ins / Outs */ + +#if MC_VERSION < 11604 + varying vec3 up_vec; + varying vec3 hi_sky_color; + varying vec3 low_sky_color; +#endif + +varying vec4 star_data; + +/* Utility functions */ + +#if AA_TYPE > 0 + #include "/src/taa_offset.glsl" +#endif + +#if MC_VERSION < 11604 + #include "/lib/luma.glsl" +#endif + +// MAIN FUNCTION ------------------ + +void main() { + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + + #if AA_TYPE > 0 + gl_Position.xy += taa_offset * gl_Position.w; + #endif + + star_data = vec4( + float(gl_Color.r == gl_Color.g && + gl_Color.g == gl_Color.b && + gl_Color.r > 0.0) * gl_Color.r + ); + + #if MC_VERSION < 11604 + up_vec = normalize(gbufferModelView[1].xyz); + + #include "/src/hi_sky.glsl" + #include "/src/low_sky.glsl" + #endif +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/skytextured_fragment.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/skytextured_fragment.glsl new file mode 100644 index 0000000..766f73c --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/skytextured_fragment.glsl @@ -0,0 +1,45 @@ +#include "/lib/config.glsl" + +/* Color utils */ + +#ifdef THE_END + #include "/lib/color_utils_end.glsl" +#elif defined NETHER + #include "/lib/color_utils_nether.glsl" +#else + #include "/lib/color_utils.glsl" +#endif + +/* Uniforms */ + +uniform sampler2D tex; + +#ifdef NETHER + uniform vec3 fogColor; +#endif + +/* Ins / Outs */ + +varying vec2 texcoord; +varying vec4 tint_color; +varying float sky_luma_correction; // Flat + +// MAIN FUNCTION ------------------ + +void main() { + #if defined THE_END + vec4 block_color = vec4(ZENITH_DAY_COLOR, 1.0); + vec3 background_color = ZENITH_DAY_COLOR; + #elif defined NETHER // Unused + vec4 background_color_full = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); + vec3 background_color = background_color_full.rgb; + vec4 block_color = vec4(background_color, 1.0); + #else + // Toma el color puro del bloque + vec4 block_color = texture2D(tex, texcoord) * tint_color; + + block_color.rgb *= sky_luma_correction; + #endif + + #include "/src/writebuffers.glsl" +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/skytextured_vertex.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/skytextured_vertex.glsl new file mode 100644 index 0000000..10006b1 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/skytextured_vertex.glsl @@ -0,0 +1,46 @@ +#include "/lib/config.glsl" + +/* Color utils */ + +#ifdef THE_END + #include "/lib/color_utils_end.glsl" +#elif defined NETHER + #include "/lib/color_utils_nether.glsl" +#else + #include "/lib/color_utils.glsl" +#endif + +/* Ins / Outs */ + +varying vec2 texcoord; +varying vec4 tint_color; +varying float sky_luma_correction; + +#if AA_TYPE > 0 + #include "/src/taa_offset.glsl" +#endif + +/* Utility functions */ + +#include "/lib/luma.glsl" + +// MAIN FUNCTION ------------------ + +void main() { + texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + tint_color = gl_Color; + + sky_luma_correction = luma(day_blend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR)); + + #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + sky_luma_correction = 3.5 / ((sky_luma_correction * -2.5) + 3.5); + #else + sky_luma_correction = 1.5 / ((sky_luma_correction * -2.5) + 3.5); + #endif + + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + + #if AA_TYPE > 0 + gl_Position.xy += taa_offset * gl_Position.w; + #endif +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/solid_blocks_fragment.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/solid_blocks_fragment.glsl new file mode 100644 index 0000000..7332668 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/solid_blocks_fragment.glsl @@ -0,0 +1,233 @@ +#include "/lib/config.glsl" + +// MAIN FUNCTION ------------------ + +#if defined THE_END + #include "/lib/color_utils_end.glsl" +#elif defined NETHER + #include "/lib/color_utils_nether.glsl" +#endif + +/* Uniforms */ + +uniform float viewWidth; +uniform float viewHeight; +uniform int frameCounter; +uniform sampler2D tex; +uniform int isEyeInWater; +uniform float nightVision; +uniform float rainStrength; +uniform float light_mix; +uniform float pixel_size_x; +uniform float pixel_size_y; +uniform sampler2D gaux4; + +#if defined DISTANT_HORIZONS + uniform float dhNearPlane; + uniform float far; +#endif + +#if defined GBUFFER_ENTITIES + uniform int entityId; + uniform vec4 entityColor; +#endif + +#ifdef NETHER + uniform vec3 fogColor; +#endif + +#if defined SHADOW_CASTING + uniform sampler2DShadow shadowtex1; + #if defined COLORED_SHADOW + uniform sampler2DShadow shadowtex0; + uniform sampler2D shadowcolor0; + #endif +#endif + +uniform float blindness; + +#if MC_VERSION >= 11900 + uniform float darknessFactor; + uniform float darknessLightFactor; +#endif + +#ifdef MATERIAL_GLOSS + // Don't remove +#endif + +#if defined MATERIAL_GLOSS && !defined NETHER + uniform int worldTime; + uniform vec3 moonPosition; + uniform vec3 sunPosition; + #if defined THE_END + uniform mat4 gbufferModelView; + #endif +#endif + +/* Ins / Outs */ + +varying vec2 texcoord; +varying vec4 tint_color; +varying float frog_adjust; +varying vec3 direct_light_color; +varying vec3 candle_color; +varying float direct_light_strength; +varying vec3 omni_light; + +#if defined GBUFFER_TERRAIN || defined GBUFFER_HAND + varying float emmisive_type; +#endif + +#ifdef FOLIAGE_V + varying float is_foliage; +#endif + +#if defined SHADOW_CASTING && !defined NETHER + varying vec3 shadow_pos; + varying float shadow_diffuse; +#endif + +#if defined MATERIAL_GLOSS && !defined NETHER + varying vec3 flat_normal; + varying vec3 sub_position3; + varying vec2 lmcoord_alt; + varying float gloss_factor; + varying float gloss_power; + varying float luma_factor; + varying float luma_power; +#endif + +/* Utility functions */ + +#if (defined SHADOW_CASTING && !defined NETHER) || defined DISTANT_HORIZONS + #include "/lib/dither.glsl" +#endif + +#if defined SHADOW_CASTING && !defined NETHER + #include "/lib/shadow_frag.glsl" +#endif + +#include "/lib/luma.glsl" + +#if defined MATERIAL_GLOSS && !defined NETHER + #include "/lib/material_gloss_fragment.glsl" +#endif + +void main() { + #if (defined SHADOW_CASTING && !defined NETHER) || defined DISTANT_HORIZONS + #if AA_TYPE > 0 + float dither = shifted_dither13(gl_FragCoord.xy); + // float dither = shifted_eclectic_dither13(gl_FragCoord.xy); + #else + float dither = r_dither(gl_FragCoord.xy); + #endif + #endif + // Avoid render in DH transition + #ifdef DISTANT_HORIZONS + float t = far - dhNearPlane; + float sup = t * TRANSITION_DH_SUP; + float inf = t * TRANSITION_DH_INF; + float umbral = (gl_FogFragCoord - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); + if(umbral > dither) { + discard; + return; + } + #endif + + // Toma el color puro del bloque + #if defined GBUFFER_ENTITIES + #if BLACK_ENTITY_FIX == 1 + vec4 block_color = texture2D(tex, texcoord); + if(block_color.a < 0.1 && entityId != 10101) { // Black entities bug workaround + discard; + } + block_color *= tint_color; + #else + vec4 block_color = texture2D(tex, texcoord) * tint_color; + #endif + #else + vec4 block_color = texture2D(tex, texcoord) * tint_color; + #endif + + float block_luma = luma(block_color.rgb); + + vec3 final_candle_color = candle_color; + #if defined GBUFFER_TERRAIN || defined GBUFFER_HAND + if(emmisive_type > 0.5) { + final_candle_color *= block_luma * 1.5; + } + #endif + + #ifdef GBUFFER_WEATHER + block_color.a *= .5; + #endif + + #if defined GBUFFER_ENTITIES + // Thunderbolt render + if(entityId == 10101) { + block_color.a = 1.0; + } + #endif + + #if defined SHADOW_CASTING && !defined NETHER + #if defined COLORED_SHADOW + vec3 shadow_c = get_colored_shadow(shadow_pos, dither); + shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); + #else + float shadow_c = get_shadow(shadow_pos, dither); + shadow_c = mix(shadow_c, 1.0, shadow_diffuse); + #endif + #else + float shadow_c = abs((light_mix * 2.0) - 1.0); + #endif + + #if defined GBUFFER_BEACONBEAM + block_color.rgb *= 1.5; + #elif defined GBUFFER_ENTITY_GLOW + block_color.rgb = + clamp(vec3(luma(block_color.rgb)) * vec3(0.75, 0.75, 1.5), vec3(0.3), vec3(1.0)); + #else + #if defined MATERIAL_GLOSS && !defined NETHER + float final_gloss_power = gloss_power; + block_luma *= luma_factor; + + if(luma_power < 0.0) { // Metallic + final_gloss_power -= (block_luma * 73.334); + } else { + block_luma = pow(block_luma, luma_power); + } + + float material_gloss_factor = material_gloss(reflect(normalize(sub_position3), flat_normal), lmcoord_alt, final_gloss_power, flat_normal) * gloss_factor; + + float material = material_gloss_factor * block_luma; + vec3 real_light = omni_light + + (shadow_c * ((direct_light_color * direct_light_strength) + (direct_light_color * material))) * (1.0 - (rainStrength * 0.75)) + + final_candle_color; + #else + vec3 real_light = omni_light + + (shadow_c * direct_light_color * direct_light_strength) * (1.0 - (rainStrength * 0.75)) + + final_candle_color; + #endif + + block_color.rgb *= mix(real_light, vec3(1.0), nightVision * 0.125); + block_color.rgb *= mix(vec3(1.0, 1.0, 1.0), vec3(NV_COLOR_R, NV_COLOR_G, NV_COLOR_B), nightVision); + #endif + + #if defined GBUFFER_ENTITIES + if(entityId == 10101) { + // Thunderbolt render + block_color = vec4(1.0, 1.0, 1.0, 0.5); + } else { + block_color.rgb = mix(block_color.rgb, entityColor.rgb, entityColor.a * .75); + } + #endif + + #if MC_VERSION < 11300 && defined GBUFFER_TEXTURED + block_color.rgb *= 1.5; + #endif + + block_color.rgba = clamp(block_color, vec4(0.0), vec4(100.0)); + + #include "/src/finalcolor.glsl" + #include "/src/writebuffers.glsl" +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/solid_blocks_vertex.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/solid_blocks_vertex.glsl new file mode 100644 index 0000000..c56d8cc --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/solid_blocks_vertex.glsl @@ -0,0 +1,184 @@ +#include "/lib/config.glsl" + +/* Color utils */ + +#if defined THE_END + #include "/lib/color_utils_end.glsl" +#elif defined NETHER + #include "/lib/color_utils_nether.glsl" +#else + #include "/lib/color_utils.glsl" +#endif + +/* Uniforms */ + +uniform float viewWidth; +uniform float viewHeight; +uniform vec3 sunPosition; +uniform int isEyeInWater; +uniform float light_mix; +uniform float far; +uniform float rainStrength; +uniform ivec2 eyeBrightnessSmooth; +uniform mat4 gbufferProjectionInverse; + +#ifdef DISTANT_HORIZONS + uniform int dhRenderDistance; +#endif + +#ifdef DYN_HAND_LIGHT + uniform int heldItemId; + uniform int heldItemId2; +#endif + +#ifdef UNKNOWN_DIM + uniform sampler2D lightmap; +#endif + +#if defined FOLIAGE_V || defined THE_END || defined NETHER + uniform mat4 gbufferModelView; +#endif + +#if defined FOLIAGE_V || defined SHADOW_CASTING || (defined MATERIAL_GLOSS && !defined NETHER) + uniform mat4 gbufferModelViewInverse; +#endif + +#if defined MATERIAL_GLOSS && !defined NETHER + uniform int worldTime; + uniform vec3 moonPosition; +#endif + +#if defined SHADOW_CASTING && !defined NETHER + uniform mat4 shadowModelView; + uniform mat4 shadowProjection; + uniform vec3 shadowLightPosition; +#endif + +#if WAVING == 1 + uniform vec3 cameraPosition; + uniform float frameTimeCounter; +#endif + +/* Ins / Outs */ + +varying vec2 texcoord; +varying vec4 tint_color; +varying float frog_adjust; +varying vec3 direct_light_color; +varying vec3 candle_color; +varying float direct_light_strength; +varying vec3 omni_light; + +#if defined GBUFFER_TERRAIN || defined GBUFFER_HAND + varying float emmisive_type; +#endif + +#ifdef FOLIAGE_V + varying float is_foliage; +#endif + +#if defined SHADOW_CASTING && !defined NETHER + varying vec3 shadow_pos; + varying float shadow_diffuse; +#endif + +#if defined MATERIAL_GLOSS && !defined NETHER + varying vec3 flat_normal; + varying vec3 sub_position3; + varying vec2 lmcoord_alt; + varying float gloss_factor; + varying float gloss_power; + varying float luma_factor; + varying float luma_power; +#endif + +#if defined FOLIAGE_V || defined GBUFFER_TERRAIN || defined GBUFFER_HAND || (defined MATERIAL_GLOSS && !defined NETHER) + attribute vec4 mc_Entity; +#endif + +#if WAVING == 1 + attribute vec2 mc_midTexCoord; +#endif + +/* Utility functions */ + +#if AA_TYPE > 0 + #include "/src/taa_offset.glsl" +#endif + +#include "/lib/basic_utils.glsl" + +#if defined SHADOW_CASTING && !defined NETHER + #include "/lib/shadow_vertex.glsl" +#endif + +#if WAVING == 1 + #include "/lib/vector_utils.glsl" +#endif + +#include "/lib/luma.glsl" + +// MAIN FUNCTION ------------------ + +void main() { + vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + vec3 hi_sky_color; + float visible_sky; + + #include "/src/basiccoords_vertex.glsl" + #include "/src/position_vertex.glsl" + #include "/src/hi_sky.glsl" + #include "/src/light_vertex.glsl" + #include "/src/fog_vertex.glsl" + + #if defined GBUFFER_TERRAIN || defined GBUFFER_HAND + emmisive_type = 0.0; + if(mc_Entity.x == ENTITY_EMMISIVE || mc_Entity.x == ENTITY_S_EMMISIVE) { + emmisive_type = 1.0; + } + #endif + + #if defined SHADOW_CASTING && !defined NETHER + #include "/src/shadow_src_vertex.glsl" + #endif + + #if defined FOLIAGE_V && !defined NETHER + #ifdef SHADOW_CASTING + if(is_foliage > .2) { + direct_light_strength = + mix( + direct_light_strength, + far_direct_light_strength, + clamp((gl_Position.z / SHADOW_LIMIT) * 2.0 - 0.5, 0.0, 1.0) + ); + } + #endif + #endif + + #if defined MATERIAL_GLOSS && !defined NETHER + luma_factor = 1.0; + luma_power = 2.0; + gloss_power = 6.0; + gloss_factor = 1.05; + + if(mc_Entity.x == ENTITY_SAND) { // Sand-like block + luma_power = 4.0; + } else if(mc_Entity.x == ENTITY_METAL) { // Metal-like block + luma_factor = 1.35; + luma_power = -1.0; // Metallic + gloss_power = 100.0; + } else if(mc_Entity.x == ENTITY_FABRIC) { // Fabric-like blocks + gloss_power = 3.0; + gloss_factor = 0.1; + } + + flat_normal = normal; + sub_position3 = sub_position.xyz; + + lmcoord_alt = lmcoord; + #endif + + #if defined GBUFFER_ENTITY_GLOW + gl_Position.z *= 0.01; + #endif +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/solid_dh_blocks_fragment.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/solid_dh_blocks_fragment.glsl new file mode 100644 index 0000000..b263777 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/solid_dh_blocks_fragment.glsl @@ -0,0 +1,84 @@ +#include "/lib/config.glsl" + +/* Uniforms */ + +uniform float light_mix; +uniform float nightVision; +uniform float rainStrength; +uniform float pixel_size_x; +uniform float pixel_size_y; +uniform sampler2D gaux4; +uniform float dhNearPlane; +uniform float dhFarPlane; +uniform float far; +uniform vec3 cameraPosition; +uniform int dhRenderDistance; + +#ifdef NETHER + uniform vec3 fogColor; +#endif + +/* Ins / Outs */ + +varying vec2 texcoord; +varying vec4 tint_color; +varying vec3 direct_light_color; +varying vec3 candle_color; +varying float direct_light_strength; +varying vec3 omni_light; +varying vec4 position; +varying float frog_adjust; + +/* Utility functions */ + +#include "/lib/luma.glsl" +#include "/lib/dither.glsl" + +// MAIN FUNCTION ------------------ + +void main() { + #if AA_TYPE > 0 + float dither = shifted_r_dither(gl_FragCoord.xy); + #else + float dither = r_dither(gl_FragCoord.xy); + #endif + + // Avoid render in DH transition + float t = far - dhNearPlane; + float sup = t * TRANSITION_DH_SUP; + float inf = t * TRANSITION_DH_INF; + float view_dist = length(position.xyz); + float umbral = (view_dist - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); + if (umbral < dither || view_dist > dhRenderDistance) { + discard; + return; + } + + vec4 block_color = tint_color; + + // Synthetic pseudo-texture + vec3 synth_pos = (position.xyz + cameraPosition) * 6.0; + synth_pos = floor(synth_pos + 0.01); + float synth_noise = (hash13(synth_pos) - 0.5) * 0.1; + block_color.rgb += vec3(synth_noise); + block_color.rgb = clamp(block_color.rgb, vec3(0.0), vec3(1.0)); + + float block_luma = luma(tint_color.rgb); + + vec3 final_candle_color = candle_color; + + float shadow_c = abs((light_mix * 2.0) - 1.0); + + vec3 real_light = + omni_light + + (shadow_c * direct_light_color * direct_light_strength) * (1.0 - (rainStrength * 0.75)) + + final_candle_color; + + block_color.rgb *= mix(real_light, vec3(1.0), nightVision * 0.125); + block_color.rgb *= mix(vec3(1.0, 1.0, 1.0), vec3(NV_COLOR_R, NV_COLOR_G, NV_COLOR_B), nightVision); + + block_color.rgba = clamp(block_color, vec4(0.0), vec4(100.0)); + + #include "/src/finalcolor_dh.glsl" + #include "/src/writebuffers.glsl" +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/solid_dh_blocks_vertex.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/solid_dh_blocks_vertex.glsl new file mode 100644 index 0000000..ce31782 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/solid_dh_blocks_vertex.glsl @@ -0,0 +1,65 @@ +#include "/lib/config.glsl" + +/* Color utils */ + +#if defined THE_END + #include "/lib/color_utils_end.glsl" +#elif defined NETHER + #include "/lib/color_utils_nether.glsl" +#else + #include "/lib/color_utils.glsl" +#endif + +/* Uniforms */ + +uniform ivec2 eyeBrightnessSmooth; +uniform mat4 dhProjection; +uniform mat4 gbufferModelView; +uniform mat4 gbufferModelViewInverse; +uniform vec3 sunPosition; +uniform int isEyeInWater; +uniform float light_mix; +uniform float far; +uniform float rainStrength; +uniform mat4 gbufferProjectionInverse; + +#ifdef DISTANT_HORIZONS + uniform int dhRenderDistance; +#endif + +#ifdef UNKNOWN_DIM + uniform sampler2D lightmap; +#endif + +/* Ins / Outs */ + +varying vec2 texcoord; +varying vec4 tint_color; +varying vec3 direct_light_color; +varying vec3 candle_color; +varying float direct_light_strength; +varying vec3 omni_light; +varying vec4 position; +varying float frog_adjust; + +/* Utility functions */ + +#if AA_TYPE > 0 + #include "/src/taa_offset.glsl" +#endif + +#include "/lib/basic_utils.glsl" +#include "/lib/luma.glsl" + +// MAIN FUNCTION ------------------ + +void main() { + vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + float visible_sky; + vec3 hi_sky_color; + + #include "/src/basiccoords_vertex_dh.glsl" + #include "/src/position_vertex_dh.glsl" + #include "/src/hi_sky.glsl" + #include "/src/light_vertex_dh.glsl" +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/solid_dh_water_fragment.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/solid_dh_water_fragment.glsl new file mode 100644 index 0000000..90629ad --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/solid_dh_water_fragment.glsl @@ -0,0 +1,233 @@ +#include "/lib/config.glsl" + +/* Color utils */ + +#ifdef THE_END + #include "/lib/color_utils_end.glsl" +#elif defined NETHER + #include "/lib/color_utils_nether.glsl" +#else + #include "/lib/color_utils.glsl" +#endif + +/* Uniforms */ + +uniform sampler2D tex; +uniform float pixel_size_x; +uniform float pixel_size_y; +uniform float near; +uniform float far; +uniform sampler2D gaux1; +uniform sampler2D gaux4; +uniform mat4 gbufferProjectionInverse; +uniform mat4 gbufferProjection; +uniform sampler2D noisetex; +uniform sampler2D depthtex0; +uniform sampler2D dhDepthTex1; +uniform float frameTimeCounter; +uniform int isEyeInWater; +uniform vec3 sunPosition; +uniform vec3 moonPosition; +uniform int worldTime; +uniform float nightVision; +uniform float rainStrength; +uniform float light_mix; +uniform ivec2 eyeBrightnessSmooth; +uniform float viewWidth; +uniform float viewHeight; +uniform float dhNearPlane; +uniform float dhFarPlane; +uniform vec3 cameraPosition; +uniform int dhRenderDistance; + +#if V_CLOUDS != 0 + uniform sampler2D gaux2; +#endif + +#ifdef NETHER + uniform vec3 fogColor; +#endif + +#if defined SHADOW_CASTING && !defined NETHER + uniform sampler2DShadow shadowtex1; + #if defined COLORED_SHADOW + uniform sampler2DShadow shadowtex0; + uniform sampler2D shadowcolor0; + #endif +#endif + +uniform float blindness; + +#if MC_VERSION >= 11900 + uniform float darknessFactor; + uniform float darknessLightFactor; +#endif + +/* Ins / Outs */ + +varying vec2 texcoord; +varying vec4 tint_color; +varying vec3 direct_light_color; +varying vec3 candle_color; +varying float direct_light_strength; +varying vec3 omni_light; +varying vec4 position; +varying vec3 fragposition; +varying vec3 tangent; +varying vec3 binormal; +varying vec3 water_normal; +varying vec3 hi_sky_color; +varying vec3 low_sky_color; +varying vec3 up_vec; +varying float visible_sky; +varying vec2 lmcoord; +varying float block_type; +varying float frog_adjust; + +/* Utility functions */ + +#include "/lib/projection_utils.glsl" +#include "/lib/basic_utils.glsl" +#include "/lib/dither.glsl" +#include "/lib/water_dh.glsl" +#include "/lib/depth.glsl" +#include "/lib/luma.glsl" + +void main() { + vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + vec3 real_light; + + #if AA_TYPE > 0 + float dither = shifted_r_dither(gl_FragCoord.xy); + #else + float dither = r_dither(gl_FragCoord.xy); + // dither = 1.0; + #endif + // Avoid render in DH transition + float t = far - dhNearPlane; + float sup = t * TRANSITION_DH_SUP; + float inf = t * TRANSITION_DH_INF; + float view_dist = length(position.xyz); + float umbral = (view_dist - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); + + float d = texture2D(depthtex0, vec2(gl_FragCoord.x / viewWidth, gl_FragCoord.y / viewHeight)).r; + float linear_d = ld(d); + + if(umbral < dither || linear_d < 0.9999 || view_dist > dhRenderDistance) { + discard; + return; + } + + #ifdef VANILLA_WATER + vec3 water_normal_base = vec3(0.0, 0.0, 1.0); + #else + vec3 world_pos = position.xyz + cameraPosition; + vec3 water_normal_base = normal_waves_dh(world_pos.xzy); + #endif + + vec3 surface_normal; + if(block_type < DH_BLOCK_WATER + 0.5 && block_type > DH_BLOCK_WATER - 0.5) { // Water + surface_normal = get_normals(water_normal_base, fragposition); + } else { + surface_normal = get_normals(vec3(0.0, 0.0, 1.0), fragposition); + } + + float normal_dot_eye = dot(surface_normal, normalize(fragposition)); + float fresnel = square_pow(1.0 + normal_dot_eye); + + vec3 reflect_water_vec = reflect(fragposition, surface_normal); + vec3 norm_reflect_water_vec = normalize(reflect_water_vec); + + vec3 sky_color_reflect; + if(isEyeInWater == 0 || isEyeInWater == 2) { + sky_color_reflect = mix(low_sky_color, hi_sky_color, sqrt(clamp(dot(norm_reflect_water_vec, up_vec), 0.0001, 1.0))); + } else { + sky_color_reflect = hi_sky_color * .5 * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667); + } + + sky_color_reflect = xyz_to_rgb(sky_color_reflect); + + #if !defined VANILLA_WATER && WATER_TEXTURE == 1 + vec4 block_color = vec4(0.1); + // Synthetic water texture + vec3 synth_pos = (position.xyz + cameraPosition) * 8.0; + synth_pos = floor(synth_pos + 0.01); + float noise = hash13(synth_pos); + noise *= noise; + noise *= noise; + noise *= noise; + float synth_noise = (noise * 0.3) + 0.5; + block_color.rgb += vec3(synth_noise); + #elif defined VANILLA_WATER + // Synthetic water texture + vec3 synth_pos = (position.xyz + cameraPosition) * 8.0; + synth_pos = floor(synth_pos + 0.01); + float noise = hash13(synth_pos); + noise *= noise; + noise *= noise; + float synth_noise = (noise * 0.227) + 0.773; + vec4 block_color = vec4(vec3(synth_noise), tint_color.a); + #else + vec4 block_color; + #endif + + if(block_type < DH_BLOCK_WATER + 0.5 && block_type > DH_BLOCK_WATER - 0.5) { // Water + #ifdef VANILLA_WATER + float shadow_c = abs((light_mix * 2.0) - 1.0); + + float fresnel_tex = luma(block_color.rgb); + + real_light = omni_light + + (direct_light_strength * shadow_c * direct_light_color) * (1.0 - rainStrength * 0.75) + + candle_color; + + real_light *= (fresnel_tex * 2.0) - 0.25; + + block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125) * tint_color.rgb; + + block_color.rgb = water_shader_dh(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); + + block_color.a = sqrt(block_color.a); + #else + #if WATER_TEXTURE == 1 + float water_texture = luma(block_color.rgb); + #else + float water_texture = 1.0; + #endif + + real_light = omni_light + + (direct_light_strength * visible_sky * direct_light_color) * (1.0 - rainStrength * 0.75) + + candle_color; + + #if WATER_COLOR_SOURCE == 0 + block_color.rgb = water_texture * real_light * WATER_COLOR; + #elif WATER_COLOR_SOURCE == 1 + block_color.rgb = 0.3 * water_texture * real_light * tint_color.rgb; + #endif + + block_color = vec4(refraction(fragposition, block_color.rgb, water_normal_base), 1.0); + + #if WATER_TEXTURE == 1 + fresnel = clamp(fresnel * (water_texture * water_texture + 0.5), 0.0, 1.0); + #endif + + block_color.rgb = water_shader_dh(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); + + #endif + + } else { // Otros translúcidos + + block_color = tint_color; + + float shadow_c = abs((light_mix * 2.0) - 1.0); + + real_light = omni_light + + (direct_light_strength * shadow_c * direct_light_color) * (1.0 - rainStrength * 0.75) + + candle_color; + + block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125); + } + + #include "/src/finalcolor_dh.glsl" + #include "/src/writebuffers.glsl" +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/solid_dh_water_vertex.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/solid_dh_water_vertex.glsl new file mode 100644 index 0000000..f59b4fe --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/solid_dh_water_vertex.glsl @@ -0,0 +1,87 @@ +#include "/lib/config.glsl" + +/* Color utils */ + +#if defined THE_END + #include "/lib/color_utils_end.glsl" +#elif defined NETHER + #include "/lib/color_utils_nether.glsl" +#else + #include "/lib/color_utils.glsl" +#endif + +/* Uniforms */ + +uniform ivec2 eyeBrightnessSmooth; +uniform mat4 dhProjection; +uniform mat4 gbufferModelView; +uniform mat4 gbufferModelViewInverse; +uniform vec3 sunPosition; +uniform int isEyeInWater; +uniform float light_mix; +uniform float far; +uniform float rainStrength; +uniform mat4 gbufferProjectionInverse; + +#ifdef DISTANT_HORIZONS + uniform int dhRenderDistance; +#endif + +#ifdef UNKNOWN_DIM + uniform sampler2D lightmap; +#endif + +/* Ins / Outs */ + +varying vec2 texcoord; +varying vec4 tint_color; +varying vec3 direct_light_color; +varying vec3 candle_color; +varying float direct_light_strength; +varying vec3 omni_light; +varying vec4 position; +varying vec3 fragposition; +varying vec3 tangent; +varying vec3 binormal; +varying vec3 water_normal; +varying vec3 hi_sky_color; +varying vec3 low_sky_color; +varying vec3 up_vec; +varying float visible_sky; +varying vec2 lmcoord; +varying float block_type; +varying float frog_adjust; + +/* Utility functions */ + +#if AA_TYPE > 0 + #include "/src/taa_offset.glsl" +#endif + +#include "/lib/basic_utils.glsl" +#include "/lib/luma.glsl" + +// MAIN FUNCTION ------------------ + +void main() { + vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + + #include "/src/basiccoords_vertex_dh.glsl" + #include "/src/position_vertex_dh.glsl" + #include "/src/hi_sky.glsl" + #include "/src/low_sky.glsl" + #include "/src/light_vertex_dh.glsl" + + vec4 position2 = gl_ModelViewMatrix * gl_Vertex; + fragposition = position2.xyz; + + binormal = normalize(gbufferModelView[2].xyz); + tangent = normalize(gbufferModelView[0].xyz); + water_normal = normal; + + up_vec = normalize(gbufferModelView[1].xyz); + + if(dhMaterialId == DH_BLOCK_WATER) { // Water + block_type = float(DH_BLOCK_WATER); + } +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/spidereyes_blocks_fragment.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/spidereyes_blocks_fragment.glsl new file mode 100644 index 0000000..129bb08 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/spidereyes_blocks_fragment.glsl @@ -0,0 +1,18 @@ +#include "/lib/config.glsl" + +/* Uniforms */ + +uniform sampler2D tex; + +/* Ins / Outs */ + +varying vec2 texcoord; + +// MAIN FUNCTION ------------------ + +void main() { + // Toma el color puro del bloque + vec4 block_color = texture2D(tex, texcoord); + + #include "/src/writebuffers.glsl" +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/spidereyes_blocks_vertex.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/spidereyes_blocks_vertex.glsl new file mode 100644 index 0000000..e796144 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/spidereyes_blocks_vertex.glsl @@ -0,0 +1,27 @@ +#include "/lib/config.glsl" + +/* Uniforms */ + +uniform mat4 gbufferProjectionInverse; + +#if defined SHADOW_CASTING && !defined NETHER + uniform mat4 gbufferModelViewInverse; +#endif + +/* Ins / Outs */ + +varying vec2 texcoord; + +/* Utility functions */ + +#if AA_TYPE > 0 + #include "/src/taa_offset.glsl" +#endif + +// MAIN FUNCTION ------------------ + +void main() { + texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + + #include "/src/position_vertex.glsl" +} \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/water_blocks_fragment.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/water_blocks_fragment.glsl new file mode 100644 index 0000000..413d07e --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/water_blocks_fragment.glsl @@ -0,0 +1,276 @@ +#include "/lib/config.glsl" + +/* Color utils */ + +#ifdef THE_END + #include "/lib/color_utils_end.glsl" +#elif defined NETHER + #include "/lib/color_utils_nether.glsl" +#else + #include "/lib/color_utils.glsl" +#endif + +/* Uniforms */ + +uniform sampler2D tex; +uniform float pixel_size_x; +uniform float pixel_size_y; +uniform float near; +uniform float far; +uniform sampler2D gaux1; +uniform mat4 gbufferProjectionInverse; +uniform mat4 gbufferProjection; +uniform sampler2D noisetex; +uniform sampler2D depthtex0; +uniform sampler2D depthtex1; +uniform float frameTimeCounter; +uniform int isEyeInWater; +uniform vec3 sunPosition; +uniform vec3 moonPosition; +uniform int worldTime; +uniform float nightVision; +uniform float rainStrength; +uniform float light_mix; +uniform ivec2 eyeBrightnessSmooth; +uniform sampler2D gaux4; + +#if defined DISTANT_HORIZONS + uniform float dhNearPlane; + uniform float dhFarPlane; + uniform sampler2D dhDepthTex1; +#endif + +#if V_CLOUDS != 0 + uniform sampler2D gaux2; +#endif + +#ifdef NETHER + uniform vec3 fogColor; +#endif + +#if defined SHADOW_CASTING && !defined NETHER + uniform sampler2DShadow shadowtex1; + #if defined COLORED_SHADOW + uniform sampler2DShadow shadowtex0; + uniform sampler2D shadowcolor0; + #endif +#endif + +#ifdef CLOUD_REFLECTION + // Don't remove +#endif + +#if defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER + uniform vec3 cameraPosition; + uniform mat4 gbufferModelViewInverse; +#endif + +uniform float blindness; + +#if MC_VERSION >= 11900 + uniform float darknessFactor; + uniform float darknessLightFactor; +#endif + +/* Ins / Outs */ + +varying vec2 texcoord; +varying vec2 lmcoord; +varying vec4 tint_color; +varying float frog_adjust; +varying vec3 water_normal; +varying float block_type; +varying vec4 worldposition; +varying vec3 fragposition; +varying vec3 tangent; +varying vec3 binormal; +varying vec3 direct_light_color; +varying vec3 candle_color; +varying float direct_light_strength; +varying vec3 omni_light; +varying float visible_sky; +varying vec3 up_vec; +varying vec3 hi_sky_color; +varying vec3 low_sky_color; + +#if defined SHADOW_CASTING && !defined NETHER + varying vec3 shadow_pos; + varying float shadow_diffuse; +#endif + +#if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY + varying float umbral; + varying vec3 cloud_color; + varying vec3 dark_cloud_color; +#endif + +/* Utility functions */ + +#include "/lib/projection_utils.glsl" +#include "/lib/basic_utils.glsl" +#include "/lib/dither.glsl" +#include "/lib/water.glsl" + +#if defined SHADOW_CASTING && !defined NETHER + #include "/lib/shadow_frag.glsl" +#endif + +#include "/lib/luma.glsl" + +#if defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER + #include "/lib/volumetric_clouds.glsl" +#endif + +// MAIN FUNCTION ------------------ + +void main() { + vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + + #if SHADOW_TYPE == 1 || defined DISTANT_HORIZONS || (defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER) || SSR_TYPE > 0 + #if AA_TYPE > 0 + float dither = shifted_r_dither(gl_FragCoord.xy); + #else + float dither = r_dither(gl_FragCoord.xy); + // dither = 0.0; + #endif + #else + float dither = 1.0; + #endif + + // vec4 block_color = texture2D(tex, texcoord); + vec4 block_color; + vec3 real_light; + + #ifdef VANILLA_WATER + vec3 water_normal_base = vec3(0.0, 0.0, 1.0); + #else + vec3 water_normal_base = normal_waves(worldposition.xzy); + #endif + + vec3 surface_normal; + if(block_type > 2.5) { // Water + surface_normal = get_normals(water_normal_base, fragposition); + } else { + surface_normal = get_normals(vec3(0.0, 0.0, 1.0), fragposition); + } + + float normal_dot_eye = dot(surface_normal, normalize(fragposition)); + float fresnel = square_pow(1.0 + normal_dot_eye); + + vec3 reflect_water_vec = reflect(fragposition, surface_normal); + vec3 norm_reflect_water_vec = normalize(reflect_water_vec); + + vec3 sky_color_reflect; + if(isEyeInWater == 0 || isEyeInWater == 2) { + sky_color_reflect = mix(low_sky_color, hi_sky_color, sqrt(clamp(dot(norm_reflect_water_vec, up_vec), 0.0001, 1.0))); + } else { + sky_color_reflect = hi_sky_color * .5 * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667); + } + + sky_color_reflect = xyz_to_rgb(sky_color_reflect); + + #if defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER + sky_color_reflect = get_cloud(normalize((gbufferModelViewInverse * vec4(reflect_water_vec * far, 1.0)).xyz), sky_color_reflect, 0.0, dither, worldposition.xyz, int(CLOUD_STEPS_AVG * 0.5), umbral, cloud_color, dark_cloud_color); + #endif + if(block_type > 2.5) { // Water + #ifdef VANILLA_WATER + block_color = texture2D(tex, texcoord); + #if defined SHADOW_CASTING && !defined NETHER + #if defined COLORED_SHADOW + vec3 shadow_c = get_colored_shadow(shadow_pos, dither); + shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); + #else + float shadow_c = get_shadow(shadow_pos, dither); + shadow_c = mix(shadow_c, 1.0, shadow_diffuse); + #endif + #else + float shadow_c = abs((light_mix * 2.0) - 1.0); + #endif + + float fresnel_tex = luma(block_color.rgb); + + real_light = omni_light + + (direct_light_strength * shadow_c * direct_light_color) * (1.0 - rainStrength * 0.75) + + candle_color; + + real_light *= (fresnel_tex * 2.0) - 0.25; + + block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125) * tint_color.rgb; + + block_color.rgb = water_shader(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); + + block_color.a = sqrt(block_color.a); + #else + #if WATER_TEXTURE == 1 + block_color = texture2D(tex, texcoord); + float water_texture = luma(block_color.rgb); + #else + float water_texture = 1.0; + #endif + + real_light = omni_light + + (direct_light_strength * visible_sky * direct_light_color) * (1.0 - rainStrength * 0.75) + + candle_color; + + #if WATER_COLOR_SOURCE == 0 + block_color.rgb = water_texture * real_light * WATER_COLOR; + #elif WATER_COLOR_SOURCE == 1 + block_color.rgb = 0.3 * water_texture * real_light * tint_color.rgb; + #endif + + block_color = vec4(refraction(fragposition, block_color.rgb, water_normal_base), 1.0); + + #if WATER_TEXTURE == 1 + water_texture += 0.25; + water_texture *= water_texture; + water_texture *= water_texture; + fresnel = clamp(fresnel * (water_texture), 0.0, 1.0); + #endif + + block_color.rgb = water_shader(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); + + #endif + + } else { // Otros translúcidos + block_color = texture2D(tex, texcoord); + + block_color *= tint_color; + + #if defined SHADOW_CASTING && !defined NETHER + #if defined COLORED_SHADOW + vec3 shadow_c = get_colored_shadow(shadow_pos, dither); + shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); + #else + float shadow_c = get_shadow(shadow_pos, dither); + shadow_c = mix(shadow_c, 1.0, shadow_diffuse); + #endif + #else + float shadow_c = abs((light_mix * 2.0) - 1.0); + #endif + + real_light = omni_light + + (direct_light_strength * shadow_c * direct_light_color) * (1.0 - rainStrength * 0.75) + + candle_color; + + block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125); + + if(block_type > 1.5) { // Glass + block_color = cristal_shader(fragposition, water_normal, block_color, sky_color_reflect, fresnel * fresnel, visible_sky, dither, direct_light_color); + } + } + + // Avoid render in DH transition + #ifdef DISTANT_HORIZONS + float t = far - dhNearPlane; + float sup = t * TRANSITION_DH_SUP; + float inf = t * TRANSITION_DH_INF; + float draw_umbral = (gl_FogFragCoord - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); + if(draw_umbral > dither) { + discard; + return; + } + #endif + + #include "/src/finalcolor.glsl" + #include "/src/writebuffers.glsl" +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/water_blocks_vertex.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/water_blocks_vertex.glsl new file mode 100644 index 0000000..f874b04 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/common/water_blocks_vertex.glsl @@ -0,0 +1,135 @@ +#include "/lib/config.glsl" + +/* Color utils */ + +#ifdef THE_END + #include "/lib/color_utils_end.glsl" +#elif defined NETHER + #include "/lib/color_utils_nether.glsl" +#else + #include "/lib/color_utils.glsl" +#endif + +/* Uniforms */ + +uniform vec3 sunPosition; +uniform int isEyeInWater; +uniform float light_mix; +uniform float far; +uniform float nightVision; +uniform ivec2 eyeBrightnessSmooth; +uniform mat4 gbufferModelView; +uniform mat4 gbufferModelViewInverse; +uniform vec3 cameraPosition; +uniform float rainStrength; +uniform mat4 gbufferProjectionInverse; + +#ifdef DISTANT_HORIZONS + uniform int dhRenderDistance; +#endif + +#ifdef DYN_HAND_LIGHT + uniform int heldItemId; + uniform int heldItemId2; +#endif + +#ifdef UNKNOWN_DIM + uniform sampler2D lightmap; +#endif + +#if defined SHADOW_CASTING && !defined NETHER + uniform mat4 shadowModelView; + uniform mat4 shadowProjection; + uniform vec3 shadowLightPosition; +#endif + +/* Ins / Outs */ + +varying vec2 texcoord; +varying vec2 lmcoord; +varying vec4 tint_color; +varying float frog_adjust; +varying vec3 water_normal; +varying float block_type; +varying vec4 worldposition; +varying vec3 fragposition; +varying vec3 tangent; +varying vec3 binormal; +varying vec3 direct_light_color; +varying vec3 candle_color; +varying float direct_light_strength; +varying vec3 omni_light; +varying float visible_sky; +varying vec3 up_vec; +varying vec3 hi_sky_color; +varying vec3 low_sky_color; + +#if defined SHADOW_CASTING && !defined NETHER + varying vec3 shadow_pos; + varying float shadow_diffuse; +#endif + +#if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY + varying float umbral; + varying vec3 cloud_color; + varying vec3 dark_cloud_color; +#endif + +attribute vec4 mc_Entity; +attribute vec4 at_tangent; + +/* Utility functions */ + +#if AA_TYPE > 1 + #include "/src/taa_offset.glsl" +#endif + +#include "/lib/basic_utils.glsl" + +#if defined SHADOW_CASTING && !defined NETHER + #include "/lib/shadow_vertex.glsl" +#endif + +/* Utility functions */ + +#include "/lib/luma.glsl" + +// MAIN FUNCTION ------------------ + +void main() { + vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + + #include "/src/basiccoords_vertex.glsl" + #include "/src/position_vertex_water.glsl" + + // Sky color calculation + #include "/src/hi_sky.glsl" + #include "/src/low_sky.glsl" + + #include "/src/light_vertex.glsl" + + water_normal = normal; + + tangent = normalize(gl_NormalMatrix * at_tangent.xyz); + binormal = normalize(gl_NormalMatrix * -cross(gl_Normal, at_tangent.xyz)); + + // Special entities + block_type = 0.0; // 3 - Water, 2 - Glass, ? - Other + if(mc_Entity.x == ENTITY_WATER) { // Water + block_type = 3.0; + } else if(mc_Entity.x == ENTITY_STAINED) { // Glass + block_type = 2.0; + } + + up_vec = normalize(gbufferModelView[1].xyz); + + #include "/src/fog_vertex.glsl" + + #if defined SHADOW_CASTING && !defined NETHER + #include "/src/shadow_src_vertex.glsl" + #endif + + #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY + #include "/lib/volumetric_clouds_vertex.glsl" + #endif +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/composite.fsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/composite.fsh new file mode 100644 index 0000000..532802c --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/composite.fsh @@ -0,0 +1,15 @@ +#version 120 +/* MakeUp - composite.fsh +Render: Bloom and volumetric light + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define COMPOSITE_SHADER + +#include "/common/composite_fragment.glsl" \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/composite.vsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/composite.vsh new file mode 100644 index 0000000..d4827e4 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/composite.vsh @@ -0,0 +1,15 @@ +#version 120 +/* MakeUp - composite.fsh +Render: Bloom and volumetric light + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define COMPOSITE_SHADER + +#include "/common/composite_vertex.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/composite1.fsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/composite1.fsh new file mode 100644 index 0000000..bbe7088 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/composite1.fsh @@ -0,0 +1,15 @@ +#version 120 +/* MakeUp - composite1.fsh +Render: Bloom and DoF + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define COMPOSITE1_SHADER + +#include "/common/composite1_fragment.glsl" \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/composite1.vsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/composite1.vsh new file mode 100644 index 0000000..fd4c901 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/composite1.vsh @@ -0,0 +1,15 @@ +#version 120 +/* MakeUp - composite1.fsh +Render: Bloom and DoF + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define COMPOSITE1_SHADER + +#include "/common/composite1_vertex.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/composite2.fsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/composite2.fsh new file mode 100644 index 0000000..547b766 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/composite2.fsh @@ -0,0 +1,16 @@ +#version 120 +/* MakeUp - composite1.fsh +Render: Antialiasing and motion blur + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define COMPOSITE2_SHADER +#define NO_SHADOWS + +#include "/common/composite2_fragment.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/composite2.vsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/composite2.vsh new file mode 100644 index 0000000..2143e4a --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/composite2.vsh @@ -0,0 +1,15 @@ +#version 120 +/* MakeUp - composite1.fsh +Render: Antialiasing and motion blur + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define COMPOSITE2_SHADER + +#include "/common/composite2_vertex.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/deferred.fsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/deferred.fsh new file mode 100644 index 0000000..55e5274 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/deferred.fsh @@ -0,0 +1,16 @@ +#version 120 +/* MakeUp - deferred.fsh +Render: Ambient occlusion, volumetric clouds + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define DEFERRED_SHADER +#define NO_SHADOWS + +#include "/common/deferred_fragment.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/deferred.vsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/deferred.vsh new file mode 100644 index 0000000..80e340e --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/deferred.vsh @@ -0,0 +1,15 @@ +#version 120 +/* MakeUp - deferred.vsh +Render: Ambient occlusion, volumetric clouds + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define DEFERRED_SHADER + +#include "/common/deferred_vertex.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/entity.properties b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/entity.properties new file mode 100644 index 0000000..5fe704f --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/entity.properties @@ -0,0 +1,3 @@ +# MakeUp - entity.properties + +entity.10101=minecraft:lightning_bolt diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/final.fsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/final.fsh new file mode 100644 index 0000000..a824b8f --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/final.fsh @@ -0,0 +1,16 @@ +#version 120 +/* MakeUp - final.fsh +Render: Final renderer + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define FINAL_SHADER +#define NO_SHADOWS + +#include "/common/final_fragment.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/final.vsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/final.vsh new file mode 100644 index 0000000..7b2ef90 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/final.vsh @@ -0,0 +1,16 @@ +#version 120 +/* MakeUp - final.fsh +Render: Final renderer + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define FINAL_SHADER + +/* Config, uniforms, ins, outs */ +#include "/common/final_vertex.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_armor_glint.fsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_armor_glint.fsh new file mode 100644 index 0000000..14f201c --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_armor_glint.fsh @@ -0,0 +1,16 @@ +#version 120 +/* MakeUp - gbuffers_armor_glint.fsh +Render: Glow objects + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_ARMOR_GLINT +#define SHADER_BASIC + +#include "/common/glint_blocks_fragment.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_armor_glint.vsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_armor_glint.vsh new file mode 100644 index 0000000..ac9fc90 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_armor_glint.vsh @@ -0,0 +1,17 @@ +#version 120 +/* MakeUp - gbuffers_armor_glint.vsh +Render: Glow objects + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_ARMOR_GLINT +#define ENTITY_GLINT +#define SHADER_BASIC + +#include "/common/glint_blocks_vertex.glsl" \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_basic.fsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_basic.fsh new file mode 100644 index 0000000..c667a17 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_basic.fsh @@ -0,0 +1,16 @@ +#version 120 +/* MakeUp - gbuffers_basic.fsh +Render: Basic elements - lines + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_BASIC +#define NO_SHADOWS + +#include "/common/basic_blocks_fragment.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_basic.vsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_basic.vsh new file mode 100644 index 0000000..ae248f4 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_basic.vsh @@ -0,0 +1,17 @@ +#version 120 +/* MakeUp - gbuffers_basic.vsh +Render: Basic elements - lines + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_BASIC +#define NO_SHADOWS +#define SHADER_LINE + +#include "/common/basic_blocks_vertex.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_beaconbeam.fsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_beaconbeam.fsh new file mode 100644 index 0000000..258594a --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_beaconbeam.fsh @@ -0,0 +1,15 @@ +#version 120 +/* MakeUp - gbuffers_beaconbeam.fsh +Render: BEacon beam + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_BEACONBEAM + +#include "/common/solid_blocks_fragment.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_beaconbeam.vsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_beaconbeam.vsh new file mode 100644 index 0000000..5858935 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_beaconbeam.vsh @@ -0,0 +1,15 @@ +#version 120 +/* MakeUp - gbuffers_beaconbeam.vsh +Render: Beacon beam + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_BEACONBEAM + +#include "/common/solid_blocks_vertex.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_block.fsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_block.fsh new file mode 100644 index 0000000..ba0ebcd --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_block.fsh @@ -0,0 +1,15 @@ +#version 120 +/* MakeUp - gbuffers_block.fsh +Render: Generic blocks + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_BLOCK + +#include "/common/solid_blocks_fragment.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_block.vsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_block.vsh new file mode 100644 index 0000000..a5e84eb --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_block.vsh @@ -0,0 +1,15 @@ +#version 120 +/* MakeUp - gbuffers_block.vsh +Render: Generic block + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_BLOCK + +#include "/common/solid_blocks_vertex.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_clouds.fsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_clouds.fsh new file mode 100644 index 0000000..b6b3813 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_clouds.fsh @@ -0,0 +1,17 @@ +#version 120 +/* MakeUp - gbuffers_clouds.fsh +Render: sky, clouds + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_CLOUDS +#define NO_SHADOWS +#define SPECIAL_TRANS + +#include "/common/clouds_blocks_fragment.glsl" \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_clouds.vsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_clouds.vsh new file mode 100644 index 0000000..95a771e --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_clouds.vsh @@ -0,0 +1,16 @@ +#version 120 +/* MakeUp - gbuffers_clouds.vsh +Render: sky, clouds + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_CLOUDS +#define NO_SHADOWS + +#include "/common/clouds_blocks_vertex.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_damagedblock.fsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_damagedblock.fsh new file mode 100644 index 0000000..93d9c83 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_damagedblock.fsh @@ -0,0 +1,16 @@ +#version 120 +/* MakeUp - gbuffers_damagedblock.fsh +Render: Damaged block effect + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define NO_SHADOWS +#define GBUFFER_DAMAGE + +#include "/common/damage_fragment.glsl" \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_damagedblock.vsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_damagedblock.vsh new file mode 100644 index 0000000..67c448e --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_damagedblock.vsh @@ -0,0 +1,16 @@ +#version 120 +/* MakeUp - gbuffers_damagedblock.vsh +Render: Damaged block effect + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define NO_SHADOWS +#define GBUFFER_DAMAGE + +#include "/common/damage_vertex.glsl" \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_entities.fsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_entities.fsh new file mode 100644 index 0000000..61123f0 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_entities.fsh @@ -0,0 +1,15 @@ +#version 120 +/* MakeUp - gbuffers_entities.fsh +Render: Droped objects, mobs and things like that + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_ENTITIES + +#include "/common/solid_blocks_fragment.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_entities.vsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_entities.vsh new file mode 100644 index 0000000..90a3c6e --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_entities.vsh @@ -0,0 +1,16 @@ +#version 120 +/* MakeUp - gbuffers_entities.vsh +Render: Droped objects, mobs and things like that + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_ENTITIES +#define CAVEENTITY_V + +#include "/common/solid_blocks_vertex.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_entities_glowing.fsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_entities_glowing.fsh new file mode 100644 index 0000000..e19f7d8 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_entities_glowing.fsh @@ -0,0 +1,15 @@ +#version 120 +/* MakeUp - gbuffers_entities_glowing.fsh +Render: Droped objects, mobs and things like that... glowing + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_ENTITIES +#define GBUFFER_ENTITY_GLOW + +#include "/common/solid_blocks_fragment.glsl" + diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_entities_glowing.vsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_entities_glowing.vsh new file mode 100644 index 0000000..23fc1df --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_entities_glowing.vsh @@ -0,0 +1,15 @@ +#version 120 +/* MakeUp - gbuffers_entities_glowing.vsh +Render: Droped objects, mobs and things like that... glowing + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_ENTITIES +#define GBUFFER_ENTITY_GLOW +#define CAVEENTITY_V + +#include "/common/solid_blocks_vertex.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_hand.fsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_hand.fsh new file mode 100644 index 0000000..e8664a9 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_hand.fsh @@ -0,0 +1,15 @@ +#version 120 +/* MakeUp - gbuffers_hand.fsh +Render: Hand opaque objects + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_HAND + +#include "/common/solid_blocks_fragment.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_hand.vsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_hand.vsh new file mode 100644 index 0000000..128007d --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_hand.vsh @@ -0,0 +1,15 @@ +#version 120 +/* MakeUp - gbuffers_hand.vsh +Render: Hand opaque objects + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_HAND + +#include "/common/solid_blocks_vertex.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_hand_water.fsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_hand_water.fsh new file mode 100644 index 0000000..d88297e --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_hand_water.fsh @@ -0,0 +1,16 @@ +#version 120 +/* MakeUp - gbuffers_hand_water.fsh +Render: Translucent hand objects + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_HAND_WATER +#define SPECIAL_TRANS + +#include "/common/solid_blocks_fragment.glsl" \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_hand_water.vsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_hand_water.vsh new file mode 100644 index 0000000..9cf9d02 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_hand_water.vsh @@ -0,0 +1,15 @@ +#version 120 +/* MakeUp - gbuffers_hand_water.vsh +Render: Translucent hand objects + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_HAND_WATER + +#include "/common/solid_blocks_vertex.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_line.fsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_line.fsh new file mode 100644 index 0000000..43ef5a5 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_line.fsh @@ -0,0 +1,16 @@ +#version 120 +/* MakeUp - gbuffers_line.vsh +Render: Render lines + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_LINE +#define NO_SHADOWS + +#include "/common/line_blocks_fragment.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_line.vsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_line.vsh new file mode 100644 index 0000000..2c7e2d7 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_line.vsh @@ -0,0 +1,18 @@ +#version 120 +/* MakeUp - gbuffers_line.vsh +Render: Render lines + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_LINE +#define NO_SHADOWS +#define SHADER_BASIC +#define SHADER_LINE + +#include "/common/line_blocks_vertex.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_skybasic.fsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_skybasic.fsh new file mode 100644 index 0000000..fe7df7d --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_skybasic.fsh @@ -0,0 +1,16 @@ +#version 120 +/* MakeUp - gbuffers_skybasic.fsh +Render: Sky + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_SKYBASIC +#define NO_SHADOWS + +#include "/common/skybasic_fragment.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_skybasic.vsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_skybasic.vsh new file mode 100644 index 0000000..a2de150 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_skybasic.vsh @@ -0,0 +1,16 @@ +#version 120 +/* MakeUp - gbuffers_skybasic.vsh +Render: Sky + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_SKYBASIC +#define NO_SHADOWS + +#include "/common/skybasic_vertex.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_skytextured.fsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_skytextured.fsh new file mode 100644 index 0000000..70961f1 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_skytextured.fsh @@ -0,0 +1,16 @@ +#version 120 +/* MakeUp - gbuffers_skytextured.fsh +Render: sun, moon + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_SKYTEXTURED +#define NO_SHADOWS + +#include "/common/skytextured_fragment.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_skytextured.vsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_skytextured.vsh new file mode 100644 index 0000000..d40750a --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_skytextured.vsh @@ -0,0 +1,16 @@ +#version 120 +/* MakeUp - gbuffers_skytextured.vsh +Render: sun, moon + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_SKYTEXTURED +#define NO_SHADOWS + +#include "/common/skytextured_vertex.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_spidereyes.fsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_spidereyes.fsh new file mode 100644 index 0000000..4f713fb --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_spidereyes.fsh @@ -0,0 +1,16 @@ +#version 120 +/* MakeUp - gbuffers_spidereyes.fsh +Render: Some creatures eyes (like spider) + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_SPIDEREYES +#define NO_SHADOWS + +#include "/common/spidereyes_blocks_fragment.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_spidereyes.vsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_spidereyes.vsh new file mode 100644 index 0000000..131fe0b --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_spidereyes.vsh @@ -0,0 +1,16 @@ +#version 120 +/* MakeUp - gbuffers_spidereyes.vsh +Render: Some creatures eyes (like spider) + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_SPIDEREYES +#define NO_SHADOWS + +#include "/common/spidereyes_blocks_vertex.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_terrain.fsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_terrain.fsh new file mode 100644 index 0000000..3b81b49 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_terrain.fsh @@ -0,0 +1,16 @@ +#version 120 +/* MakeUp - gbuffers_terrain.fsh +Render: Almost everything + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_TERRAIN +#define FOLIAGE_V + +#include "/common/solid_blocks_fragment.glsl" \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_terrain.vsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_terrain.vsh new file mode 100644 index 0000000..dbc0803 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_terrain.vsh @@ -0,0 +1,17 @@ +#version 120 +/* MakeUp - gbuffers_terrain.vsh +Render: Almost everything + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_TERRAIN +#define FOLIAGE_V +#define EMMISIVE_V + +#include "/common/solid_blocks_vertex.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_textured.fsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_textured.fsh new file mode 100644 index 0000000..1d0ea67 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_textured.fsh @@ -0,0 +1,15 @@ +#version 120 +/* MakeUp - gbuffers_textured.fsh +Render: Particles + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_TEXTURED + +#include "/common/solid_blocks_fragment.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_textured.vsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_textured.vsh new file mode 100644 index 0000000..19d7231 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_textured.vsh @@ -0,0 +1,15 @@ +#version 120 +/* MakeUp - gbuffers_textured.vsh +Render: Particles + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_TEXTURED + +#include "/common/solid_blocks_vertex.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_water.fsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_water.fsh new file mode 100644 index 0000000..9e78bd3 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_water.fsh @@ -0,0 +1,16 @@ +#version 120 +/* MakeUp - gbuffers_water.fsh +Render: Water and translucent blocks + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_WATER +#define WATER_F + +#include "/common/water_blocks_fragment.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_water.vsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_water.vsh new file mode 100644 index 0000000..3ed8906 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_water.vsh @@ -0,0 +1,16 @@ +#version 120 +/* MakeUp - gbuffers_water.vsh +Render: Water and translucent blocks + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define WATER_F + +#include "/common/water_blocks_vertex.glsl" + diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_weather.fsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_weather.fsh new file mode 100644 index 0000000..9a444da --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_weather.fsh @@ -0,0 +1,16 @@ +#version 120 +/* MakeUp - gbuffers_weather.fsh +Render: Weather + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_WEATHER +#define SPECIAL_TRANS + +#include "/common/solid_blocks_fragment.glsl" \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_weather.vsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_weather.vsh new file mode 100644 index 0000000..e8f7830 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/gbuffers_weather.vsh @@ -0,0 +1,15 @@ +#version 120 +/* MakeUp - gbuffers_weather.vsh +Render: Weather + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define GBUFFER_WEATHER + +#include "/common/solid_blocks_vertex.glsl" \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/item.properties b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/item.properties new file mode 100644 index 0000000..c81a5a7 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/item.properties @@ -0,0 +1,5 @@ +# Normal light +item.11001=minecraft:glowstone minecraft:sea_lantern minecraft:shroomlight minecraft:jack_o_lantern minecraft:beacon minecraft:end_rod minecraft:lantern minecraft:soul_lantern minecraft:torch minecraft:soul_torch minecraft:campfire minecraft:soul_campfire minecraft:lava_bucket additionallanterns:andesite_chain additionallanterns:andesite_lantern additionallanterns:basalt_chain additionallanterns:basalt_lantern additionallanterns:black_andesite_lantern additionallanterns:black_basalt_lantern additionallanterns:black_blackstone_lantern additionallanterns:black_bone_lantern additionallanterns:black_bricks_lantern additionallanterns:black_cobblestone_lantern additionallanterns:black_crimson_lantern additionallanterns:black_dark_prismarine_lantern additionallanterns:black_diamond_lantern additionallanterns:black_diorite_lantern additionallanterns:black_emerald_lantern additionallanterns:black_end_stone_lantern additionallanterns:black_gold_lantern additionallanterns:black_granite_lantern additionallanterns:black_iron_lantern additionallanterns:black_mossy_cobblestone_lantern additionallanterns:black_netherite_lantern additionallanterns:black_normal_lantern additionallanterns:black_normal_nether_bricks_lantern additionallanterns:black_normal_sandstone_lantern additionallanterns:black_obsidian_lantern additionallanterns:black_prismarine_lantern additionallanterns:black_purpur_lantern additionallanterns:black_quartz_lantern additionallanterns:black_red_nether_bricks_lantern additionallanterns:black_red_sandstone_lantern additionallanterns:black_smooth_stone_lantern additionallanterns:black_stone_bricks_lantern additionallanterns:black_stone_lantern additionallanterns:black_warped_lantern additionallanterns:blackstone_chain additionallanterns:blackstone_lantern additionallanterns:blue_andesite_lantern additionallanterns:blue_basalt_lantern additionallanterns:blue_blackstone_lantern additionallanterns:blue_bone_lantern additionallanterns:blue_bricks_lantern additionallanterns:blue_cobblestone_lantern additionallanterns:blue_crimson_lantern additionallanterns:blue_dark_prismarine_lantern additionallanterns:blue_diamond_lantern additionallanterns:blue_diorite_lantern additionallanterns:blue_emerald_lantern additionallanterns:blue_end_stone_lantern additionallanterns:blue_gold_lantern additionallanterns:blue_granite_lantern additionallanterns:blue_iron_lantern additionallanterns:blue_mossy_cobblestone_lantern additionallanterns:blue_netherite_lantern additionallanterns:blue_normal_lantern additionallanterns:blue_normal_nether_bricks_lantern additionallanterns:blue_normal_sandstone_lantern additionallanterns:blue_obsidian_lantern additionallanterns:blue_prismarine_lantern additionallanterns:blue_purpur_lantern additionallanterns:blue_quartz_lantern additionallanterns:blue_red_nether_bricks_lantern additionallanterns:blue_red_sandstone_lantern additionallanterns:blue_smooth_stone_lantern additionallanterns:blue_stone_bricks_lantern additionallanterns:blue_stone_lantern additionallanterns:blue_warped_lantern additionallanterns:bone_chain additionallanterns:bone_lantern additionallanterns:bricks_chain additionallanterns:bricks_lantern additionallanterns:brown_andesite_lantern additionallanterns:brown_basalt_lantern additionallanterns:brown_blackstone_lantern additionallanterns:brown_bone_lantern additionallanterns:brown_bricks_lantern additionallanterns:brown_cobblestone_lantern additionallanterns:brown_crimson_lantern additionallanterns:brown_dark_prismarine_lantern additionallanterns:brown_diamond_lantern additionallanterns:brown_diorite_lantern additionallanterns:brown_emerald_lantern additionallanterns:brown_end_stone_lantern additionallanterns:brown_gold_lantern additionallanterns:brown_granite_lantern additionallanterns:brown_iron_lantern additionallanterns:brown_mossy_cobblestone_lantern additionallanterns:brown_netherite_lantern additionallanterns:brown_normal_lantern additionallanterns:brown_normal_nether_bricks_lantern additionallanterns:brown_normal_sandstone_lantern additionallanterns:brown_obsidian_lantern additionallanterns:brown_prismarine_lantern additionallanterns:brown_purpur_lantern additionallanterns:brown_quartz_lantern additionallanterns:brown_red_nether_bricks_lantern additionallanterns:brown_red_sandstone_lantern additionallanterns:brown_smooth_stone_lantern additionallanterns:brown_stone_bricks_lantern additionallanterns:brown_stone_lantern additionallanterns:brown_warped_lantern additionallanterns:cobblestone_chain additionallanterns:cobblestone_lantern additionallanterns:crimson_chain additionallanterns:crimson_lantern additionallanterns:cyan_andesite_lantern additionallanterns:cyan_basalt_lantern additionallanterns:cyan_blackstone_lantern additionallanterns:cyan_bone_lantern additionallanterns:cyan_bricks_lantern additionallanterns:cyan_cobblestone_lantern additionallanterns:cyan_crimson_lantern additionallanterns:cyan_dark_prismarine_lantern additionallanterns:cyan_diamond_lantern additionallanterns:cyan_diorite_lantern additionallanterns:cyan_emerald_lantern additionallanterns:cyan_end_stone_lantern additionallanterns:cyan_gold_lantern additionallanterns:cyan_granite_lantern additionallanterns:cyan_iron_lantern additionallanterns:cyan_mossy_cobblestone_lantern additionallanterns:cyan_netherite_lantern additionallanterns:cyan_normal_lantern additionallanterns:cyan_normal_nether_bricks_lantern additionallanterns:cyan_normal_sandstone_lantern additionallanterns:cyan_obsidian_lantern additionallanterns:cyan_prismarine_lantern additionallanterns:cyan_purpur_lantern additionallanterns:cyan_quartz_lantern additionallanterns:cyan_red_nether_bricks_lantern additionallanterns:cyan_red_sandstone_lantern additionallanterns:cyan_smooth_stone_lantern additionallanterns:cyan_stone_bricks_lantern additionallanterns:cyan_stone_lantern additionallanterns:cyan_warped_lantern additionallanterns:dark_prismarine_chain additionallanterns:dark_prismarine_lantern additionallanterns:diamond_chain additionallanterns:diamond_lantern additionallanterns:diorite_chain additionallanterns:diorite_lantern additionallanterns:emerald_chain additionallanterns:emerald_lantern additionallanterns:end_stone_chain additionallanterns:end_stone_lantern additionallanterns:gold_chain additionallanterns:gold_lantern additionallanterns:granite_chain additionallanterns:granite_lantern additionallanterns:gray_andesite_lantern additionallanterns:gray_basalt_lantern additionallanterns:gray_blackstone_lantern additionallanterns:gray_bone_lantern additionallanterns:gray_bricks_lantern additionallanterns:gray_cobblestone_lantern additionallanterns:gray_crimson_lantern additionallanterns:gray_dark_prismarine_lantern additionallanterns:gray_diamond_lantern additionallanterns:gray_diorite_lantern additionallanterns:gray_emerald_lantern additionallanterns:gray_end_stone_lantern additionallanterns:gray_gold_lantern additionallanterns:gray_granite_lantern additionallanterns:gray_iron_lantern additionallanterns:gray_mossy_cobblestone_lantern additionallanterns:gray_netherite_lantern additionallanterns:gray_normal_lantern additionallanterns:gray_normal_nether_bricks_lantern additionallanterns:gray_normal_sandstone_lantern additionallanterns:gray_obsidian_lantern additionallanterns:gray_prismarine_lantern additionallanterns:gray_purpur_lantern additionallanterns:gray_quartz_lantern additionallanterns:gray_red_nether_bricks_lantern additionallanterns:gray_red_sandstone_lantern additionallanterns:gray_smooth_stone_lantern additionallanterns:gray_stone_bricks_lantern additionallanterns:gray_stone_lantern additionallanterns:gray_warped_lantern additionallanterns:green_andesite_lantern additionallanterns:green_basalt_lantern additionallanterns:green_blackstone_lantern additionallanterns:green_bone_lantern additionallanterns:green_bricks_lantern additionallanterns:green_cobblestone_lantern additionallanterns:green_crimson_lantern additionallanterns:green_dark_prismarine_lantern additionallanterns:green_diamond_lantern additionallanterns:green_diorite_lantern additionallanterns:green_emerald_lantern additionallanterns:green_end_stone_lantern additionallanterns:green_gold_lantern additionallanterns:green_granite_lantern additionallanterns:green_iron_lantern additionallanterns:green_mossy_cobblestone_lantern additionallanterns:green_netherite_lantern additionallanterns:green_normal_lantern additionallanterns:green_normal_nether_bricks_lantern additionallanterns:green_normal_sandstone_lantern additionallanterns:green_obsidian_lantern additionallanterns:green_prismarine_lantern additionallanterns:green_purpur_lantern additionallanterns:green_quartz_lantern additionallanterns:green_red_nether_bricks_lantern additionallanterns:green_red_sandstone_lantern additionallanterns:green_smooth_stone_lantern additionallanterns:green_stone_bricks_lantern additionallanterns:green_stone_lantern additionallanterns:green_warped_lantern additionallanterns:iron_lantern additionallanterns:light_blue_andesite_lantern additionallanterns:light_blue_basalt_lantern additionallanterns:light_blue_blackstone_lantern additionallanterns:light_blue_bone_lantern additionallanterns:light_blue_bricks_lantern additionallanterns:light_blue_cobblestone_lantern additionallanterns:light_blue_crimson_lantern additionallanterns:light_blue_dark_prismarine_lantern additionallanterns:light_blue_diamond_lantern additionallanterns:light_blue_diorite_lantern additionallanterns:light_blue_emerald_lantern additionallanterns:light_blue_end_stone_lantern additionallanterns:light_blue_gold_lantern additionallanterns:light_blue_granite_lantern additionallanterns:light_blue_iron_lantern additionallanterns:light_blue_mossy_cobblestone_lantern additionallanterns:light_blue_netherite_lantern additionallanterns:light_blue_normal_lantern additionallanterns:light_blue_normal_nether_bricks_lantern additionallanterns:light_blue_normal_sandstone_lantern additionallanterns:light_blue_obsidian_lantern additionallanterns:light_blue_prismarine_lantern additionallanterns:light_blue_purpur_lantern additionallanterns:light_blue_quartz_lantern additionallanterns:light_blue_red_nether_bricks_lantern additionallanterns:light_blue_red_sandstone_lantern additionallanterns:light_blue_smooth_stone_lantern additionallanterns:light_blue_stone_bricks_lantern additionallanterns:light_blue_stone_lantern additionallanterns:light_blue_warped_lantern additionallanterns:light_gray_andesite_lantern additionallanterns:light_gray_basalt_lantern additionallanterns:light_gray_blackstone_lantern additionallanterns:light_gray_bone_lantern additionallanterns:light_gray_bricks_lantern additionallanterns:light_gray_cobblestone_lantern additionallanterns:light_gray_crimson_lantern additionallanterns:light_gray_dark_prismarine_lantern additionallanterns:light_gray_diamond_lantern additionallanterns:light_gray_diorite_lantern additionallanterns:light_gray_emerald_lantern additionallanterns:light_gray_end_stone_lantern additionallanterns:light_gray_gold_lantern additionallanterns:light_gray_granite_lantern additionallanterns:light_gray_iron_lantern additionallanterns:light_gray_mossy_cobblestone_lantern additionallanterns:light_gray_netherite_lantern additionallanterns:light_gray_normal_lantern additionallanterns:light_gray_normal_nether_bricks_lantern additionallanterns:light_gray_normal_sandstone_lantern additionallanterns:light_gray_obsidian_lantern additionallanterns:light_gray_prismarine_lantern additionallanterns:light_gray_purpur_lantern additionallanterns:light_gray_quartz_lantern additionallanterns:light_gray_red_nether_bricks_lantern additionallanterns:light_gray_red_sandstone_lantern additionallanterns:light_gray_smooth_stone_lantern additionallanterns:light_gray_stone_bricks_lantern additionallanterns:light_gray_stone_lantern additionallanterns:light_gray_warped_lantern additionallanterns:lime_andesite_lantern additionallanterns:lime_basalt_lantern additionallanterns:lime_blackstone_lantern additionallanterns:lime_bone_lantern additionallanterns:lime_bricks_lantern additionallanterns:lime_cobblestone_lantern additionallanterns:lime_crimson_lantern additionallanterns:lime_dark_prismarine_lantern additionallanterns:lime_diamond_lantern additionallanterns:lime_diorite_lantern additionallanterns:lime_emerald_lantern additionallanterns:lime_end_stone_lantern additionallanterns:lime_gold_lantern additionallanterns:lime_granite_lantern additionallanterns:lime_iron_lantern additionallanterns:lime_mossy_cobblestone_lantern additionallanterns:lime_netherite_lantern additionallanterns:lime_normal_lantern additionallanterns:lime_normal_nether_bricks_lantern additionallanterns:lime_normal_sandstone_lantern additionallanterns:lime_obsidian_lantern additionallanterns:lime_prismarine_lantern additionallanterns:lime_purpur_lantern additionallanterns:lime_quartz_lantern additionallanterns:lime_red_nether_bricks_lantern additionallanterns:lime_red_sandstone_lantern additionallanterns:lime_smooth_stone_lantern additionallanterns:lime_stone_bricks_lantern additionallanterns:lime_stone_lantern additionallanterns:lime_warped_lantern additionallanterns:magenta_andesite_lantern additionallanterns:magenta_basalt_lantern additionallanterns:magenta_blackstone_lantern additionallanterns:magenta_bone_lantern additionallanterns:magenta_bricks_lantern additionallanterns:magenta_cobblestone_lantern additionallanterns:magenta_crimson_lantern additionallanterns:magenta_dark_prismarine_lantern additionallanterns:magenta_diamond_lantern additionallanterns:magenta_diorite_lantern additionallanterns:magenta_emerald_lantern additionallanterns:magenta_end_stone_lantern additionallanterns:magenta_gold_lantern additionallanterns:magenta_granite_lantern additionallanterns:magenta_iron_lantern additionallanterns:magenta_mossy_cobblestone_lantern additionallanterns:magenta_netherite_lantern additionallanterns:magenta_normal_lantern additionallanterns:magenta_normal_nether_bricks_lantern additionallanterns:magenta_normal_sandstone_lantern additionallanterns:magenta_obsidian_lantern additionallanterns:magenta_prismarine_lantern additionallanterns:magenta_purpur_lantern additionallanterns:magenta_quartz_lantern additionallanterns:magenta_red_nether_bricks_lantern additionallanterns:magenta_red_sandstone_lantern additionallanterns:magenta_smooth_stone_lantern additionallanterns:magenta_stone_bricks_lantern additionallanterns:magenta_stone_lantern additionallanterns:magenta_warped_lantern additionallanterns:mossy_cobblestone_chain additionallanterns:mossy_cobblestone_lantern additionallanterns:netherite_chain additionallanterns:netherite_lantern additionallanterns:normal_nether_bricks_chain additionallanterns:normal_nether_bricks_lantern additionallanterns:normal_sandstone_chain additionallanterns:normal_sandstone_lantern additionallanterns:obsidian_chain additionallanterns:obsidian_lantern additionallanterns:orange_andesite_lantern additionallanterns:orange_basalt_lantern additionallanterns:orange_blackstone_lantern additionallanterns:orange_bone_lantern additionallanterns:orange_bricks_lantern additionallanterns:orange_cobblestone_lantern additionallanterns:orange_crimson_lantern additionallanterns:orange_dark_prismarine_lantern additionallanterns:orange_diamond_lantern additionallanterns:orange_diorite_lantern additionallanterns:orange_emerald_lantern additionallanterns:orange_end_stone_lantern additionallanterns:orange_gold_lantern additionallanterns:orange_granite_lantern additionallanterns:orange_iron_lantern additionallanterns:orange_mossy_cobblestone_lantern additionallanterns:orange_netherite_lantern additionallanterns:orange_normal_lantern additionallanterns:orange_normal_nether_bricks_lantern additionallanterns:orange_normal_sandstone_lantern additionallanterns:orange_obsidian_lantern additionallanterns:orange_prismarine_lantern additionallanterns:orange_purpur_lantern additionallanterns:orange_quartz_lantern additionallanterns:orange_red_nether_bricks_lantern additionallanterns:orange_red_sandstone_lantern additionallanterns:orange_smooth_stone_lantern additionallanterns:orange_stone_bricks_lantern additionallanterns:orange_stone_lantern additionallanterns:orange_warped_lantern additionallanterns:pink_andesite_lantern additionallanterns:pink_basalt_lantern additionallanterns:pink_blackstone_lantern additionallanterns:pink_bone_lantern additionallanterns:pink_bricks_lantern additionallanterns:pink_cobblestone_lantern additionallanterns:pink_crimson_lantern additionallanterns:pink_dark_prismarine_lantern additionallanterns:pink_diamond_lantern additionallanterns:pink_diorite_lantern additionallanterns:pink_emerald_lantern additionallanterns:pink_end_stone_lantern additionallanterns:pink_gold_lantern additionallanterns:pink_granite_lantern additionallanterns:pink_iron_lantern additionallanterns:pink_mossy_cobblestone_lantern additionallanterns:pink_netherite_lantern additionallanterns:pink_normal_lantern additionallanterns:pink_normal_nether_bricks_lantern additionallanterns:pink_normal_sandstone_lantern additionallanterns:pink_obsidian_lantern additionallanterns:pink_prismarine_lantern additionallanterns:pink_purpur_lantern additionallanterns:pink_quartz_lantern additionallanterns:pink_red_nether_bricks_lantern additionallanterns:pink_red_sandstone_lantern additionallanterns:pink_smooth_stone_lantern additionallanterns:pink_stone_bricks_lantern additionallanterns:pink_stone_lantern additionallanterns:pink_warped_lantern additionallanterns:prismarine_chain additionallanterns:prismarine_lantern additionallanterns:purple_andesite_lantern additionallanterns:purple_basalt_lantern additionallanterns:purple_blackstone_lantern additionallanterns:purple_bone_lantern additionallanterns:purple_bricks_lantern additionallanterns:purple_cobblestone_lantern additionallanterns:purple_crimson_lantern additionallanterns:purple_dark_prismarine_lantern additionallanterns:purple_diamond_lantern additionallanterns:purple_diorite_lantern additionallanterns:purple_emerald_lantern additionallanterns:purple_end_stone_lantern additionallanterns:purple_gold_lantern additionallanterns:purple_granite_lantern additionallanterns:purple_iron_lantern additionallanterns:purple_mossy_cobblestone_lantern additionallanterns:purple_netherite_lantern additionallanterns:purple_normal_lantern additionallanterns:purple_normal_nether_bricks_lantern additionallanterns:purple_normal_sandstone_lantern additionallanterns:purple_obsidian_lantern additionallanterns:purple_prismarine_lantern additionallanterns:purple_purpur_lantern additionallanterns:purple_quartz_lantern additionallanterns:purple_red_nether_bricks_lantern additionallanterns:purple_red_sandstone_lantern additionallanterns:purple_smooth_stone_lantern additionallanterns:purple_stone_bricks_lantern additionallanterns:purple_stone_lantern additionallanterns:purple_warped_lantern additionallanterns:purpur_chain additionallanterns:purpur_lantern additionallanterns:quartz_chain additionallanterns:quartz_lantern additionallanterns:red_andesite_lantern additionallanterns:red_basalt_lantern additionallanterns:red_blackstone_lantern additionallanterns:red_bone_lantern additionallanterns:red_bricks_lantern additionallanterns:red_cobblestone_lantern additionallanterns:red_crimson_lantern additionallanterns:red_dark_prismarine_lantern additionallanterns:red_diamond_lantern additionallanterns:red_diorite_lantern additionallanterns:red_emerald_lantern additionallanterns:red_end_stone_lantern additionallanterns:red_gold_lantern additionallanterns:red_granite_lantern additionallanterns:red_iron_lantern additionallanterns:red_mossy_cobblestone_lantern additionallanterns:red_nether_bricks_chain additionallanterns:red_nether_bricks_lantern additionallanterns:red_netherite_lantern additionallanterns:red_normal_lantern additionallanterns:red_normal_nether_bricks_lantern additionallanterns:red_normal_sandstone_lantern additionallanterns:red_obsidian_lantern additionallanterns:red_prismarine_lantern additionallanterns:red_purpur_lantern additionallanterns:red_quartz_lantern additionallanterns:red_red_nether_bricks_lantern additionallanterns:red_red_sandstone_lantern additionallanterns:red_sandstone_chain additionallanterns:red_sandstone_lantern additionallanterns:red_smooth_stone_lantern additionallanterns:red_stone_bricks_lantern additionallanterns:red_stone_lantern additionallanterns:red_warped_lantern additionallanterns:smooth_stone_chain additionallanterns:smooth_stone_lantern additionallanterns:stone_bricks_chain additionallanterns:stone_bricks_lantern additionallanterns:stone_chain additionallanterns:stone_lantern additionallanterns:warped_chain additionallanterns:warped_lantern additionallanterns:white_andesite_lantern additionallanterns:white_basalt_lantern additionallanterns:white_blackstone_lantern additionallanterns:white_bone_lantern additionallanterns:white_bricks_lantern additionallanterns:white_cobblestone_lantern additionallanterns:white_crimson_lantern additionallanterns:white_dark_prismarine_lantern additionallanterns:white_diamond_lantern additionallanterns:white_diorite_lantern additionallanterns:white_emerald_lantern additionallanterns:white_end_stone_lantern additionallanterns:white_gold_lantern additionallanterns:white_granite_lantern additionallanterns:white_iron_lantern additionallanterns:white_mossy_cobblestone_lantern additionallanterns:white_netherite_lantern additionallanterns:white_normal_lantern additionallanterns:white_normal_nether_bricks_lantern additionallanterns:white_normal_sandstone_lantern additionallanterns:white_obsidian_lantern additionallanterns:white_prismarine_lantern additionallanterns:white_purpur_lantern additionallanterns:white_quartz_lantern additionallanterns:white_red_nether_bricks_lantern additionallanterns:white_red_sandstone_lantern additionallanterns:white_smooth_stone_lantern additionallanterns:white_stone_bricks_lantern additionallanterns:white_stone_lantern additionallanterns:white_warped_lantern additionallanterns:yellow_andesite_lantern additionallanterns:yellow_basalt_lantern additionallanterns:yellow_blackstone_lantern additionallanterns:yellow_bone_lantern additionallanterns:yellow_bricks_lantern additionallanterns:yellow_cobblestone_lantern additionallanterns:yellow_crimson_lantern additionallanterns:yellow_dark_prismarine_lantern additionallanterns:yellow_diamond_lantern additionallanterns:yellow_diorite_lantern additionallanterns:yellow_emerald_lantern additionallanterns:yellow_end_stone_lantern additionallanterns:yellow_gold_lantern additionallanterns:yellow_granite_lantern additionallanterns:yellow_iron_lantern additionallanterns:yellow_mossy_cobblestone_lantern additionallanterns:yellow_netherite_lantern additionallanterns:yellow_normal_lantern additionallanterns:yellow_normal_nether_bricks_lantern additionallanterns:yellow_normal_sandstone_lantern additionallanterns:yellow_obsidian_lantern additionallanterns:yellow_prismarine_lantern additionallanterns:yellow_purpur_lantern additionallanterns:yellow_quartz_lantern additionallanterns:yellow_red_nether_bricks_lantern additionallanterns:yellow_red_sandstone_lantern additionallanterns:yellow_smooth_stone_lantern additionallanterns:yellow_stone_bricks_lantern additionallanterns:yellow_stone_lantern additionallanterns:yellow_warped_lantern + +# Low light +item.11002=minecraft:redstone_torch minecraft:crying_obsidian minecraft:respawn_anchor minecraft:nether_star minecraft:magma_cream minecraft:blaze_powder minecraft:blaze_rod minecraft:prismarine_crystals minecraft:glowstone_dust minecraft:glow_item_frame minecraft:glow_berries minecraft:glow_lichen minecraft:glow_ink_sac \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lang/en_US.lang b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lang/en_US.lang new file mode 100644 index 0000000..f9c8bfb --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lang/en_US.lang @@ -0,0 +1,292 @@ +#Profiles +############################ +profile.no_effects=No effects +profile.shadowless_low=Shadowless Low +profile.shadowless_medium=Shadowless Medium +profile.shadowless_high=Shadowless High +profile.low=Low +profile.medium=Medium +profile.high=High +profile.extreme=Extreme +profile.extremeplus=Extreme+ + +profile.comment=The "shadowless" profiles are designed for low-performance machines, disregarding the shadows. Traditional profiles slowly add higher quality shadows and more advanced heavy effects. Please experiment with the available options and find the best combination for you. + +#About +############################# +option.ACERCADE=MakeUp +option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. +value.ACERCADE.0=v.9.1c + +#Options +############################# +option.SHADOW_CASTING=Shadows + +option.SHADOW_DISTANCE_SLIDER=Shadow distance +value.SHADOW_DISTANCE_SLIDER.0=Short +value.SHADOW_DISTANCE_SLIDER.1=Medium +value.SHADOW_DISTANCE_SLIDER.2=Far + +option.SHADOW_QTY_SLIDER=Shadow quality +value.SHADOW_QTY_SLIDER.0=None +value.SHADOW_QTY_SLIDER.1=Low +value.SHADOW_QTY_SLIDER.2=Medium +value.SHADOW_QTY_SLIDER.3=High + +option.REFLECTION_SLIDER=Reflection +value.REFLECTION_SLIDER.0=Off +value.REFLECTION_SLIDER.1=Flipped image +value.REFLECTION_SLIDER.2=Raymarching + +option.SHADOW_TYPE=Shadow type +value.SHADOW_TYPE.0=Simple +value.SHADOW_TYPE.1=Filtered + +option.SHADOW_BLUR=Shadow blur intensity + +option.COLORED_SHADOW=Colored shadows + +option.VOL_LIGHT=Godrays +value.VOL_LIGHT.0=Disabled +value.VOL_LIGHT.1=Depth based +value.VOL_LIGHT.2=Volumetric + +option.DOF=Depth of field + +option.DOF_STRENGTH=DoF strength + +option.DOF_SAMPLES_FACTOR=DoF samples factor + +option.AO=Ambient occlusion +value.AO.0=Off +value.AO.1=On + +option.AOSTEPS=AO sample pairs + +option.AO_STRENGTH=AO strength + +option.AA_TYPE=Temporal sampling +value.AA_TYPE.0=Off +value.AA_TYPE.1=Denoise +value.AA_TYPE.2=TAA +value.AA_TYPE.3=Sharp TAA + +option.MOTION_BLUR=Motion blur +option.MOTION_BLUR_STRENGTH=Motion blur strength +option.MOTION_BLUR_SAMPLES=Motion blur samples + +option.VANILLA_WATER=Vanilla like water + +option.WATER_TEXTURE=Water texture +value.WATER_TEXTURE.0=No +value.WATER_TEXTURE.1=Yes + +option.WATER_COLOR_SOURCE=Water color +value.WATER_COLOR_SOURCE.0=Shader scheme +value.WATER_COLOR_SOURCE.1=Resource Pack + +option.REFLECTION=Reflection +value.REFLECTION.0=Off +value.REFLECTION.1=On + +option.REFRACTION=Refraction +value.REFRACTION.0=Off +value.REFRACTION.1=On + +option.SSR_TYPE=Reflection type +value.SSR_TYPE.0=Flipped image +value.SSR_TYPE.1=Raymarching + +option.SUN_REFLECTION=Sun reflection +value.SUN_REFLECTION.0=Off +value.SUN_REFLECTION.1=On + +option.CLOUD_REFLECTION=Vol. clouds reflection + +option.WAVING=Waving plants +value.WAVING.0=No +value.WAVING.1=Yes + +option.CHROMA_ABER=Chroma aberration +value.CHROMA_ABER.0=No +value.CHROMA_ABER.1=Yes + +option.CHROMA_ABER_STRENGTH=Chroma aberration strength + +option.WATER_ABSORPTION=Water absorption index + +option.WATER_TURBULENCE=Waves strength +value.WATER_TURBULENCE.7.0=Very low +value.WATER_TURBULENCE.1.75=Low +value.WATER_TURBULENCE.0.9=Medium +value.WATER_TURBULENCE.0.5=High + +option.COLOR_SCHEME=Color scheme +value.COLOR_SCHEME.0=Ethereal +value.COLOR_SCHEME.1=New shoka +value.COLOR_SCHEME.2=Shoka +value.COLOR_SCHEME.3=Legacy +value.COLOR_SCHEME.4=Captain +value.COLOR_SCHEME.5=Psychedelic +value.COLOR_SCHEME.6=Cocoa +value.COLOR_SCHEME.7=Testigo +value.COLOR_SCHEME.99=Custom + +option.LIGHT_SUNSET_COLOR_R=Sunset light R +option.LIGHT_SUNSET_COLOR_G=Sunset light G +option.LIGHT_SUNSET_COLOR_B=Sunset light B + +option.LIGHT_DAY_COLOR_R=Day light R +option.LIGHT_DAY_COLOR_G=Day light G +option.LIGHT_DAY_COLOR_B=Day light B + +option.LIGHT_NIGHT_COLOR_R=Night light R +option.LIGHT_NIGHT_COLOR_G=Night light G +option.LIGHT_NIGHT_COLOR_B=Night light B + +option.ZENITH_SUNSET_COLOR_R=Zenith sunset R +option.ZENITH_SUNSET_COLOR_G=Zenith sunset G +option.ZENITH_SUNSET_COLOR_B=Zenith sunset B + +option.ZENITH_DAY_COLOR_R=Zenith day R +option.ZENITH_DAY_COLOR_G=Zenith day G +option.ZENITH_DAY_COLOR_B=Zenith day B + +option.ZENITH_NIGHT_COLOR_R=Zenith night R +option.ZENITH_NIGHT_COLOR_G=Zenith night G +option.ZENITH_NIGHT_COLOR_B=Zenith night B + +option.HORIZON_SUNSET_COLOR_R=Horizon sunset R +option.HORIZON_SUNSET_COLOR_G=Horizon sunset G +option.HORIZON_SUNSET_COLOR_B=Horizon sunset B + +option.HORIZON_DAY_COLOR_R=Horizon day R +option.HORIZON_DAY_COLOR_G=Horizon day G +option.HORIZON_DAY_COLOR_B=Horizon day B + +option.HORIZON_NIGHT_COLOR_R=Horizon night R +option.HORIZON_NIGHT_COLOR_G=Horizon night G +option.HORIZON_NIGHT_COLOR_B=Horizon night B + +option.WATER_COLOR_R=Water R +option.WATER_COLOR_G=Water G +option.WATER_COLOR_B=Water B + +option.NV_COLOR_R=Night vision R multiplier +option.NV_COLOR_G=Night vision G multiplier +option.NV_COLOR_B=Night vision B multiplier + +option.OMNI_TINT_CUSTOM=Omni tint + +option.AVOID_DARK_LEVEL=Cave brightness + +option.NIGHT_BRIGHT=Night brightness + +option.V_CLOUDS=Clouds +value.V_CLOUDS.0=Vanilla +value.V_CLOUDS.1=Volumetric static +value.V_CLOUDS.2=Volumetric dyn. + +option.CLOUD_VOL_STYLE=Volumetric cloud style +value.CLOUD_VOL_STYLE.0=Natural +value.CLOUD_VOL_STYLE.1=Boxy + +option.CLOUD_SPEED=Clouds speed +value.CLOUD_SPEED.0=Normal +value.CLOUD_SPEED.1=Time lapse 1 +value.CLOUD_SPEED.2=Time lapse 2 + +option.END_CLOUDS=Clouds in The End + +option.CLOUD_STEPS_AVG=Cloud samples + +option.BLOOM=Bloom + +option.COLOR_BLINDNESS=Color blindness + +option.COLOR_BLIND_MODE=CB type +value.COLOR_BLIND_MODE.0=Protanopia +value.COLOR_BLIND_MODE.1=Deuteranopia +value.COLOR_BLIND_MODE.2=Tritanopia + +option.DEBUG_MODE=Debug mode + +option.BLOOM_SAMPLES=Bloom sample pairs + +option.BLACK_ENTITY_FIX=Black entity BUGFIX +value.BLACK_ENTITY_FIX.0=Off +value.BLACK_ENTITY_FIX.1=On + +option.FOG_ACTIVE=Fog enabled + +option.FOG_ADJUST=Fog intensity +value.FOG_ADJUST.20.0=No fog +value.FOG_ADJUST.10.0=Ultra low +value.FOG_ADJUST.8.0=Very low +value.FOG_ADJUST.4.0=Low +value.FOG_ADJUST.2.0=Medium +value.FOG_ADJUST.1.0=High + +option.NETHER_FOG_DISTANCE=Nether fog distance +value.NETHER_FOG_DISTANCE.0=Render Distance +value.NETHER_FOG_DISTANCE.1=Vanilla + +option.BLOCKLIGHT_TEMP=Blocklight temp +value.BLOCKLIGHT_TEMP.0=Warmer +value.BLOCKLIGHT_TEMP.1=Warm +value.BLOCKLIGHT_TEMP.2=Yellow +value.BLOCKLIGHT_TEMP.3=Pale yellow +value.BLOCKLIGHT_TEMP.4=White light + +option.sunPathRotation=Sun angle + +option.USE_BASIC_SH=Custom dimensions basic shader + +option.MATERIAL_GLOSS=Material gloss + +option.DYN_HAND_LIGHT=Fake dynamic light + +#Screens +screen.ADVANCED_SCREEN=Advanced options +screen.ADVANCED_SCREEN.comment=Set advanced options + +screen.COMPATIBILITY_SCREEN=Compatibility +screen.COMPATIBILITY_SCREEN.comment=Set compatibility options + +screen.SHADOWS_SCREEN=Shadows +screen.SHADOWS_SCREEN.comment=Set shadows options + +screen.DOF_SCREEN=Depth of field +screen.DOF_SCREEN.comment=Set depth of field options + +screen.AO_SCREEN=Ambient occlusion +screen.AO_SCREEN.comment=Set ambient occlusion options + +screen.WATER_SCREEN=Water +screen.WATER_SCREEN.comment=Set water options. + +screen.POST_SCREEN= Post effects +screen.POST_SCREEN.comment=Set post effects options. + +screen.LIGHT_SCREEN=Light +screen.LIGHT_SCREEN.comment=Set light options. + +screen.CLOUDS_SCREEN=Sun & clouds +screen.CLOUDS_SCREEN.comment=Set sun and clouds options. + +screen.FOG_SCREEN=Fog +screen.FOG_SCREEN.comment=Set fog options + +screen.MOTION_BLUR_SCREEN=Motion blur +screen.MOTION_BLUR_SCREEN.comment=Set motion blur options + +screen.ACCESIBILITY_SCREEN=Accesibility +screen.ACCESIBILITY_SCREEN.comment=Set accesibility options + +screen.CUSTOM_COLORS_SCREEN=Custom colors +screen.CUSTOM_COLORS_SCREEN.comment=Set custom colors +screen.CUSTOM_COLORS_DAY=Day custom colors +screen.CUSTOM_COLORS_SUNSET=Sunset/dawn custom colors +screen.CUSTOM_COLORS_NIGHT=Night custom colors +screen.CUSTOM_COLORS_WATER=Water custom color +screen.CUSTOM_COLORS_NV=Night vision custom color diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lang/ko_KR.lang b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lang/ko_KR.lang new file mode 100644 index 0000000..919d59f --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lang/ko_KR.lang @@ -0,0 +1,291 @@ +#프로필 +############################ +profile.no_effects=효과 없음 +profile.shadowless_low=그림자 없음 낮음 +profile.shadowless_medium=그림자 없음 중간 +profile.shadowless_high=그림자 없음 높음 +profile.low=낮음 +profile.medium=중간 +profile.high=높음 +profile.extreme=극한 +profile.extremeplus=극한+ + +profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설계되었으며, 그림자를 무시합니다. 전통적인 프로필은 천천히 더 높은 품질의 그림자와 더 고급스러운 무거운 효과를 추가합니다. 사용 가능한 옵션을 실험해보고 가장 적합한 조합을 찾으십시오. + +#정보 +############################# +option.ACERCADE=MakeUp +option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. +value.ACERCADE.0=v.9.1c + +#옵션 +############################# +option.SHADOW_CASTING=그림자 생성 + +option.SHADOW_DISTANCE_SLIDER=그림자 거리 +value.SHADOW_DISTANCE_SLIDER.0=짧음 +value.SHADOW_DISTANCE_SLIDER.1=중간 +value.SHADOW_DISTANCE_SLIDER.2=김 + +option.SHADOW_QTY_SLIDER=그림자 품질 +value.SHADOW_QTY_SLIDER.0=없음 +value.SHADOW_QTY_SLIDER.1=낮음 +value.SHADOW_QTY_SLIDER.2=중간 +value.SHADOW_QTY_SLIDER.3=높음 + +option.REFLECTION_SLIDER=반사 +value.REFLECTION_SLIDER.0=끔 +value.REFLECTION_SLIDER.1=반전 이미지 +value.REFLECTION_SLIDER.2=Raymarching + +option.SHADOW_TYPE=그림자 유형 +value.SHADOW_TYPE.0=단순 +value.SHADOW_TYPE.1=필터 적용 + +option.SHADOW_BLUR=그림자 블러 강도 + +option.COLORED_SHADOW=컬러 그림자 + +option.VOL_LIGHT=빛 기둥 +value.VOL_LIGHT.0=비활성화 +value.VOL_LIGHT.1=깊이 기반 +value.VOL_LIGHT.2=부피 효과 + +option.DOF=깊이 감지 + +option.DOF_STRENGTH=깊이 감지 강도 + +option.DOF_SAMPLES_FACTOR=깊이 감지 샘플 수 + +option.AO=환경 폐색 +value.AO.0=끔 +value.AO.1=켬 + +option.AOSTEPS=환경 폐색 샘플 쌍 + +option.AO_STRENGTH=환경 폐색 강도 + +option.AA_TYPE=시간적 샘플링 +value.AA_TYPE.0=끔 +value.AA_TYPE.1=노이즈 제거 +value.AA_TYPE.2=TAA +value.AA_TYPE.3=날카로운 TAA + +option.MOTION_BLUR=모션 블러 +option.MOTION_BLUR_STRENGTH=모션 블러 강도 +option.MOTION_BLUR_SAMPLES=모션 블러 샘플 수 + +option.VANILLA_WATER=바닐라 같은 물 + +option.WATER_TEXTURE=물 텍스처 +value.WATER_TEXTURE.0=아니요 +value.WATER_TEXTURE.1=예 + +option.WATER_COLOR_SOURCE=물 색상 +value.WATER_COLOR_SOURCE.0=셰이더 방식 +value.WATER_COLOR_SOURCE.1=리소스 팩 + +option.REFLECTION=반사 +value.REFLECTION.0=끔 +value.REFLECTION.1=켬 + +option.REFRACTION=굴절 +value.REFRACTION.0=끔 +value.REFRACTION.1=켬 + +option.SSR_TYPE=반사 유형 +value.SSR_TYPE.0=반전 이미지 +value.SSR_TYPE.1=Raymarching + +option.SUN_REFLECTION=태양 반사 +value.SUN_REFLECTION.0=끔 +value.SUN_REFLECTION.1=켬 + +option.CLOUD_REFLECTION=부피 구름 반사 + +option.WAVING=흔들리는 식물 +value.WAVING.0=아니요 +value.WAVING.1=예 + +option.CHROMA_ABER=색수차 +value.CHROMA_ABER.0=아니요 +value.CHROMA_ABER.1=예 + +option.CHROMA_ABER_STRENGTH=색수차 강도 + +option.WATER_ABSORPTION=물 흡수 지수 + +option.WATER_TURBULENCE=파도 강도 +value.WATER_TURBULENCE.7.0=매우 낮음 +value.WATER_TURBULENCE.1.75=낮음 +value.WATER_TURBULENCE.0.9=중간 +value.WATER_TURBULENCE.0.5=높음 + +option.COLOR_SCHEME=색상 체계 +value.COLOR_SCHEME.0=에테르 +value.COLOR_SCHEME.1=새로운 쇼카 +value.COLOR_SCHEME.2=쇼카 +value.COLOR_SCHEME.3=레거시 +value.COLOR_SCHEME.4=캡틴 +value.COLOR_SCHEME.5=환각적 +value.COLOR_SCHEME.6=코코아 +value.COLOR_SCHEME.99=사용자 지정 + +option.LIGHT_SUNSET_COLOR_R=일몰 빛 R +option.LIGHT_SUNSET_COLOR_G=일몰 빛 G +option.LIGHT_SUNSET_COLOR_B=일몰 빛 B + +option.LIGHT_DAY_COLOR_R=낮 빛 R +option.LIGHT_DAY_COLOR_G=낮 빛 G +option.LIGHT_DAY_COLOR_B=낮 빛 B + +option.LIGHT_NIGHT_COLOR_R=밤 빛 R +option.LIGHT_NIGHT_COLOR_G=밤 빛 G +option.LIGHT_NIGHT_COLOR_B=밤 빛 B + +option.ZENITH_SUNSET_COLOR_R=정점 일몰 R +option.ZENITH_SUNSET_COLOR_G=정점 일몰 G +option.ZENITH_SUNSET_COLOR_B=정점 일몰 B + +option.ZENITH_DAY_COLOR_R=정점 낮 R +option.ZENITH_DAY_COLOR_G=정점 낮 G +option.ZENITH_DAY_COLOR_B=정점 낮 B + +option.ZENITH_NIGHT_COLOR_R=정점 밤 R +option.ZENITH_NIGHT_COLOR_G=정점 밤 G +option.ZENITH_NIGHT_COLOR_B=정점 밤 B + +option.HORIZON_SUNSET_COLOR_R=지평선 일몰 R +option.HORIZON_SUNSET_COLOR_G=지평선 일몰 G +option.HORIZON_SUNSET_COLOR_B=지평선 일몰 B + +option.HORIZON_DAY_COLOR_R=지평선 낮 R +option.HORIZON_DAY_COLOR_G=지평선 낮 G +option.HORIZON_DAY_COLOR_B=지평선 낮 B + +option.HORIZON_NIGHT_COLOR_R=지평선 밤 R +option.HORIZON_NIGHT_COLOR_G=지평선 밤 G +option.HORIZON_NIGHT_COLOR_B=지평선 밤 B + +option.WATER_COLOR_R=물 R +option.WATER_COLOR_G=물 G +option.WATER_COLOR_B=물 B + +option.NV_COLOR_R=야간 투시 R 배수 +option.NV_COLOR_G=야간 투시 G 배수 +option.NV_COLOR_B=야간 투시 B 배수 + +option.OMNI_TINT_CUSTOM=Omni 색조 + +option.AVOID_DARK_LEVEL=동굴 밝기 + +option.NIGHT_BRIGHT=밤 밝기 + +option.V_CLOUDS=구름 +value.V_CLOUDS.0=바닐라 +value.V_CLOUDS.1=부피 정적 +value.V_CLOUDS.2=부피 동적 + +option.CLOUD_VOL_STYLE=부피 구름 스타일 +value.CLOUD_VOL_STYLE.0=자연스러운 +value.CLOUD_VOL_STYLE.1=박스형 + +option.CLOUD_SPEED=구름 속도 +value.CLOUD_SPEED.0=보통 +value.CLOUD_SPEED.1=타임랩스 1 +value.CLOUD_SPEED.2=타임랩스 2 + +option.END_CLOUDS=엔드의 구름 + +option.CLOUD_STEPS_AVG=구름 샘플 수 + +option.BLOOM=블룸 + +option.COLOR_BLINDNESS=색맹 + +option.COLOR_BLIND_MODE=색맹 유형 +value.COLOR_BLIND_MODE.0=적색맥 +value.COLOR_BLIND_MODE.1=녹색맹 +value.COLOR_BLIND_MODE.2=청색맹 + +option.DEBUG_MODE=디버그 모드 + +option.BLOOM_SAMPLES=블룸 샘플 쌍 + +option.BLACK_ENTITY_FIX=검은 개체 버그 수정 +value.BLACK_ENTITY_FIX.0=끔 +value.BLACK_ENTITY_FIX.1=켬 + +option.FOG_ACTIVE=안개 활성화 + +option.FOG_ADJUST=안개 강도 +value.FOG_ADJUST.20.0=안개 없음 +value.FOG_ADJUST.10.0=극저 +value.FOG_ADJUST.8.0=매우 낮음 +value.FOG_ADJUST.4.0=낮음 +value.FOG_ADJUST.2.0=중간 +value.FOG_ADJUST.1.0=높음 + +option.NETHER_FOG_DISTANCE=네더 안개 거리 +value.NETHER_FOG_DISTANCE.0=렌더 거리 +value.NETHER_FOG_DISTANCE.1=바닐라 + +option.BLOCKLIGHT_TEMP=블록 조명 온도 +value.BLOCKLIGHT_TEMP.0=더 따뜻함 +value.BLOCKLIGHT_TEMP.1=따뜻함 +value.BLOCKLIGHT_TEMP.2=노란색 +value.BLOCKLIGHT_TEMP.3=옅은 노란색 +value.BLOCKLIGHT_TEMP.4=흰색 빛 + +option.sunPathRotation=태양 각도 + +option.USE_BASIC_SH=커스텀 차원 기본 셰이더 사용 + +option.MATERIAL_GLOSS=재료 광택 + +option.DYN_HAND_LIGHT=가짜 동적 빛 + +#화면 +screen.ADVANCED_SCREEN=고급 옵션 +screen.ADVANCED_SCREEN.comment=고급 옵션 설정 + +screen.COMPATIBILITY_SCREEN=호환성 +screen.COMPATIBILITY_SCREEN.comment=호환성 옵션 설정 + +screen.SHADOWS_SCREEN=그림자 +screen.SHADOWS_SCREEN.comment=그림자 옵션 설정 + +screen.DOF_SCREEN=깊이 감지 +screen.DOF_SCREEN.comment=깊이 감지 옵션 설정 + +screen.AO_SCREEN=환경 폐색 +screen.AO_SCREEN.comment=환경 폐색 옵션 설정 + +screen.WATER_SCREEN=물 +screen.WATER_SCREEN.comment=물 옵션 설정 + +screen.POST_SCREEN=후처리 효과 +screen.POST_SCREEN.comment=후처리 효과 옵션 설정 + +screen.LIGHT_SCREEN=빛 +screen.LIGHT_SCREEN.comment=빛 옵션 설정 + +screen.CLOUDS_SCREEN=태양 & 구름 +screen.CLOUDS_SCREEN.comment=태양과 구름 옵션 설정 + +screen.FOG_SCREEN=안개 +screen.FOG_SCREEN.comment=안개 옵션 설정 + +screen.MOTION_BLUR_SCREEN=모션 블러 +screen.MOTION_BLUR_SCREEN.comment=모션 블러 옵션 설정 + +screen.ACCESIBILITY_SCREEN=접근성 +screen.ACCESIBILITY_SCREEN.comment=접근성 옵션 설정 + +screen.CUSTOM_COLORS_SCREEN=커스텀 색상 +screen.CUSTOM_COLORS_SCREEN.comment=커스텀 색상 설정 +screen.CUSTOM_COLORS_DAY=낮 커스텀 색상 +screen.CUSTOM_COLORS_SUNSET=일몰/새벽 커스텀 색상 +screen.CUSTOM_COLORS_NIGHT=밤 커스텀 색상 +screen.CUSTOM_COLORS_WATER=물 커스텀 색상 +screen.CUSTOM_COLORS_NV=야간 투시 커스텀 색상 diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lang/sv_SE.lang b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lang/sv_SE.lang new file mode 100644 index 0000000..e18f71a --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lang/sv_SE.lang @@ -0,0 +1,290 @@ +#Profiles +############################ +profile.no_effects=Inga effekter +profile.shadowless_low=Låg (skugglös) +profile.shadowless_medium=Medium (skugglös) +profile.shadowless_high=Hög (skugglös) +profile.low=Låg +profile.medium=Medium +profile.high=Hög +profile.extreme=Extrem +profile.extremeplus=Extrem+ + +profile.comment=De "skugglösa" profilerna är designade för datorer med låg prestanda, vilket inaktiverar skuggor. Traditionella profiler lägger långsamt till skuggor med högre kvalitet och mer avancerade tunga effekter. Var god experimentera med de tillgängliga alternativen och hitta den bästa kombinationen för dig. + +#About +############################# +option.ACERCADE=MakeUp +option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. +value.ACERCADE.0=v.9.1c + +#Options +############################# +option.SHADOW_CASTING=Skuggor + +option.SHADOW_DISTANCE_SLIDER=Skuggavstånd +value.SHADOW_DISTANCE_SLIDER.0=Kort +value.SHADOW_DISTANCE_SLIDER.1=Medium +value.SHADOW_DISTANCE_SLIDER.2=Lång + +option.SHADOW_QTY_SLIDER=Skuggkvalitet +value.SHADOW_QTY_SLIDER.0=Ingen +value.SHADOW_QTY_SLIDER.1=Låg +value.SHADOW_QTY_SLIDER.2=Medium +value.SHADOW_QTY_SLIDER.3=Hög + +option.REFLECTION_SLIDER=Reflektion +value.REFLECTION_SLIDER.0=AV +value.REFLECTION_SLIDER.1=Spegelbild +value.REFLECTION_SLIDER.2=Raymarching + +option.SHADOW_TYPE=Skuggtyp +value.SHADOW_TYPE.0=Enkel +value.SHADOW_TYPE.1=Filtrerad + +option.SHADOW_BLUR=Intensitet för skuggoskärpa + +option.COLORED_SHADOW=Färglagda skuggor + +option.VOL_LIGHT=Ljusstrålar +value.VOL_LIGHT.0=Inaktiverad +value.VOL_LIGHT.1=Djupbaserad +value.VOL_LIGHT.2=Volumetrisk + +option.DOF=Skärpedjup + +option.DOF_STRENGTH=Styrka för skärpedjup + +option.DOF_SAMPLES_FACTOR=Samplingsfaktor för skärpedjup + +option.AO=Omgivande inneslutning +value.AO.0=AV +value.AO.1=PÅ + +option.AOSTEPS=Samplingspar för omgivande inneslutning + +option.AO_STRENGTH=Styrka för omgivande inneslutning + +option.AA_TYPE=Tidsbestämd sampling +value.AA_TYPE.0=AV +value.AA_TYPE.1=Denoise +value.AA_TYPE.2=TAA +value.AA_TYPE.3=Sharp TAA + +option.MOTION_BLUR=Rörelseoskärpa +option.MOTION_BLUR_STRENGTH=Styrka för rörelseoskärpa +option.MOTION_BLUR_SAMPLES=Samplingar för rörelseoskärpa + +option.VANILLA_WATER=Originalaktigt vatten + +option.WATER_TEXTURE=Vattentextur +value.WATER_TEXTURE.0=Nej +value.WATER_TEXTURE.1=Ja + +option.WATER_COLOR_SOURCE=Vattenfärg +value.WATER_COLOR_SOURCE.0=Shaderschema +value.WATER_COLOR_SOURCE.1=Resurspaket + +option.REFLECTION=Reflektion +value.REFLECTION.0=AV +value.REFLECTION.1=PÅ + +option.REFRACTION=Refraktion +value.REFRACTION.0=AV +value.REFRACTION.1=PÅ + +option.SSR_TYPE=Reflektionstyp +value.SSR_TYPE.0=Spegelbild +value.SSR_TYPE.1=Raymarching + +option.SUN_REFLECTION=Solreflektion +value.SUN_REFLECTION.0=AV +value.SUN_REFLECTION.1=PÅ + +option.CLOUD_REFLECTION=Vol. molnreflektion + +option.WAVING=Gungande växter +value.WAVING.0=Nej +value.WAVING.1=Ja + +option.CHROMA_ABER=Färgavvikelse +value.CHROMA_ABER.0=Nej +value.CHROMA_ABER.1=Ja + +option.CHROMA_ABER_STRENGTH=Styrka för färgavvikelse + +option.WATER_ABSORPTION=Absorberingsindex för vatten + +option.WATER_TURBULENCE=Vågstyrka +value.WATER_TURBULENCE.7.0=Mycket låg +value.WATER_TURBULENCE.1.75=Låg +value.WATER_TURBULENCE.0.9=Medium +value.WATER_TURBULENCE.0.5=Hög + +option.COLOR_SCHEME=Färgschema +value.COLOR_SCHEME.0=Ethereal +value.COLOR_SCHEME.1=New shoka +value.COLOR_SCHEME.2=Shoka +value.COLOR_SCHEME.3=Legacy +value.COLOR_SCHEME.4=Captain +value.COLOR_SCHEME.5=Psychedelic +value.COLOR_SCHEME.6=Cocoa +value.COLOR_SCHEME.7=Testigo +value.COLOR_SCHEME.99=Beställnings + +option.LIGHT_SUNSET_COLOR_R=Solnedgångsljus R +option.LIGHT_SUNSET_COLOR_G=Solnedgångsljus G +option.LIGHT_SUNSET_COLOR_B=Solnedgångsljus B + +option.LIGHT_DAY_COLOR_R=Dagsljus R +option.LIGHT_DAY_COLOR_G=Dagsljus G +option.LIGHT_DAY_COLOR_B=Dagsljus B + +option.LIGHT_NIGHT_COLOR_R=Nattlampa R +option.LIGHT_NIGHT_COLOR_G=Nattlampa G +option.LIGHT_NIGHT_COLOR_B=Nattlampa B + +option.ZENITH_SUNSET_COLOR_R=Zenith solnedgång R +option.ZENITH_SUNSET_COLOR_G=Zenith solnedgång G +option.ZENITH_SUNSET_COLOR_B=Zenith solnedgång B + +option.ZENITH_DAY_COLOR_R=Zenith dag R +option.ZENITH_DAY_COLOR_G=Zenith dag G +option.ZENITH_DAY_COLOR_B=Zenith dag B + +option.ZENITH_NIGHT_COLOR_R=Zenith natt R +option.ZENITH_NIGHT_COLOR_G=Zenith natt G +option.ZENITH_NIGHT_COLOR_B=Zenith natt B + +option.HORIZON_SUNSET_COLOR_R=Horisont solnedgång R +option.HORIZON_SUNSET_COLOR_G=Horisont solnedgång G +option.HORIZON_SUNSET_COLOR_B=Horisont solnedgång B + +option.HORIZON_DAY_COLOR_R=Horisont dag R +option.HORIZON_DAY_COLOR_G=Horisont dag G +option.HORIZON_DAY_COLOR_B=Horisont dag B + +option.HORIZON_NIGHT_COLOR_R=Horisont natt R +option.HORIZON_NIGHT_COLOR_G=Horisont natt G +option.HORIZON_NIGHT_COLOR_B=Horisont natt B + +option.WATER_COLOR_R=Vatten R +option.WATER_COLOR_G=Vatten G +option.WATER_COLOR_B=Vatten B + +option.NV_COLOR_R=Night Vision R Multiplikator +option.NV_COLOR_G=Night Vision G Multiplikator +option.NV_COLOR_B=Night Vision B Multiplikator + +option.OMNI_TINT_CUSTOM=Omni nyans + +option.AVOID_DARK_LEVEL=Ljusstyrka i grottor + +option.NIGHT_BRIGHT=Ljusstyrka på natten + +option.V_CLOUDS=Moln +value.V_CLOUDS.0=Original +value.V_CLOUDS.1=Volumetrisk statisk +value.V_CLOUDS.2=Volumetrisk dyn. + +option.CLOUD_VOL_STYLE=Volumetrisk molnstil +value.CLOUD_VOL_STYLE.0=Naturlig +value.CLOUD_VOL_STYLE.1=Fyrkantig + +option.CLOUD_SPEED=Molnhastighet +value.CLOUD_SPEED.0=Normal +value.CLOUD_SPEED.1=Time lapse 1 +value.CLOUD_SPEED.2=Time lapse 2 + +option.END_CLOUDS=Moln i SLUTET + +option.CLOUD_STEPS_AVG=Samplingar för moln + +option.BLOOM=Glöd + +option.COLOR_BLINDNESS=Färgblindhetsläge + +option.COLOR_BLIND_MODE=Typ av färgblindhet +value.COLOR_BLIND_MODE.0=Protanopi +value.COLOR_BLIND_MODE.1=Deuteranopi +value.COLOR_BLIND_MODE.2=Tritanopi + +option.DEBUG_MODE=Felsökning för Modo + +option.BLOOM_SAMPLES=Samplingspar för glöd + +option.BLACK_ENTITY_FIX=BUGGFIX för svarta entiteter +value.BLACK_ENTITY_FIX.0=AV +value.BLACK_ENTITY_FIX.1=PÅ + +option.FOG_ACTIVE=Dimma aktiverad + +option.FOG_ADJUST=Dimintensitet +value.FOG_ADJUST.10.0=Ultra låg +value.FOG_ADJUST.8.0=Mycket låg +value.FOG_ADJUST.4.0=Låg +value.FOG_ADJUST.2.0=Medium +value.FOG_ADJUST.1.0=Hög + +option.NETHER_FOG_DISTANCE=Nether dimma avstånd +value.NETHER_FOG_DISTANCE.0=Rendera avstånd +value.NETHER_FOG_DISTANCE.1=Original + +option.BLOCKLIGHT_TEMP=Blockljustemperatur +value.BLOCKLIGHT_TEMP.0=Varmare +value.BLOCKLIGHT_TEMP.1=Varm +value.BLOCKLIGHT_TEMP.2=Gul +value.BLOCKLIGHT_TEMP.3=Ljusgul +value.BLOCKLIGHT_TEMP.4=Vitt ljus + +option.sunPathRotation=Solvinkel + +option.USE_BASIC_SH=Enkel shader för anpassade dimensioner + +option.MATERIAL_GLOSS=Materialglans + +option.DYN_HAND_LIGHT=Konstgjort dynamiskt ljus + +#Screens +screen.ADVANCED_SCREEN=Avancerade alternativ +screen.ADVANCED_SCREEN.comment=Ändra avancerade alternativ + +screen.COMPATIBILITY_SCREEN=Kompatibilitet +screen.COMPATIBILITY_SCREEN.comment=Ställ in kompatibilitetsalternativ + +screen.SHADOWS_SCREEN=Skuggor +screen.SHADOWS_SCREEN.comment=Ändra skuggalternativ + +screen.DOF_SCREEN=Skärpedjup +screen.DOF_SCREEN.comment=Ändra skärpedjupsalternativ + +screen.AO_SCREEN=Omgivande ocklusion +screen.AO_SCREEN.comment=Ändra alternativ för omgivande ocklusion + +screen.WATER_SCREEN=Vatten +screen.WATER_SCREEN.comment=Ändra vattenalternativ. + +screen.POST_SCREEN=Efterbehandling +screen.POST_SCREEN.comment=Ändra efterbearbetningsalternativ. + +screen.LIGHT_SCREEN=Ljus +screen.LIGHT_SCREEN.comment=Ändra ljusalternativ. + +screen.CLOUDS_SCREEN=Sol och moln +screen.CLOUDS_SCREEN.comment=Ändra alternativ för sol och moln. + +screen.FOG_SCREEN=Dimma +screen.FOG_SCREEN.comment=Ändra dimalternativ + +screen.MOTION_BLUR_SCREEN=Rörelseoskärpa +screen.MOTION_BLUR_SCREEN.comment=Ändra rörelseskärpealternativ + +screen.ACCESIBILITY_SCREEN=Tillgänglighet +screen.ACCESIBILITY_SCREEN.comment=Ändra tillgänglighetsalternativ + +screen.CUSTOM_COLORS_SCREEN=Anpassade färger +screen.CUSTOM_COLORS_SCREEN.comment=Ställ in anpassade färger +screen.CUSTOM_COLORS_DAY=Dag anpassade färger +screen.CUSTOM_COLORS_SUNSET=Solnedgång/gryning anpassade färger +screen.CUSTOM_COLORS_NIGHT=Natt anpassade färger +screen.CUSTOM_COLORS_WATER=Vatten anpassad färg \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lang/tr_TR.lang b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lang/tr_TR.lang new file mode 100644 index 0000000..1959439 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lang/tr_TR.lang @@ -0,0 +1,287 @@ +#Profiles +############################ +profile.no_effects=Efekt yok +profile.shadowless_low=Gölgesiz Düşük +profile.shadowless_medium=Gölgesiz Orta +profile.shadowless_high=Gölgesiz Yüksek +profile.low=Düşük +profile.medium=Orta +profile.high=Yüksek +profile.extreme=Olağanüstü +profile.extremeplus=Olağanüstü+ + +profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük performanslı makineler için tasarlanmıştır. Geleneksel profiller yavaş yavaş daha kaliteli gölgeler ve daha gelişmiş ağır efektler ekler. Lütfen mevcut seçenekleri deneyin ve sizin için en iyi kombinasyonu bulun. + +#About +############################# +option.ACERCADE=MakeUp +option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. +value.ACERCADE.0=v.9.1c + +#Options +############################# +option.SHADOW_CASTING=Gölgeler + +option.SHADOW_DISTANCE_SLIDER=Gölge mesafesi +value.SHADOW_DISTANCE_SLIDER.0=Kısa +value.SHADOW_DISTANCE_SLIDER.1=Orta +value.SHADOW_DISTANCE_SLIDER.2=Uzun + +option.SHADOW_QTY_SLIDER=Gölge kalitesi +value.SHADOW_QTY_SLIDER.0=Yok +value.SHADOW_QTY_SLIDER.1=Düşük +value.SHADOW_QTY_SLIDER.2=Orta +value.SHADOW_QTY_SLIDER.3=Yüksek + +option.REFLECTION_SLIDER=Yansıma +value.REFLECTION_SLIDER.0=Kapalı +value.REFLECTION_SLIDER.1=Ters çevrilmiş +value.REFLECTION_SLIDER.2=Işın yürüyüşü + +option.SHADOW_TYPE=Gölge türü +value.SHADOW_TYPE.0=Basit +value.SHADOW_TYPE.1=Filtrelenmiş + +option.SHADOW_BLUR=Gölge bulanıklığı yoğunluğu + +option.COLORED_SHADOW=Renkli gölgeler + +option.VOL_LIGHT=Işık hüzmesi +value.VOL_LIGHT.0=Devre dışı +value.VOL_LIGHT.1=Derinlik tabanlı +value.VOL_LIGHT.2=Volumetrik + +option.DOF=Alan derinliği + +option.DOF_STRENGTH=AD gücü + +option.DOF_SAMPLES_FACTOR=AD örnekleri faktörü + +option.AO=Ortam aydınlatması +value.AO.0=Kapalı +value.AO.1=Açık + +option.AOSTEPS=OA örnek çiftleri + +option.AO_STRENGTH=OA gücü + +option.AA_TYPE=Geçici örnekleme +value.AA_TYPE.0=Kapalı +value.AA_TYPE.1=Gürültü giderme +value.AA_TYPE.2=TAA +value.AA_TYPE.3=Keskin TAA + +option.MOTION_BLUR=Hareket bulanıklığı +option.MOTION_BLUR_STRENGTH=Hareket bulanıklığı gücü +option.MOTION_BLUR_SAMPLES=Hareket bulanıklığı örnekleri + +option.VANILLA_WATER=Vanilla tarzı su + +option.WATER_TEXTURE=Su dokusu +value.WATER_TEXTURE.0=Hayır +value.WATER_TEXTURE.1=Evet + +option.WATER_COLOR_SOURCE=Su rengi +value.WATER_COLOR_SOURCE.0=Shader şeması +value.WATER_COLOR_SOURCE.1=Kaynak paketi + +option.REFLECTION=Yansıma +value.REFLECTION.0=Kapalı +value.REFLECTION.1=Açık + +option.REFRACTION=Işık kırılması +value.REFRACTION.0=Kapalı +value.REFRACTION.1=Açık + +option.SSR_TYPE=Yansıma türü +value.SSR_TYPE.0=Ters çevrilmiş +value.SSR_TYPE.1=Işık yürüyüşü + +option.SUN_REFLECTION=Güneş yansıması +value.SUN_REFLECTION.0=Kapalı +value.SUN_REFLECTION.1=Açık + +option.CLOUD_REFLECTION=Bulut yansıması + +option.WAVING=Sallanan bitkiler +value.WAVING.0=Hayır +value.WAVING.1=Evet + +option.CHROMA_ABER=Renk sapması +value.CHROMA_ABER.0=Hayır +value.CHROMA_ABER.1=Evet + +option.CHROMA_ABER_STRENGTH=Renk sapması gücü + +option.WATER_ABSORPTION=Su absorbe indexi + +option.WATER_TURBULENCE=Dalga gücü +value.WATER_TURBULENCE.7.0=Çok düşük +value.WATER_TURBULENCE.1.75=Düşük +value.WATER_TURBULENCE.0.9=Orta +value.WATER_TURBULENCE.0.5=Yüksek + +option.COLOR_SCHEME=Renk şeması +value.COLOR_SCHEME.0=Ethereal +value.COLOR_SCHEME.1=Yeni shoka +value.COLOR_SCHEME.2=Shoka +value.COLOR_SCHEME.3=Legacy +value.COLOR_SCHEME.4=Captain +value.COLOR_SCHEME.5=Psychedelic +value.COLOR_SCHEME.6=Cocoa +value.COLOR_SCHEME.99=Özel + +option.LIGHT_SUNSET_COLOR_R=Gün batımı ışığı R +option.LIGHT_SUNSET_COLOR_G=Gün batımı ışığı G +option.LIGHT_SUNSET_COLOR_B=Gün batımı ışığı B + +option.LIGHT_DAY_COLOR_R=Gün ışığı R +option.LIGHT_DAY_COLOR_G=Gün ışığı G +option.LIGHT_DAY_COLOR_B=Gün ışığı B + +option.LIGHT_NIGHT_COLOR_R=Gece ışığı R +option.LIGHT_NIGHT_COLOR_G=Gece ışığı G +option.LIGHT_NIGHT_COLOR_B=Gece ışığı B + +option.ZENITH_SUNSET_COLOR_R=Zirve gün batımı R +option.ZENITH_SUNSET_COLOR_G=Zirve gün batımı G +option.ZENITH_SUNSET_COLOR_B=Zirve gün batımı B + +option.ZENITH_DAY_COLOR_R=Zirve gün R +option.ZENITH_DAY_COLOR_G=Zirve gün G +option.ZENITH_DAY_COLOR_B=Zirve gün B + +option.ZENITH_NIGHT_COLOR_R=Zirve gece R +option.ZENITH_NIGHT_COLOR_G=Zirve gece G +option.ZENITH_NIGHT_COLOR_B=Zirve gece B + +option.HORIZON_SUNSET_COLOR_R=Ufuk gün batımı R +option.HORIZON_SUNSET_COLOR_G=Ufuk gün batımı G +option.HORIZON_SUNSET_COLOR_B=Ufuk gün batımı B + +option.HORIZON_DAY_COLOR_R=Ufuk gün R +option.HORIZON_DAY_COLOR_G=Ufuk gün G +option.HORIZON_DAY_COLOR_B=Ufuk gün B + +option.HORIZON_NIGHT_COLOR_R=Ufuk gece R +option.HORIZON_NIGHT_COLOR_G=Ufuk gece G +option.HORIZON_NIGHT_COLOR_B=Ufuk gece B + +option.WATER_COLOR_R=Su R +option.WATER_COLOR_G=Su G +option.WATER_COLOR_B=Su B + +option.NV_COLOR_R=Gece görüşü R çarpanı +option.NV_COLOR_G=Gece görüşü G çarpanı +option.NV_COLOR_B=Gece görüşü B çarpanı + +option.OMNI_TINT_CUSTOM=Çok yönlü renk tonu + +option.AVOID_DARK_LEVEL=Mağara parlaklığı + +option.NIGHT_BRIGHT=Gece parlaklığı + +option.V_CLOUDS=Bulutlar +value.V_CLOUDS.0=Vanilla +value.V_CLOUDS.1=Volumetrik statik +value.V_CLOUDS.2=Volumetrik dinamik + +option.CLOUD_VOL_STYLE=Volumetrik bulut stili +value.CLOUD_VOL_STYLE.0=Doğal +value.CLOUD_VOL_STYLE.1=Karesel + +option.CLOUD_SPEED=Bulut hızı +value.CLOUD_SPEED.0=Normal +value.CLOUD_SPEED.1=Hızlandırılmış 1 +value.CLOUD_SPEED.2=Hızlandırılmış 2 + +option.END_CLOUDS=End bulutları + +option.CLOUD_STEPS_AVG=Bulut örnekleri + +option.BLOOM=Tazelik + +option.COLOR_BLINDNESS=Renk körlüğü + +option.COLOR_BLIND_MODE=Renk körü türü +value.COLOR_BLIND_MODE.0=Protanopia +value.COLOR_BLIND_MODE.1=Deuteranopia +value.COLOR_BLIND_MODE.2=Tritanopia + +option.DEBUG_MODE=Hata ayıklama modu + +option.BLOOM_SAMPLES=Tazelik örnek çiftleri + +option.BLACK_ENTITY_FIX=Siyah canlı DÜZELTMESİ +value.BLACK_ENTITY_FIX.0=Kapalı +value.BLACK_ENTITY_FIX.1=Açık + +option.FOG_ACTIVE=Sis etkin + +option.FOG_ADJUST=Sis yoğunluğu +value.FOG_ADJUST.20.0=Sis yok +value.FOG_ADJUST.10.0=Ultra düşük +value.FOG_ADJUST.8.0=Çok düşük +value.FOG_ADJUST.4.0=Düşük +value.FOG_ADJUST.2.0=Orta +value.FOG_ADJUST.1.0=YÜksek + +option.BLOCKLIGHT_TEMP=Blok ışığı sıcaklığı +value.BLOCKLIGHT_TEMP.0=Daha sıcak +value.BLOCKLIGHT_TEMP.1=Sıcak +value.BLOCKLIGHT_TEMP.2=Sarı +value.BLOCKLIGHT_TEMP.3=Soluk sarı +value.BLOCKLIGHT_TEMP.4=Beyaz ışık + +option.sunPathRotation=Güneş açısı + +option.USE_BASIC_SH=Özel boyutsal basit shader + +option.MATERIAL_GLOSS=Malzeme parlaklığı + +option.DYN_HAND_LIGHT=Sahte dinamik ışık + +#Screens +screen.ADVANCED_SCREEN=Gelişmiş seçenekler +screen.ADVANCED_SCREEN.comment=Gelişmiş seçenekleri ayarlayın. + +screen.COMPATIBILITY_SCREEN=Uyumluluk +screen.COMPATIBILITY_SCREEN.comment=Uyumluluk seçeneklerini ayarlayın. + +screen.SHADOWS_SCREEN=Gölgeler +screen.SHADOWS_SCREEN.comment=Gölge seçeneklerini ayarlayın. + +screen.DOF_SCREEN=Alan derinliği +screen.DOF_SCREEN.comment=Alan derinliği (AD) seçeneklerini ayarlayın. + +screen.AO_SCREEN=Ortam aydınlatması +screen.AO_SCREEN.comment=Ortam aydınlatması (OA) seçeneklerini ayarlayın. + +screen.WATER_SCREEN=Su +screen.WATER_SCREEN.comment=Su seçeneklerini ayarlayın. + +screen.POST_SCREEN= İleri efektler +screen.POST_SCREEN.comment=İleri efekt seçeneklerini ayarlayın. + +screen.LIGHT_SCREEN=Işık +screen.LIGHT_SCREEN.comment=Işık seçeneklerini ayarlayın. + +screen.CLOUDS_SCREEN=Güneş ve bulutlar +screen.CLOUDS_SCREEN.comment=Güneş ve bulut seçeneklerini ayarlayın. + +screen.FOG_SCREEN=Sis +screen.FOG_SCREEN.comment=Sis seçeneklerini ayarlayın. + +screen.MOTION_BLUR_SCREEN=Hareket bulanıklığı +screen.MOTION_BLUR_SCREEN.comment=Hareket bulanıklığı seçeneklerini ayarlayın. + +screen.ACCESIBILITY_SCREEN=Erişilebilirlik +screen.ACCESIBILITY_SCREEN.comment=Erişilebilirlik seçeneklerini ayarlayın. + +screen.CUSTOM_COLORS_SCREEN=Özel renkler +screen.CUSTOM_COLORS_SCREEN.comment=Özel renkleri ayarla +screen.CUSTOM_COLORS_DAY=Gündüz özel renkleri +screen.CUSTOM_COLORS_SUNSET=Gün batımı/şafak özel renkleri +screen.CUSTOM_COLORS_NIGHT=Gece özel renkleri +screen.CUSTOM_COLORS_WATER=Su özel rengi +screen.CUSTOM_COLORS_NV=Gece görüşü özel rengi diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lang/zh_CN.lang b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lang/zh_CN.lang new file mode 100644 index 0000000..e9883d0 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lang/zh_CN.lang @@ -0,0 +1,292 @@ +#Profiles +############################ +profile.no_effects=无效果 +profile.shadowless_low=无阴影-低 +profile.shadowless_medium=无阴影-中 +profile.shadowless_high=无阴影-高 +profile.low=低 +profile.medium=中 +profile.high=高 +profile.extreme=极致 +profile.extremeplus=极致+ + +profile.comment=“无阴影”配置文件是为低性能电脑设计的,不渲染阴影。 常规的配置文件会逐渐添加更高质量的阴影、更多高级的重量级效果。 请体验现有的选项,找到最适合你的配置组合。 + +#About +############################# +option.ACERCADE=MakeUp +option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 +value.ACERCADE.0=v.9.1c + +#Options +############################# +option.SHADOW_CASTING=阴影 + +option.SHADOW_DISTANCE_SLIDER=阴影距离 +value.SHADOW_DISTANCE_SLIDER.0=近 +value.SHADOW_DISTANCE_SLIDER.1=中 +value.SHADOW_DISTANCE_SLIDER.2=远 + +option.SHADOW_QTY_SLIDER=阴影质量 +value.SHADOW_QTY_SLIDER.0=无 +value.SHADOW_QTY_SLIDER.1=低 +value.SHADOW_QTY_SLIDER.2=中 +value.SHADOW_QTY_SLIDER.3=高 + +option.REFLECTION_SLIDER=反射 +value.REFLECTION_SLIDER.0=关闭 +value.REFLECTION_SLIDER.1=图像翻转 +value.REFLECTION_SLIDER.2=光线步进 + +option.SHADOW_TYPE=阴影类型 +value.SHADOW_TYPE.0=简单 +value.SHADOW_TYPE.1=过滤 + +option.SHADOW_BLUR=阴影模糊强度 + +option.COLORED_SHADOW=着色阴影 + +option.VOL_LIGHT=体积光 +value.VOL_LIGHT.0=禁用 +value.VOL_LIGHT.1=基于深度 +value.VOL_LIGHT.2=体积 + +option.DOF=景深 + +option.DOF_STRENGTH=景深强度 + +option.DOF_SAMPLES_FACTOR=景深采样因子 + +option.AO=环境光遮蔽 +value.AO.0=关 +value.AO.1=开 + +option.AOSTEPS=环境光遮蔽采样配对 + +option.AO_STRENGTH=环境光遮蔽强度 + +option.AA_TYPE=时间采样 +value.AA_TYPE.0=关闭 +value.AA_TYPE.1=降噪 +value.AA_TYPE.2=时间抗锯齿 (TAA) +value.AA_TYPE.3=时间抗锯齿-锐化 + +option.MOTION_BLUR=动态模糊 +option.MOTION_BLUR_STRENGTH=动态模糊强度 +option.MOTION_BLUR_SAMPLES=动态模糊采样 + +option.VANILLA_WATER=原版样式水体 + +option.WATER_TEXTURE=水体纹理 +value.WATER_TEXTURE.0=关 +value.WATER_TEXTURE.1=开 + +option.WATER_COLOR_SOURCE=水体颜色 +value.WATER_COLOR_SOURCE.0=着色器方案 +value.WATER_COLOR_SOURCE.1=资源包 + +option.REFLECTION=反射 +value.REFLECTION.0=关 +value.REFLECTION.1=开 + +option.REFRACTION=折射 +value.REFRACTION.0=关 +value.REFRACTION.1=开 + +option.SSR_TYPE=反射类型 +value.SSR_TYPE.0=图像翻转 +value.SSR_TYPE.1=光线步进 + +option.SUN_REFLECTION=太阳反射 +value.SUN_REFLECTION.0=关闭 +value.SUN_REFLECTION.1=开 + +option.CLOUD_REFLECTION=体积云反射 + +option.WAVING=植物摇晃 +value.WAVING.0=关 +value.WAVING.1=开 + +option.CHROMA_ABER=色差 +value.CHROMA_ABER.0=关 +value.CHROMA_ABER.1=开 + +option.CHROMA_ABER_STRENGTH=色差强度 + +option.WATER_ABSORPTION=水体吸收系数 + +option.WATER_TURBULENCE=波浪强度 +value.WATER_TURBULENCE.7.0=非常低 +value.WATER_TURBULENCE.1.75=低 +value.WATER_TURBULENCE.0.9=中 +value.WATER_TURBULENCE.0.5=高 + +option.COLOR_SCHEME=配色方案 +value.COLOR_SCHEME.0=Ethereal (空灵) +value.COLOR_SCHEME.1=New shoka +value.COLOR_SCHEME.2=Shoka +value.COLOR_SCHEME.3=Legacy (遗产) +value.COLOR_SCHEME.4=Captain +value.COLOR_SCHEME.5=Psychedelic (迷幻) +value.COLOR_SCHEME.6=Cocoa (可可) +value.COLOR_SCHEME.7=Testigo +value.COLOR_SCHEME.99=自定义 + +option.LIGHT_SUNSET_COLOR_R=光照 - 日落 - 红 +option.LIGHT_SUNSET_COLOR_G=光照 - 日落 - 绿 +option.LIGHT_SUNSET_COLOR_B=光照 - 日落 - 蓝 + +option.LIGHT_DAY_COLOR_R=光照 - 白天 - 红 +option.LIGHT_DAY_COLOR_G=光照 - 白天 - 绿 +option.LIGHT_DAY_COLOR_B=光照 - 白天 - 蓝 + +option.LIGHT_NIGHT_COLOR_R=光照 - 夜晚 - 红 +option.LIGHT_NIGHT_COLOR_G=光照 - 夜晚 - 绿 +option.LIGHT_NIGHT_COLOR_B=光照 - 夜晚 - 蓝 + +option.ZENITH_SUNSET_COLOR_R=天顶 - 日落 - 红 +option.ZENITH_SUNSET_COLOR_G=天顶 - 日落 - 绿 +option.ZENITH_SUNSET_COLOR_B=天顶 - 日落 - 蓝 + +option.ZENITH_DAY_COLOR_R=天顶 - 白天 - 红 +option.ZENITH_DAY_COLOR_G=天顶 - 白天 - 绿 +option.ZENITH_DAY_COLOR_B=天顶 - 白天 - 蓝 + +option.ZENITH_NIGHT_COLOR_R=天顶 - 夜晚 - 红 +option.ZENITH_NIGHT_COLOR_G=天顶 - 夜晚 - 绿 +option.ZENITH_NIGHT_COLOR_B=天顶 - 夜晚 - 蓝 + +option.HORIZON_SUNSET_COLOR_R=地平线 - 日落 - 红 +option.HORIZON_SUNSET_COLOR_G=地平线 - 日落 - 绿 +option.HORIZON_SUNSET_COLOR_B=地平线 - 日落 - 蓝 + +option.HORIZON_DAY_COLOR_R=地平线 - 白天 - 红 +option.HORIZON_DAY_COLOR_G=地平线 - 白天 - 绿 +option.HORIZON_DAY_COLOR_B=地平线 - 白天 - 蓝 + +option.HORIZON_NIGHT_COLOR_R=地平线 - 夜晚 - 红 +option.HORIZON_NIGHT_COLOR_G=地平线 - 夜晚 - 绿 +option.HORIZON_NIGHT_COLOR_B=地平线 - 夜晚 - 蓝 + +option.WATER_COLOR_R=水体颜色 - 红 +option.WATER_COLOR_G=水体颜色 - 绿 +option.WATER_COLOR_B=水体颜色 - 蓝 + +option.NV_COLOR_R=夜视色调 - 红 +option.NV_COLOR_G=夜视色调 - 绿 +option.NV_COLOR_B=夜视色调 - 蓝 + +option.OMNI_TINT_CUSTOM=全局色调 + +option.AVOID_DARK_LEVEL=洞穴亮度 + +option.NIGHT_BRIGHT=夜晚亮度 + +option.V_CLOUDS=云层 +value.V_CLOUDS.0=原版 +value.V_CLOUDS.1=静态体积云 +value.V_CLOUDS.2=动态体积云 + +option.CLOUD_VOL_STYLE=体积云风格 +value.CLOUD_VOL_STYLE.0=自然 +value.CLOUD_VOL_STYLE.1=方块 + +option.CLOUD_SPEED=云层速度 +value.CLOUD_SPEED.0=正常 +value.CLOUD_SPEED.1=延时摄影 1 +value.CLOUD_SPEED.2=延时摄影 2 + +option.END_CLOUDS=末地云层 + +option.CLOUD_STEPS_AVG=云层采样 + +option.BLOOM=泛光 + +option.COLOR_BLINDNESS=色盲模式 + +option.COLOR_BLIND_MODE=色盲类型 +value.COLOR_BLIND_MODE.0=红色盲 +value.COLOR_BLIND_MODE.1=绿色盲 +value.COLOR_BLIND_MODE.2=蓝色盲 + +option.DEBUG_MODE=调试模式 + +option.BLOOM_SAMPLES=泛光采样配对 + +option.BLACK_ENTITY_FIX=修复黑色实体的缺陷 +value.BLACK_ENTITY_FIX.0=关 +value.BLACK_ENTITY_FIX.1=开 + +option.FOG_ACTIVE=启用雾 + +option.FOG_ADJUST=雾浓度 +value.FOG_ADJUST.20.0=关闭雾 +value.FOG_ADJUST.10.0=超低 +value.FOG_ADJUST.8.0=非常低 +value.FOG_ADJUST.4.0=低 +value.FOG_ADJUST.2.0=中 +value.FOG_ADJUST.1.0=高 + +option.NETHER_FOG_DISTANCE=下界迷雾距离 +value.NETHER_FOG_DISTANCE.0=渲染距离 +value.NETHER_FOG_DISTANCE.1=原版 + +option.BLOCKLIGHT_TEMP=方块光照色温 +value.BLOCKLIGHT_TEMP.0=很暖 +value.BLOCKLIGHT_TEMP.1=暖色 +value.BLOCKLIGHT_TEMP.2=黄色 +value.BLOCKLIGHT_TEMP.3=淡黄色 +value.BLOCKLIGHT_TEMP.4=白光 + +option.sunPathRotation=太阳角度 + +option.USE_BASIC_SH=自定义维度基础着色器 + +option.MATERIAL_GLOSS=材质光泽 + +option.DYN_HAND_LIGHT=伪动态光源 + +#Screens +screen.ADVANCED_SCREEN=高级选项 +screen.ADVANCED_SCREEN.comment=设置高级选项 + +screen.COMPATIBILITY_SCREEN=兼容性 +screen.COMPATIBILITY_SCREEN.comment=设置兼容性选项 + +screen.SHADOWS_SCREEN=阴影 +screen.SHADOWS_SCREEN.comment=设置阴影选项 + +screen.DOF_SCREEN=景深 +screen.DOF_SCREEN.comment=设置景深选项 + +screen.AO_SCREEN=环境光遮蔽 +screen.AO_SCREEN.comment=设置环境光遮蔽选项 + +screen.WATER_SCREEN=水体 +screen.WATER_SCREEN.comment=设置水体选项。 + +screen.POST_SCREEN=后期效果 +screen.POST_SCREEN.comment=设置后期效果选项。 + +screen.LIGHT_SCREEN=光照 +screen.LIGHT_SCREEN.comment=设置光照选项。 + +screen.CLOUDS_SCREEN=太阳 & 云层 +screen.CLOUDS_SCREEN.comment=设置太阳和云层的选项。 + +screen.FOG_SCREEN=雾 +screen.FOG_SCREEN.comment=设置雾选项 + +screen.MOTION_BLUR_SCREEN=动态模糊 +screen.MOTION_BLUR_SCREEN.comment=设置动态模糊选项 + +screen.ACCESIBILITY_SCREEN=无障碍 +screen.ACCESIBILITY_SCREEN.comment=设置无障碍选项 + +screen.CUSTOM_COLORS_SCREEN=自定义颜色 +screen.CUSTOM_COLORS_SCREEN.comment=设置自定义颜色 +screen.CUSTOM_COLORS_DAY=白天的自定义颜色 +screen.CUSTOM_COLORS_SUNSET=日落/黎明的自定义颜色 +screen.CUSTOM_COLORS_NIGHT=夜晚的自定义颜色 +screen.CUSTOM_COLORS_WATER=水体的自定义颜色 +screen.CUSTOM_COLORS_NV=夜视的自定义颜色 diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/aberration.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/aberration.glsl new file mode 100644 index 0000000..c1c0e66 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/aberration.glsl @@ -0,0 +1,17 @@ +/* MakeUp - aberration.glsl +Color aberration effect. +*/ + +vec3 color_aberration() { + vec2 offset = texcoord - 0.5; + + offset *= vec2(0.125) * CHROMA_ABER_STRENGTH; + + vec3 aberrated_color = vec3(0.0); + + aberrated_color.r = texture2D(colortex1, texcoord - offset).r; + aberrated_color.g = texture2D(colortex1, texcoord - (offset * 0.5)).g; + aberrated_color.b = texture2D(colortex1, texcoord).b; + + return aberrated_color; +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/ao.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/ao.glsl new file mode 100644 index 0000000..3b80e21 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/ao.glsl @@ -0,0 +1,46 @@ +/* MakeUp - ao.glsl +Based on old Capt Tatsu's ambient occlusion functions. + +*/ + +float dbao(float dither) { + float ao = 0.0; + + float inv_steps = 1.0 / AOSTEPS; + vec2 offset; + float n; + float dither_x; + + float d = texture2D(depthtex0, texcoord.xy).r; + float hand_check = d < 0.56 ? 1024.0 : 1.0; + d = ld(d); + + float sd = 0.0; + float angle = 0.0; + float dist = 0.0; + float far_and_check = hand_check * 2.0 * far; + vec2 scale = vec2(inv_aspect_ratio, 1.0) * (fov_y_inv / (d * far)); + vec2 scale_factor = scale * inv_steps; + float sample_d; + + for (int i = 0; i < AOSTEPS; i++) { + dither_x = (i + dither); + n = fract(dither_x * 1.6180339887) * 3.141592653589793; + offset = vec2(cos(n), sin(n)) * dither_x * scale_factor; + + sd = ld(texture2D(depthtex0, texcoord.xy + offset).r); + sample_d = (d - sd) * far_and_check; + angle = clamp(0.5 - sample_d, 0.0, 1.0); + dist = clamp(0.25 * sample_d - 1.0, 0.0, 1.0); + + sd = ld(texture2D(depthtex0, texcoord.xy - offset).r); + sample_d = (d - sd) * far_and_check; + angle += clamp(0.5 - sample_d, 0.0, 1.0); + dist += clamp(0.25 * sample_d - 1.0, 0.0, 1.0); + + ao += clamp(angle + dist, 0.0, 1.0); + } + ao /= AOSTEPS; + + return sqrt((ao * AO_STRENGTH) + (1.0 - AO_STRENGTH)); +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/basic_utils.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/basic_utils.glsl new file mode 100644 index 0000000..9a990bf --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/basic_utils.glsl @@ -0,0 +1,73 @@ +/* MakeUp - basic_utils.glsl +Misc utilities. + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +float square_pow(float x) { + return x * x; +} + +float cube_pow(float x) { + return x * x * x; +} + +float fourth_pow(float x) { + float temp_2 = x * x; + return temp_2 * temp_2; +} + +float fifth_pow(float x) { + float temp_2 = x * x; + return temp_2 * temp_2 * x; +} + +float sixth_pow(float x) { + float temp_2 = x * x; + return temp_2 * temp_2 * temp_2; +} + +vec3 vec3_square_pow(vec3 x) { + return x * x; +} + +vec3 vec3_cube_pow(vec3 x) { + return x * x * x; +} + +vec3 vec3_fourth_pow(vec3 x) { + vec3 temp_2 = x * x; + return temp_2 * temp_2; +} + +vec3 vec3_fifth_pow(vec3 x) { + vec3 temp_2 = x * x; + return temp_2 * temp_2 * x; +} + +vec3 vec3_sixth_pow(vec3 x) { + vec3 temp_2 = x * x; + return temp_2 * temp_2 * temp_2; +} + +vec4 vec4_square_pow(vec4 x) { + return x * x; +} + +vec4 vec4_cube_pow(vec4 x) { + return x * x * x; +} + +vec4 vec4_fourth_pow(vec4 x) { + return x * x * x * x; +} + +vec4 vec3_fifth_pow(vec4 x) { + vec4 temp_2 = x * x; + return temp_2 * temp_2 * x; +} + +vec4 vec3_sixth_pow(vec4 x) { + vec4 temp_2 = x * x; + return temp_2 * temp_2 * temp_2; +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/bloom.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/bloom.glsl new file mode 100644 index 0000000..d77a9ae --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/bloom.glsl @@ -0,0 +1,30 @@ +/* MakeUp - bloom.glsl +Bloom functions. + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +vec3 mipmap_bloom(sampler2D image, vec2 coords, float dither) { + vec3 blur_sample = vec3(0.0); + vec2 blur_radius_vec = vec2(0.1 * inv_aspect_ratio, 0.1); + + int sample_c = int(BLOOM_SAMPLES); + + vec2 blur_radios_factor = blur_radius_vec * (1.0 / BLOOM_SAMPLES); + float n; + vec2 offset; + float dither_x; + + for(int i = 0; i < sample_c; i++) { + dither_x = i + dither; + n = fract(dither_x * 1.6180339887) * 3.141592653589793; + offset = vec2(cos(n), sin(n)) * dither_x * blur_radios_factor; + + blur_sample += texture2D(image, coords + offset, -1.0).rgb; + blur_sample += texture2D(image, coords - offset, -1.0).rgb; + } + + blur_sample /= (BLOOM_SAMPLES * 2.0); + + return blur_sample; +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/blur.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/blur.glsl new file mode 100644 index 0000000..d606d96 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/blur.glsl @@ -0,0 +1,36 @@ +/* MakeUp - blur.glsl +Blur functions. + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +vec3 noised_blur(vec4 color_depth, sampler2D image, vec2 coords, float force, float dither) { + vec3 block_color = color_depth.rgb; + float the_depth = color_depth.a; + float blur_radius = 0.0; + + if (the_depth > 0.56) { // Manos no + blur_radius = + max(abs(the_depth - centerDepthSmooth) - 0.000075, 0.0) * fov_y_inv; + blur_radius = blur_radius * inversesqrt(0.1 + blur_radius * blur_radius) * force; + blur_radius = min(blur_radius, 0.1); + } + + if (blur_radius > min(pixel_size_x, pixel_size_y)) { + vec3 blur_sample = vec3(0.0); + vec2 blur_radius_vec = vec2(blur_radius * inv_aspect_ratio, blur_radius); + + float dither_base = dither; + dither *= 6.283185307179586; + + float current_radius = (0.25 + dither_base); + vec2 offset = vec2(cos(dither), sin(dither)) * blur_radius_vec * current_radius; + + blur_sample += texture2D(image, coords + offset, -2.0).rgb; + blur_sample += texture2D(image, coords - offset, -2.0).rgb; + + block_color = blur_sample * 0.5; + } + + return block_color; +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/color_blindness.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/color_blindness.glsl new file mode 100644 index 0000000..c1693f1 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/color_blindness.glsl @@ -0,0 +1,40 @@ +/* MakeUp - color_blindness.glsl +The correction algorithm is taken from http://www.daltonize.org/search/label/Daltonize + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +vec3 color_blindness(vec3 color) { + float L = (17.8824 * color.r) + (43.5161 * color.g) + (4.11935 * color.b); + float M = (3.45565 * color.r) + (27.1554 * color.g) + (3.86714 * color.b); + float S = (0.0299566 * color.r) + (0.184309 * color.g) + (1.46709 * color.b); + + float l, m, s; + #if COLOR_BLIND_MODE == 0 // Protanopia + l = 0.0 * L + 2.02344 * M + -2.52581 * S; + m = 0.0 * L + 1.0 * M + 0.0 * S; + s = 0.0 * L + 0.0 * M + 1.0 * S; + #elif COLOR_BLIND_MODE == 1 // Deutranopia + l = 1.0 * L + 0.0 * M + 0.0 * S; + m = 0.494207 * L + 0.0 * M + 1.24827 * S; + s = 0.0 * L + 0.0 * M + 1.0 * S; + #elif COLOR_BLIND_MODE == 2 // Tritanopia + l = 1.0 * L + 0.0 * M + 0.0 * S; + m = 0.0 * L + 1.0 * M + 0.0 * S; + s = -0.395913 * L + 0.801109 * M + 0.0 * S; + #endif + + vec3 error; + error.r = (0.0809444479 * l) + (-0.130504409 * m) + (0.116721066 * s); + error.g = (-0.0102485335 * l) + (0.0540193266 * m) + (-0.113614708 * s); + error.b = (-0.000365296938 * l) + (-0.00412161469 * m) + (0.693511405 * s); + + vec3 diff = color - error; + vec3 correction; + correction.r = 0.0; + correction.g = (diff.r * 0.7) + (diff.g * 1.0); + correction.b = (diff.r * 0.7) + (diff.b * 1.0); + correction = color + correction; + + return correction; +} \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/color_conversion.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/color_conversion.glsl new file mode 100644 index 0000000..3354680 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/color_conversion.glsl @@ -0,0 +1,57 @@ +vec3 rgb_to_xyz(vec3 rgb) { + vec3 xyz; + vec3 rgb2 = rgb; + vec3 mask = vec3(greaterThan(rgb, vec3(0.04045))); + rgb2 = mix(rgb2 / 12.92, pow((rgb2 + 0.055) / 1.055, vec3(2.4)), mask); + + const mat3 rgb_to_xyz_matrix = mat3( + 0.4124564, 0.3575761, 0.1804375, + 0.2126729, 0.7151522, 0.0721750, + 0.0193339, 0.1191920, 0.9503041 + ); + + xyz = rgb_to_xyz_matrix * rgb2; + return xyz; +} + +vec3 xyz_to_lab(vec3 xyz) { + vec3 xyz2 = xyz / vec3(0.95047, 1.0, 1.08883); + vec3 mask = vec3(greaterThan(xyz2, vec3(0.008856))); + xyz2 = mix(7.787 * xyz2 + 16.0 / 116.0, pow(xyz2, vec3(1.0 / 3.0)), mask); + + float L = 116.0 * xyz2.y - 16.0; + float a = 500.0 * (xyz2.x - xyz2.y); + float b = 200.0 * (xyz2.y - xyz2.z); + + return vec3(L, a, b); +} + +vec3 lab_to_xyz(vec3 lab) { + float L = lab.x; + float a = lab.y; + float b = lab.z; + + float y = (L + 16.0) / 116.0; + float x = a / 500.0 + y; + float z = y - b / 200.0; + + vec3 xyz = vec3(x, y, z); + vec3 mask = vec3(greaterThan(xyz, vec3(0.2068966))); + xyz = mix((xyz - 16.0 / 116.0) / 7.787, xyz * xyz * xyz, mask); + + return xyz * vec3(0.95047, 1.0, 1.08883); +} + +vec3 xyz_to_rgb(vec3 xyz) { + const mat3 xyz_to_rgb_matrix = mat3( + 3.2404542, -1.5371385, -0.4985314, + -0.9692660, 1.8760108, 0.0415560, + 0.0556434, -0.2040259, 1.0572252 + ); + + vec3 rgb = xyz_to_rgb_matrix * xyz; + vec3 mask = vec3(greaterThan(rgb, vec3(0.0031308))); + rgb = mix(12.92 * rgb, 1.055 * pow(rgb, vec3(1.0 / 2.4)) - 0.055, mask); + + return clamp(rgb, 0.0, 1.0); +} \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/color_utils.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/color_utils.glsl new file mode 100644 index 0000000..d64ddc9 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/color_utils.glsl @@ -0,0 +1,181 @@ +/* MakeUp - color_utils.glsl +Usefull data for color manipulation. + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +uniform float day_moment; +uniform float day_mixer; +uniform float night_mixer; +uniform int moonPhase; + +#ifdef UNKNOWN_DIM + uniform vec3 fogColor; + uniform vec3 skyColor; +#endif + +#define NIGHT_BRIGHT_PHASE (NIGHT_BRIGHT + (NIGHT_BRIGHT * (abs(4.0 - moonPhase) * 0.25))) + +#if COLOR_SCHEME == 0 // Ethereal + #define OMNI_TINT 0.4 + #define LIGHT_SUNSET_COLOR vec3(0.887528, 0.443394, 0.301044) + #define LIGHT_DAY_COLOR vec3(0.90, 0.84, 0.79) + #define LIGHT_NIGHT_COLOR vec3(0.0317353, 0.0467353, 0.0637353) * NIGHT_BRIGHT_PHASE + + #define ZENITH_SUNSET_COLOR vec3(0.2617647, 0.33529412, 0.52352941) + #define ZENITH_DAY_COLOR vec3(0.0785098, 0.24352941, 0.54901961) + #define ZENITH_NIGHT_COLOR vec3(0.0168, 0.0228, 0.03) * NIGHT_BRIGHT_PHASE + + #define HORIZON_SUNSET_COLOR vec3(1.0, 0.6, 0.394) + #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) + #define HORIZON_NIGHT_COLOR vec3(0.02556, 0.03772, 0.05244) * NIGHT_BRIGHT_PHASE + + #define WATER_COLOR vec3(0.05, 0.1, 0.11) +#elif COLOR_SCHEME == 1 // New shoka + #define OMNI_TINT 0.25 + #define LIGHT_SUNSET_COLOR vec3(1.0, 0.588, 0.3555) + #define LIGHT_DAY_COLOR vec3(0.90, 0.84, 0.79) + #define LIGHT_NIGHT_COLOR vec3(0.04786874, 0.05175001, 0.06112969) * NIGHT_BRIGHT_PHASE + + #define ZENITH_SUNSET_COLOR vec3(0.143, 0.24394118, 0.36450981) + #define ZENITH_DAY_COLOR vec3(0.143, 0.24394118, 0.36450981) + #define ZENITH_NIGHT_COLOR vec3(0.014, 0.019, 0.025) * NIGHT_BRIGHT_PHASE + + #define HORIZON_SUNSET_COLOR vec3(1.0, 0.648, 0.37824) + #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) + #define HORIZON_NIGHT_COLOR vec3(0.0213, 0.0306, 0.0387) * NIGHT_BRIGHT_PHASE + + #define WATER_COLOR vec3(0.05, 0.1, 0.11) +#elif COLOR_SCHEME == 2 // Shoka + #define OMNI_TINT 0.5 + #define LIGHT_SUNSET_COLOR vec3(0.70656, 0.44436, 0.2898) + #define LIGHT_DAY_COLOR vec3(0.91640625, 0.91640625, 0.635375) + #define LIGHT_NIGHT_COLOR vec3(0.04786874, 0.05175001, 0.06112969) * NIGHT_BRIGHT_PHASE + + #define ZENITH_SUNSET_COLOR vec3(0.104, 0.17741177, 0.26509804) + #define ZENITH_DAY_COLOR vec3(0.13, 0.22176471, 0.33137255) + #define ZENITH_NIGHT_COLOR vec3(0.014, 0.019, 0.025) * NIGHT_BRIGHT_PHASE + + #define HORIZON_SUNSET_COLOR vec3(0.715 , 0.5499, 0.416) + #define HORIZON_DAY_COLOR vec3(0.364 , 0.6825, 0.91) + #define HORIZON_NIGHT_COLOR vec3(0.0213, 0.0306, 0.0387) * NIGHT_BRIGHT_PHASE + + #define WATER_COLOR vec3(0.01647059, 0.13882353, 0.16470588) +#elif COLOR_SCHEME == 3 // Legacy + #define OMNI_TINT 0.5 + #define LIGHT_SUNSET_COLOR vec3(0.96876, 0.4356254, 0.26002448) + #define LIGHT_DAY_COLOR vec3(0.88504, 0.88504, 0.8372) + #define LIGHT_NIGHT_COLOR vec3(0.04693014, 0.0507353 , 0.05993107) * NIGHT_BRIGHT_PHASE + + #define ZENITH_SUNSET_COLOR vec3(0.09410295, 0.20145588, 0.34905882) + #define ZENITH_DAY_COLOR vec3(0.182, 0.351, 0.754) + #define ZENITH_NIGHT_COLOR vec3(0.00841175, 0.01651763, 0.025) * NIGHT_BRIGHT_PHASE + + #define HORIZON_SUNSET_COLOR vec3(0.81, 0.44165647, 0.25293529) + #define HORIZON_DAY_COLOR vec3(0.572, 1.014, 1.248) + #define HORIZON_NIGHT_COLOR vec3(0.01078431, 0.02317647, 0.035) * NIGHT_BRIGHT_PHASE + + #define WATER_COLOR vec3(0.01647059, 0.13882353, 0.16470588) +#elif COLOR_SCHEME == 4 // Captain + #define OMNI_TINT 0.5 + #define LIGHT_SUNSET_COLOR vec3(0.84456, 0.52992, 0.26496001) + #define LIGHT_DAY_COLOR vec3(0.83064961, 0.93448079, 1.1032065) + #define LIGHT_NIGHT_COLOR vec3(0.02597646, 0.05195295, 0.069) * NIGHT_BRIGHT_PHASE + + #define ZENITH_SUNSET_COLOR vec3(0.18135 , 0.230256, 0.332592) + #define ZENITH_DAY_COLOR vec3(0.104, 0.26, 0.507) + #define ZENITH_NIGHT_COLOR vec3(0.004 ,0.01, 0.0195) * NIGHT_BRIGHT_PHASE + + #define HORIZON_SUNSET_COLOR vec3(1.3, 0.8632, 0.3952) + #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) + #define HORIZON_NIGHT_COLOR vec3(0.025, 0.035, 0.05) * NIGHT_BRIGHT_PHASE + + #define WATER_COLOR vec3(0.05, 0.1, 0.11) +#elif COLOR_SCHEME == 5 // Psychedelic + #define OMNI_TINT 0.45 + #define LIGHT_SUNSET_COLOR vec3(0.85 , 0.47058824, 0.17921569) + #define LIGHT_DAY_COLOR vec3(0.91021875, 0.95771875, 0.6) + #define LIGHT_NIGHT_COLOR vec3(0.04223712, 0.04566177, 0.05393796) * NIGHT_BRIGHT_PHASE + + #define ZENITH_SUNSET_COLOR vec3(0.18135 , 0.230256, 0.332592) + #define ZENITH_DAY_COLOR vec3(0.104, 0.26, 0.507) + #define ZENITH_NIGHT_COLOR vec3(0.004 ,0.01, 0.0195) * NIGHT_BRIGHT_PHASE + + #define HORIZON_SUNSET_COLOR vec3(1.3, 0.8632, 0.3952) + #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) + #define HORIZON_NIGHT_COLOR vec3(0.025, 0.035, 0.05) * NIGHT_BRIGHT_PHASE + + #define WATER_COLOR vec3(0.018, 0.12 , 0.18) +#elif COLOR_SCHEME == 6 // Cocoa + #define OMNI_TINT 0.4 + #define LIGHT_SUNSET_COLOR vec3(0.918528, 0.5941728, 0.2712528) + #define LIGHT_DAY_COLOR vec3(0.897, 0.897, 0.5718375) + #define LIGHT_NIGHT_COLOR vec3(0.04693014, 0.0507353, 0.05993107) * NIGHT_BRIGHT_PHASE + + #define ZENITH_SUNSET_COLOR vec3(0.117, 0.26, 0.494) + #define ZENITH_DAY_COLOR vec3(0.234, 0.403, 0.676) + #define ZENITH_NIGHT_COLOR vec3(0.014, 0.019, 0.031) * NIGHT_BRIGHT_PHASE + + #define HORIZON_SUNSET_COLOR vec3(1.183, 0.858, 0.611) + #define HORIZON_DAY_COLOR vec3(0.52, 0.975, 1.3) + #define HORIZON_NIGHT_COLOR vec3(0.022, 0.029, 0.049) * NIGHT_BRIGHT_PHASE + + #define WATER_COLOR vec3(0.018, 0.12 , 0.18) +#elif COLOR_SCHEME == 7 // Testigo + #define OMNI_TINT 0.65 + #define LIGHT_SUNSET_COLOR vec3(0.70656, 0.44436, 0.2898) + #define LIGHT_DAY_COLOR vec3(0.88504, 0.88504, 0.8372) + #define LIGHT_NIGHT_COLOR vec3(0.04786874, 0.05175001, 0.06112969) * NIGHT_BRIGHT_PHASE + + #define ZENITH_SUNSET_COLOR vec3(0.104, 0.17741177, 0.26509804) + #define ZENITH_DAY_COLOR vec3(0.05098, 0.25990, 0.44313) + #define ZENITH_NIGHT_COLOR vec3(0.004 ,0.01, 0.0195) * NIGHT_BRIGHT_PHASE + + #define HORIZON_SUNSET_COLOR vec3(0.715 , 0.5499, 0.416) + #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) + #define HORIZON_NIGHT_COLOR vec3(0.025, 0.035, 0.05) * NIGHT_BRIGHT_PHASE + + #define WATER_COLOR vec3(0.0 , 0.2, 0.44313725) +#elif COLOR_SCHEME == 99 // Custom + #define OMNI_TINT OMNI_TINT_CUSTOM + #define LIGHT_SUNSET_COLOR vec3(LIGHT_SUNSET_COLOR_R, LIGHT_SUNSET_COLOR_G, LIGHT_SUNSET_COLOR_B) + #define LIGHT_DAY_COLOR vec3(LIGHT_DAY_COLOR_R, LIGHT_DAY_COLOR_G, LIGHT_DAY_COLOR_B) + #define LIGHT_NIGHT_COLOR vec3(LIGHT_NIGHT_COLOR_R, LIGHT_NIGHT_COLOR_G, LIGHT_NIGHT_COLOR_B) * NIGHT_BRIGHT_PHASE + + #define ZENITH_SUNSET_COLOR vec3(ZENITH_SUNSET_COLOR_R, ZENITH_SUNSET_COLOR_G, ZENITH_SUNSET_COLOR_B) + #define ZENITH_DAY_COLOR vec3(ZENITH_DAY_COLOR_R, ZENITH_DAY_COLOR_G, ZENITH_DAY_COLOR_B) + #define ZENITH_NIGHT_COLOR vec3(ZENITH_NIGHT_COLOR_R, ZENITH_NIGHT_COLOR_G, ZENITH_NIGHT_COLOR_B) * NIGHT_BRIGHT_PHASE + + #define HORIZON_SUNSET_COLOR vec3(HORIZON_SUNSET_COLOR_R, HORIZON_SUNSET_COLOR_G, HORIZON_SUNSET_COLOR_B) + #define HORIZON_DAY_COLOR vec3(HORIZON_DAY_COLOR_R, HORIZON_DAY_COLOR_G, HORIZON_DAY_COLOR_B) + #define HORIZON_NIGHT_COLOR vec3(HORIZON_NIGHT_COLOR_R, HORIZON_NIGHT_COLOR_G, HORIZON_NIGHT_COLOR_B) * NIGHT_BRIGHT_PHASE + + #define WATER_COLOR vec3(WATER_COLOR_R, WATER_COLOR_G, WATER_COLOR_B) +#endif + +#define NV_COLOR vec3(NV_COLOR_R, NV_COLOR_G, NV_COLOR_B) + +#if BLOCKLIGHT_TEMP == 0 + #define CANDLE_BASELIGHT vec3(0.29975, 0.15392353, 0.0799) +#elif BLOCKLIGHT_TEMP == 1 + #define CANDLE_BASELIGHT vec3(0.27475, 0.17392353, 0.0899) +#elif BLOCKLIGHT_TEMP == 2 + #define CANDLE_BASELIGHT vec3(0.24975, 0.19392353, 0.0999) +#elif BLOCKLIGHT_TEMP == 3 + #define CANDLE_BASELIGHT vec3(0.22, 0.19, 0.14) +#else + #define CANDLE_BASELIGHT vec3(0.19, 0.19, 0.19) +#endif + +#include "/lib/day_blend.glsl" + +// Fog parameter per hour +#if VOL_LIGHT == 1 || (VOL_LIGHT == 2 && defined SHADOW_CASTING) || defined UNKNOWN_DIM + #define FOG_DENSITY 3.0 +#else + #define FOG_DAY 3.0 + #define FOG_SUNSET 2.0 + #define FOG_NIGHT 3.0 +#endif + +#include "/lib/color_conversion.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/color_utils_end.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/color_utils_end.glsl new file mode 100644 index 0000000..3f389b8 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/color_utils_end.glsl @@ -0,0 +1,49 @@ +/* MakeUp - color_utils.glsl +Usefull data for color manipulation. + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +uniform float day_moment; +uniform float day_mixer; +uniform float night_mixer; + +#define OMNI_TINT 0.5 +#define LIGHT_SUNSET_COLOR vec3(0.1023825, 0.082467, 0.1023825) +#define LIGHT_DAY_COLOR vec3(0.1023825, 0.082467, 0.1023825) +#define LIGHT_NIGHT_COLOR vec3(0.1023825, 0.082467, 0.1023825) + +#define ZENITH_SUNSET_COLOR vec3(0.0465375, 0.037485, 0.0465375) +#define ZENITH_DAY_COLOR vec3(0.0465375, 0.037485, 0.0465375) +#define ZENITH_NIGHT_COLOR vec3(0.0465375, 0.037485, 0.0465375) + +#define HORIZON_SUNSET_COLOR vec3(0.0465375, 0.037485, 0.0465375) +#define HORIZON_DAY_COLOR vec3(0.0465375, 0.037485, 0.0465375) +#define HORIZON_NIGHT_COLOR vec3(0.0465375, 0.037485, 0.0465375) + +#define WATER_COLOR vec3(0.01647059, 0.13882353, 0.16470588) + +#if BLOCKLIGHT_TEMP == 0 + #define CANDLE_BASELIGHT vec3(0.29975, 0.15392353, 0.0799) +#elif BLOCKLIGHT_TEMP == 1 + #define CANDLE_BASELIGHT vec3(0.27475, 0.17392353, 0.0899) +#elif BLOCKLIGHT_TEMP == 2 + #define CANDLE_BASELIGHT vec3(0.24975, 0.19392353, 0.0999) +#elif BLOCKLIGHT_TEMP == 3 + #define CANDLE_BASELIGHT vec3(0.22, 0.19, 0.14) +#else + #define CANDLE_BASELIGHT vec3(0.19, 0.19, 0.19) +#endif + +#include "/lib/day_blend.glsl" + +// Fog parameter per hour +#if VOL_LIGHT == 1 || (VOL_LIGHT == 2 && defined SHADOW_CASTING) + #define FOG_DENSITY 1.0 +#else + #define FOG_DAY 1.0 + #define FOG_SUNSET 1.0 + #define FOG_NIGHT 1.0 +#endif + +#include "/lib/color_conversion.glsl" \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/color_utils_nether.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/color_utils_nether.glsl new file mode 100644 index 0000000..eff5e45 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/color_utils_nether.glsl @@ -0,0 +1,45 @@ +/* MakeUp - color_utils.glsl +Usefull data for color manipulation. + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +uniform float day_moment; +uniform float day_mixer; +uniform float night_mixer; + +#define OMNI_TINT 0.5 +#define LIGHT_SUNSET_COLOR vec3(0.06885294, 0.06297058, 0.04879411) +#define LIGHT_DAY_COLOR vec3(0.06885294, 0.06297058, 0.04879411) +#define LIGHT_NIGHT_COLOR vec3(0.06885294, 0.06297058, 0.04879411) + +#define ZENITH_SUNSET_COLOR vec3(0.0479638 , 0.04343892, 0.04253394) +#define ZENITH_DAY_COLOR vec3(0.0479638 , 0.04343892, 0.04253394) +#define ZENITH_NIGHT_COLOR vec3(0.0479638 , 0.04343892, 0.04253394) + +#define HORIZON_SUNSET_COLOR vec3(0.0479638 , 0.04343892, 0.04253394) +#define HORIZON_DAY_COLOR vec3(0.0479638 , 0.04343892, 0.04253394) +#define HORIZON_NIGHT_COLOR vec3(0.0479638 , 0.04343892, 0.04253394) + +#define WATER_COLOR vec3(0.01647059, 0.13882353, 0.16470588) + +#if BLOCKLIGHT_TEMP == 0 + #define CANDLE_BASELIGHT vec3(0.29975, 0.15392353, 0.0799) +#elif BLOCKLIGHT_TEMP == 1 + #define CANDLE_BASELIGHT vec3(0.27475, 0.17392353, 0.0899) +#elif BLOCKLIGHT_TEMP == 2 + #define CANDLE_BASELIGHT vec3(0.24975, 0.19392353, 0.0999) +#elif BLOCKLIGHT_TEMP == 3 + #define CANDLE_BASELIGHT vec3(0.22, 0.19, 0.14) +#else + #define CANDLE_BASELIGHT vec3(0.19, 0.19, 0.19) +#endif + +#include "/lib/day_blend.glsl" + +// Fog parameter per hour +#define FOG_DAY 1.0 +#define FOG_SUNSET 1.0 +#define FOG_NIGHT 1.0 + +#include "/lib/color_conversion.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/config.alternate.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/config.alternate.glsl new file mode 100644 index 0000000..9510abf --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/config.alternate.glsl @@ -0,0 +1,323 @@ +/* MakeUp - config.glsl +Config variables + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +// Useful entities +#define ENTITY_SMALLGRASS 10031.0 // Normal grass like entities +#define ENTITY_LOWERGRASS 10175.0 // Lower half only +#define ENTITY_UPPERGRASS 10176.0 // Upper half only +#define ENTITY_SMALLENTS 10059.0 // Crops like entities +#define ENTITY_SMALLENTS_NW 10032.0 // No waveable small ents +#define ENTITY_LEAVES 10018.0 // Leaves +#define ENTITY_VINES 10106.0 // Vines +#define ENTITY_EMMISIVE 10089.0 // Emissors +#define ENTITY_S_EMMISIVE 10090.0 // Emissors +#define ENTITY_F_EMMISIVE 10213.0 // Fake emissors +#define ENTITY_WATER 10008.0 // Water +#define ENTITY_PORTAL 10090.0 // Portal +#define ENTITY_STAINED 10079.0 // Glass +#define ENTITY_METAL 10400.0 // Metal-like glossy blocks +#define ENTITY_SAND 10410.0 // Sand-like glossy blocks +#define ENTITY_FABRIC 10440.0 // Fabric-like glossy blocks + +// Other constants +#define ZENITH_SKY_RAIN_COLOR vec3(.7, .85, 1.0) +#define HORIZON_SKY_RAIN_COLOR vec3(0.35 , 0.425, 0.5) + +// Options +#define REFLECTION_SLIDER 2 // [0 1 2] Reflection quality. - Flipped image: Inaccurate but quick reflection. - Raymarching: Raytraced Screen Space Reflection. + +#if REFLECTION_SLIDER == 0 + #define REFLECTION 0 + #define SSR_TYPE 0 + #define REFLEX_INDEX 0.45 +#elif REFLECTION_SLIDER == 1 + #define REFLECTION 1 + #define SSR_TYPE 0 + #define REFLEX_INDEX 0.7 +#elif REFLECTION_SLIDER == 2 + #define REFLECTION 1 + #define SSR_TYPE 1 + #define REFLEX_INDEX 0.7 +#endif + +#define FOG_ACTIVE // Toggle fog +#define NETHER_FOG_DISTANCE 0 // [0 1] // Sets Nether fog distance to half of the render distance (maximum of 96 blocks) +#define ACERCADE 0 // [0] +#define WAVING 1 // [0 1] Makes objects like leaves or grass move in the wind +#define TINTED_WATER 1 // [0 1] Use the resource pack color for water. +#define REFRACTION 1 // [0 1] Activate refractions. +// #define DOF // Enables depth of field (high performance cost). +#define DOF_STRENGTH 0.09 // [0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13] Depth of field strength. +#define AO 1 // [0 1] Turn on for enhanced ambient occlusion (medium performance cost). +#define AOSTEPS 4 // [4 5 6 7 8 9 10 11] How many samples are taken for AO (high performance cost). +#define AO_STRENGTH 0.70 // [0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.66 0.70 0.75 0.80 0.85] Ambient occlusion strength (strength NOT affect performance). +#define AA_TYPE 2 // [0 1 2 3] No: Disable antialiasing (not recommended). Denoise only: Supersampling is only used to eliminate noise. TAA: Enable antialiasing (Recommended). Sharp TAA: A subtle sharpening effect is used on the TAA. +//#define MOTION_BLUR // Turn on motion blur +#define MOTION_BLUR_STRENGTH 1.0 // [0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0] Set Motion blur strength. Lower framerate -> Lower strength and vice versa is recommended. +#define MOTION_BLUR_SAMPLES 4 // [3 4 5 6 7 8] Motion blur samples +#define SUN_REFLECTION 1 // [0 1] Enable sun (or moon) reflection on water and glass + +#define SHADOW_TYPE 1 // [0 1] Sets the shadow type +#define SHADOW_BLUR 2.0 // [0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0] Shadow blur intensity +// #define COLORED_SHADOW // Attempts to tint the shadow of translucent objects, as well as the associated volumetric light (if active). +#define WATER_ABSORPTION 0.10 // [0.02 0.04 0.06 0.08 0.10 0.12 0.14 0.16 0.18 0.20 0.22 0.24 0.26 0.28 0.30 0.32 0.34 0.36 0.38 0.40 0.42 0.44 0.46 0.48 0.50 0.52 0.54 0.56 0.58 0.60 0.62 0.64 0.66 0.68 0.70 0.72 0.74 0.76 0.78 0.80] Sets how much light the water absorbs. Low levels make the water more transparent. High levels make it more opaque. +#define COLOR_SCHEME 7 // [0 1 2 3 4 5 6 7 99] Ethereal: Old default theme. New shoka: Reinterpretation of a classic. Shoka: The classic. Legacy: Very old default. Captain: A cold preset of stylish colors. Psycodelic: Remaster of old vivid scheme. Cocoa: Warm theme. Testigo: Fantasy and cute scheme. Custom: Choose your colors in advanced options. +#define WATER_TEXTURE 1 // [0 1] Enable or disable resource pack water texture. It does not work properly in 1.12. In that case the default value is recommended. +#define AVOID_DARK_LEVEL 0.030 // [0.000 0.005 0.010 0.015 0.020 0.025 0.030 0.035 0.040 0.045 0.050 0.055 0.060] Minimal omni light intensity in caves. +#define NIGHT_BRIGHT 0.60 // [0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70] Adjusts the brightness of the night light in exteriors. +#define V_CLOUDS 1 // [0 1 2] Volumetric static: The clouds move, but they keep their shape. Volumetric dynamic: Clouds change shape over time, a different cloud landscape every time (medium performance hit). Vanilla: Original vanilla clouds. +#define CLOUD_VOL_STYLE 1 // [0 1] Set the volumetric cloud style. +#define CLOUD_REFLECTION // Set off-screen volumetric clouds reflection (volumetric clouds must be active). +#define END_CLOUDS // Activates drawing of clouds in the end (only works if volumetric clouds are active) +#define BLACK_ENTITY_FIX 0 // [0 1] Removes black entity bug in old video drivers (activate ONLY if you have problems with black entities) +#define BLOOM // Enable or disable bloom effect +#define BLOOM_SAMPLES 4.0 // [4.0 5.0 6.0 7.0 8.0 9.0 10.0] Bloom sample pairs. +#define CHROMA_ABER 0 // [0 1] Enable chroma aberration. +#define CHROMA_ABER_STRENGTH 0.04 // [0.04 0.05 0.06] Chroma aberration strength. +#define VOL_LIGHT 1 // [0 1 2] Depth based: Turn on depth based godrays, they are a bit slow, but can work better than volumetric light for very short shadow distances. Volumetric: It activates the volumetric light, more accurate and faster, but it needs the shadows enabled to work. +// #define VANILLA_WATER // Establishes the appearance of water as vanilla. +#define WATER_COLOR_SOURCE 0 // [0 1] Select the water color source. It does not work properly in 1.12. In that case the default value is recommended. +#define WATER_TURBULENCE 7.0 // [7.0 1.75 0.9 0.5] Set the water waves strength. +#define FOG_ADJUST 2.0 // [10.0 8.0 4.0 2.0 1.0] Sets the fog strength +// #define DEBUG_MODE // Set debug mode. +#define BLOCKLIGHT_TEMP 4 // [0 1 2 3 4] Set blocklight temperature +#define MATERIAL_GLOSS // A very subtle effect that adds some ability to reflect direct light on some blocks. It is most noticeable on metals and luminous objects. +#define DYN_HAND_LIGHT // Toggle the fake dynamic light + +// Custom colors +#define LIGHT_SUNSET_COLOR_R 0.71 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] +#define LIGHT_SUNSET_COLOR_G 0.44 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] +#define LIGHT_SUNSET_COLOR_B 0.29 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] + +#define LIGHT_DAY_COLOR_R 0.89 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] +#define LIGHT_DAY_COLOR_G 0.89 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] +#define LIGHT_DAY_COLOR_B 0.84 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] + +#define LIGHT_NIGHT_COLOR_R 0.048 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] +#define LIGHT_NIGHT_COLOR_G 0.052 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] +#define LIGHT_NIGHT_COLOR_B 0.061 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] + +#define ZENITH_SUNSET_COLOR_R 0.1 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] +#define ZENITH_SUNSET_COLOR_G 0.18 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] +#define ZENITH_SUNSET_COLOR_B 0.27 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] + +#define ZENITH_DAY_COLOR_R 0.06 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] +#define ZENITH_DAY_COLOR_G 0.26 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] +#define ZENITH_DAY_COLOR_B 0.44 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] + +#define ZENITH_NIGHT_COLOR_R 0.004 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] +#define ZENITH_NIGHT_COLOR_G 0.01 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] +#define ZENITH_NIGHT_COLOR_B 0.019 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] + +#define HORIZON_SUNSET_COLOR_R 0.71 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] +#define HORIZON_SUNSET_COLOR_G 0.55 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] +#define HORIZON_SUNSET_COLOR_B 0.42 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] + +#define HORIZON_DAY_COLOR_R 0.65 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] +#define HORIZON_DAY_COLOR_G 0.91 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] +#define HORIZON_DAY_COLOR_B 1.3 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] + +#define HORIZON_NIGHT_COLOR_R 0.025 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] +#define HORIZON_NIGHT_COLOR_G 0.035 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] +#define HORIZON_NIGHT_COLOR_B 0.05 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] + +#define WATER_COLOR_R 0.0 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] +#define WATER_COLOR_G 0.2 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] +#define WATER_COLOR_B 0.44 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] + +#define NV_COLOR_R 0.5 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0] +#define NV_COLOR_G 0.8 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0] +#define NV_COLOR_B 1.0 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0] + +#define OMNI_TINT_CUSTOM 0.65 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] + +#ifdef FOG_ACTIVE + // Don't remove +#endif + +#if NETHER_FOG_DISTANCE == 1 + #define NETHER_SIGHT min(far / 2, 96) +#else + #define NETHER_SIGHT far +#endif + +// Reflection parameters +#define RAYMARCH_STEPS 10 + +// Cloud parameters +#if CLOUD_VOL_STYLE == 1 + #define CLOUD_PLANE_SUP 380.0 + #define CLOUD_PLANE_CENTER 335.0 + #define CLOUD_PLANE 319.0 +#else + #define CLOUD_PLANE_SUP 590.0 + #define CLOUD_PLANE_CENTER 375.0 + #define CLOUD_PLANE 319.0 +#endif + +#define CLOUD_STEPS_AVG 10 // [7 8 9 10 11 12 13 14 15 16] Samples per pixel (high performance impact). +#define CLOUD_SPEED 0 // [0 1 2] Change the speed of clouds for demo purposes. + +#if CLOUD_VOL_STYLE == 1 + #if CLOUD_SPEED == 0 + #define CLOUD_HI_FACTOR 0.001388888888888889 + #define CLOUD_LOW_FACTOR 0.0002777777777777778 + #elif CLOUD_SPEED == 1 + #define CLOUD_HI_FACTOR 0.01388888888888889 + #define CLOUD_LOW_FACTOR 0.002777777777777778 + #elif CLOUD_SPEED == 2 + #define CLOUD_HI_FACTOR 0.1388888888888889 + #define CLOUD_LOW_FACTOR 0.02777777777777778 + #endif +#else + #if CLOUD_SPEED == 0 + #define CLOUD_HI_FACTOR 0.0016666666666666666 + #define CLOUD_LOW_FACTOR 0.0002777777777777778 + #elif CLOUD_SPEED == 1 + #define CLOUD_HI_FACTOR 0.016666666666666666 + #define CLOUD_LOW_FACTOR 0.002777777777777778 + #elif CLOUD_SPEED == 2 + #define CLOUD_HI_FACTOR 0.16666666666666666 + #define CLOUD_LOW_FACTOR 0.02777777777777778 + #endif +#endif + +// Godrays +#define GODRAY_STEPS 6 +#define CHEAP_GODRAY_SAMPLES 4 + +// Color blindness +// #define COLOR_BLINDNESS // Enable color blindness correction +#define COLOR_BLIND_MODE 0 // [0 1 2] Set color blindness type + +// Sun rotation angle +const float sunPathRotation = -25.0; // [-40.0 -35.0 -30.0 -25.0 -20.0 -15.0 -10.0 -5.0 0.0 5.0 10.0 15.0 20.0 25.0 30.0 35.0 40.0] + +#define SHADOW_DISTANCE_SLIDER 1 // [0 1 2] +#define SHADOW_QTY_SLIDER 2 // [1 2 3] + +#define SHADOW_CASTING // Enable or disable shadows. Configure quality in advanced options. + +#ifdef SHADOW_CASTING + // Shadow parameters + const float shadowIntervalSize = 3.0; + + const bool shadowtex0Mipmap = false; + const bool shadowtex1Mipmap = false; + const bool shadowColor0Mipmap = false; + const bool shadowColor1Mipmap = false; + + const bool shadowtex0Clear = false; + const bool shadowtex1Clear = false; + const bool shadowcolor0Clear = false; + const bool shadowcolor1Clear = false; + + #ifndef NO_SHADOWS + #if SHADOW_DISTANCE_SLIDER == 0 + #if SHADOW_QTY_SLIDER == 1 + #define SHADOW_LIMIT 75.0 + const int shadowMapResolution = 300; + const float shadowDistance = 75.0; + #define SHADOW_FIX_FACTOR 0.3 + #define SHADOW_DIST 0.75 + + #elif SHADOW_QTY_SLIDER == 2 + #define SHADOW_LIMIT 75.0 + const int shadowMapResolution = 600; + const float shadowDistance = 75.0; + #define SHADOW_FIX_FACTOR 0.15 + #define SHADOW_DIST 0.81 + + #elif SHADOW_QTY_SLIDER == 3 + #define SHADOW_LIMIT 75.0 + const int shadowMapResolution = 1200; + const float shadowDistance = 75.0; + #define SHADOW_FIX_FACTOR 0.05 + #define SHADOW_DIST 0.81 + + #endif + + #elif SHADOW_DISTANCE_SLIDER == 1 + #if SHADOW_QTY_SLIDER == 1 + #define SHADOW_LIMIT 105.0 + const int shadowMapResolution = 420; + const float shadowDistance = 105.0; + #define SHADOW_FIX_FACTOR 0.28 + #define SHADOW_DIST 0.75 + + #elif SHADOW_QTY_SLIDER == 2 + #define SHADOW_LIMIT 105.0 + const int shadowMapResolution = 840; + const float shadowDistance = 105.0; + #define SHADOW_FIX_FACTOR 0.07 + #define SHADOW_DIST 0.83 + + #elif SHADOW_QTY_SLIDER == 3 + #define SHADOW_LIMIT 105.0 + const int shadowMapResolution = 1680; + const float shadowDistance = 105.0; + #define SHADOW_FIX_FACTOR 0.03 + #define SHADOW_DIST 0.83 + + #endif + + #elif SHADOW_DISTANCE_SLIDER == 2 + #if SHADOW_QTY_SLIDER == 1 + #define SHADOW_LIMIT 255.0 + const int shadowMapResolution = 1020; + const float shadowDistance = 255.0; + #define SHADOW_FIX_FACTOR 0.12 + #define SHADOW_DIST 0.8 + + #elif SHADOW_QTY_SLIDER == 2 + #define SHADOW_LIMIT 255.0 + const int shadowMapResolution = 2040; + const float shadowDistance = 255.0; + #define SHADOW_FIX_FACTOR 0.03 + #define SHADOW_DIST 0.85 + + #elif SHADOW_QTY_SLIDER == 3 + #define SHADOW_LIMIT 255.0 + const int shadowMapResolution = 4080; + const float shadowDistance = 255.0; + #define SHADOW_FIX_FACTOR 0.015 + #define SHADOW_DIST 0.87 + + #endif + #endif + + #if VOL_LIGHT == 2 + const float shadowDistanceRenderMul = -1.0; + #else + const float shadowDistanceRenderMul = 1.0; + #endif + + const bool shadowHardwareFiltering = true; + const bool shadowtex1Nearest = false; + #endif + +#else + #define SHADOW_DIST 0.0 + #define SHADOW_RES 0 + const int shadowMapResolution = 100; + const float shadowDistance = 60.0; +#endif + +// Redefined constants +#if AO == 0 + const float ambientOcclusionLevel = 0.7; +#else + const float ambientOcclusionLevel = 0.0; +#endif + +const float eyeBrightnessHalflife = 6.0; +const float centerDepthHalflife = 0.66; + +// DH exclusive +#if defined DISTANT_HORIZONS + #define TRANSITION_DH_SUP 0.05 + #define TRANSITION_DH_INF 0.90 +#endif \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/config.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/config.glsl new file mode 100644 index 0000000..965fb32 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/config.glsl @@ -0,0 +1,323 @@ +/* MakeUp - config.glsl +Config variables + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +// Useful entities +#define ENTITY_SMALLGRASS 10031.0 // Normal grass like entities +#define ENTITY_LOWERGRASS 10175.0 // Lower half only +#define ENTITY_UPPERGRASS 10176.0 // Upper half only +#define ENTITY_SMALLENTS 10059.0 // Crops like entities +#define ENTITY_SMALLENTS_NW 10032.0 // No waveable small ents +#define ENTITY_LEAVES 10018.0 // Leaves +#define ENTITY_VINES 10106.0 // Vines +#define ENTITY_EMMISIVE 10089.0 // Emissors +#define ENTITY_S_EMMISIVE 10090.0 // Emissors +#define ENTITY_F_EMMISIVE 10213.0 // Fake emissors +#define ENTITY_WATER 10008.0 // Water +#define ENTITY_PORTAL 10090.0 // Portal +#define ENTITY_STAINED 10079.0 // Glass +#define ENTITY_METAL 10400.0 // Metal-like glossy blocks +#define ENTITY_SAND 10410.0 // Sand-like glossy blocks +#define ENTITY_FABRIC 10440.0 // Fabric-like glossy blocks + +// Other constants +#define ZENITH_SKY_RAIN_COLOR vec3(.7, .85, 1.0) +#define HORIZON_SKY_RAIN_COLOR vec3(0.35 , 0.425, 0.5) + +// Options +#define REFLECTION_SLIDER 2 // [0 1 2] Reflection quality. - Flipped image: Inaccurate but quick reflection. - Raymarching: Raytraced Screen Space Reflection. + +#if REFLECTION_SLIDER == 0 + #define REFLECTION 0 + #define SSR_TYPE 0 + #define REFLEX_INDEX 0.45 +#elif REFLECTION_SLIDER == 1 + #define REFLECTION 1 + #define SSR_TYPE 0 + #define REFLEX_INDEX 0.7 +#elif REFLECTION_SLIDER == 2 + #define REFLECTION 1 + #define SSR_TYPE 1 + #define REFLEX_INDEX 0.7 +#endif + +#define FOG_ACTIVE // Toggle fog +#define NETHER_FOG_DISTANCE 0 // [0 1] // Sets Nether fog distance to half of the render distance (maximum of 96 blocks) +#define ACERCADE 0 // [0] +#define WAVING 1 // [0 1] Makes objects like leaves or grass move in the wind +#define TINTED_WATER 1 // [0 1] Use the resource pack color for water. +#define REFRACTION 1 // [0 1] Activate refractions. +// #define DOF // Enables depth of field (high performance cost). +#define DOF_STRENGTH 0.09 // [0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13] Depth of field strength. +#define AO 1 // [0 1] Turn on for enhanced ambient occlusion (medium performance cost). +#define AOSTEPS 4 // [4 5 6 7 8 9 10 11] How many samples are taken for AO (high performance cost). +#define AO_STRENGTH 0.70 // [0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.66 0.70 0.75 0.80 0.85] Ambient occlusion strength (strength NOT affect performance). +#define AA_TYPE 2 // [0 1 2 3] No: Disable antialiasing (not recommended). Denoise only: Supersampling is only used to eliminate noise. TAA: Enable antialiasing (Recommended). Sharp TAA: A subtle sharpening effect is used on the TAA. +//#define MOTION_BLUR // Turn on motion blur +#define MOTION_BLUR_STRENGTH 1.0 // [0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0] Set Motion blur strength. Lower framerate -> Lower strength and vice versa is recommended. +#define MOTION_BLUR_SAMPLES 4 // [3 4 5 6 7 8] Motion blur samples +#define SUN_REFLECTION 1 // [0 1] Enable sun (or moon) reflection on water and glass + +#define SHADOW_TYPE 1 // [0 1] Sets the shadow type +#define SHADOW_BLUR 2.0 // [0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0] Shadow blur intensity +// #define COLORED_SHADOW // Attempts to tint the shadow of translucent objects, as well as the associated volumetric light (if active). +#define WATER_ABSORPTION 0.10 // [0.02 0.04 0.06 0.08 0.10 0.12 0.14 0.16 0.18 0.20 0.22 0.24 0.26 0.28 0.30 0.32 0.34 0.36 0.38 0.40 0.42 0.44 0.46 0.48 0.50 0.52 0.54 0.56 0.58 0.60 0.62 0.64 0.66 0.68 0.70 0.72 0.74 0.76 0.78 0.80] Sets how much light the water absorbs. Low levels make the water more transparent. High levels make it more opaque. +#define COLOR_SCHEME 1 // [0 1 2 3 4 5 6 7 99] Ethereal: Old default theme. New shoka: Reinterpretation of a classic. Shoka: The classic. Legacy: Very old default. Captain: A cold preset of stylish colors. Psycodelic: Remaster of old vivid scheme. Cocoa: Warm theme. Testigo: Fantasy and cute scheme. Custom: Choose your colors in advanced options. +#define WATER_TEXTURE 0 // [0 1] Enable or disable resource pack water texture. It does not work properly in 1.12. In that case the default value is recommended. +#define AVOID_DARK_LEVEL 0.030 // [0.000 0.005 0.010 0.015 0.020 0.025 0.030 0.035 0.040 0.045 0.050 0.055 0.060] Minimal omni light intensity in caves. +#define NIGHT_BRIGHT 0.60 // [0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70] Adjusts the brightness of the night light in exteriors. +#define V_CLOUDS 1 // [0 1 2] Volumetric static: The clouds move, but they keep their shape. Volumetric dynamic: Clouds change shape over time, a different cloud landscape every time (medium performance hit). Vanilla: Original vanilla clouds. +#define CLOUD_VOL_STYLE 0 // [0 1] Set the volumetric cloud style. +#define CLOUD_REFLECTION // Set off-screen volumetric clouds reflection (volumetric clouds must be active). +#define END_CLOUDS // Activates drawing of clouds in the end (only works if volumetric clouds are active) +#define BLACK_ENTITY_FIX 0 // [0 1] Removes black entity bug in old video drivers (activate ONLY if you have problems with black entities) +#define BLOOM // Enable or disable bloom effect +#define BLOOM_SAMPLES 4.0 // [4.0 5.0 6.0 7.0 8.0 9.0 10.0] Bloom sample pairs. +#define CHROMA_ABER 0 // [0 1] Enable chroma aberration. +#define CHROMA_ABER_STRENGTH 0.04 // [0.04 0.05 0.06] Chroma aberration strength. +#define VOL_LIGHT 1 // [0 1 2] Depth based: Turn on depth based godrays, they are a bit slow, but can work better than volumetric light for very short shadow distances. Volumetric: It activates the volumetric light, more accurate and faster, but it needs the shadows enabled to work. +// #define VANILLA_WATER // Establishes the appearance of water as vanilla. +#define WATER_COLOR_SOURCE 0 // [0 1] Select the water color source. It does not work properly in 1.12. In that case the default value is recommended. +#define WATER_TURBULENCE 0.9 // [7.0 1.75 0.9 0.5] Set the water waves strength. +#define FOG_ADJUST 2.0 // [10.0 8.0 4.0 2.0 1.0] Sets the fog strength +// #define DEBUG_MODE // Set debug mode. +#define BLOCKLIGHT_TEMP 1 // [0 1 2 3 4] Set blocklight temperature +#define MATERIAL_GLOSS // A very subtle effect that adds some ability to reflect direct light on some blocks. It is most noticeable on metals and luminous objects. +#define DYN_HAND_LIGHT // Toggle the fake dynamic light + +// Custom colors +#define LIGHT_SUNSET_COLOR_R 1 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] +#define LIGHT_SUNSET_COLOR_G 0.59 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] +#define LIGHT_SUNSET_COLOR_B 0.35 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] + +#define LIGHT_DAY_COLOR_R 0.90 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] +#define LIGHT_DAY_COLOR_G 0.84 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] +#define LIGHT_DAY_COLOR_B 0.79 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] + +#define LIGHT_NIGHT_COLOR_R 0.05 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] +#define LIGHT_NIGHT_COLOR_G 0.05 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] +#define LIGHT_NIGHT_COLOR_B 0.06 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] + +#define ZENITH_SUNSET_COLOR_R 0.14 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] +#define ZENITH_SUNSET_COLOR_G 0.24 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] +#define ZENITH_SUNSET_COLOR_B 0.36 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] + +#define ZENITH_DAY_COLOR_R 0.14 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] +#define ZENITH_DAY_COLOR_G 0.24 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] +#define ZENITH_DAY_COLOR_B 0.36 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] + +#define ZENITH_NIGHT_COLOR_R 0.014 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] +#define ZENITH_NIGHT_COLOR_G 0.019 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] +#define ZENITH_NIGHT_COLOR_B 0.025 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] + +#define HORIZON_SUNSET_COLOR_R 1.0 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] +#define HORIZON_SUNSET_COLOR_G 0.65 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] +#define HORIZON_SUNSET_COLOR_B 0.38 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] + +#define HORIZON_DAY_COLOR_R 0.65 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] +#define HORIZON_DAY_COLOR_G 0.91 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] +#define HORIZON_DAY_COLOR_B 1.3 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] + +#define HORIZON_NIGHT_COLOR_R 0.021 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] +#define HORIZON_NIGHT_COLOR_G 0.031 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] +#define HORIZON_NIGHT_COLOR_B 0.039 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] + +#define WATER_COLOR_R 0.05 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] +#define WATER_COLOR_G 0.1 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] +#define WATER_COLOR_B 0.11 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] + +#define NV_COLOR_R 0.5 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0] +#define NV_COLOR_G 0.8 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0] +#define NV_COLOR_B 1.0 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0] + +#define OMNI_TINT_CUSTOM 0.3 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] + +#ifdef FOG_ACTIVE + // Don't remove +#endif + +#if NETHER_FOG_DISTANCE == 1 + #define NETHER_SIGHT min(far / 2, 96) +#else + #define NETHER_SIGHT far +#endif + +// Reflection parameters +#define RAYMARCH_STEPS 10 + +// Cloud parameters +#if CLOUD_VOL_STYLE == 1 + #define CLOUD_PLANE_SUP 380.0 + #define CLOUD_PLANE_CENTER 335.0 + #define CLOUD_PLANE 319.0 +#else + #define CLOUD_PLANE_SUP 590.0 + #define CLOUD_PLANE_CENTER 375.0 + #define CLOUD_PLANE 319.0 +#endif + +#define CLOUD_STEPS_AVG 10 // [7 8 9 10 11 12 13 14 15 16] Samples per pixel (high performance impact). +#define CLOUD_SPEED 0 // [0 1 2] Change the speed of clouds for demo purposes. + +#if CLOUD_VOL_STYLE == 1 + #if CLOUD_SPEED == 0 + #define CLOUD_HI_FACTOR 0.001388888888888889 + #define CLOUD_LOW_FACTOR 0.0002777777777777778 + #elif CLOUD_SPEED == 1 + #define CLOUD_HI_FACTOR 0.01388888888888889 + #define CLOUD_LOW_FACTOR 0.002777777777777778 + #elif CLOUD_SPEED == 2 + #define CLOUD_HI_FACTOR 0.1388888888888889 + #define CLOUD_LOW_FACTOR 0.02777777777777778 + #endif +#else + #if CLOUD_SPEED == 0 + #define CLOUD_HI_FACTOR 0.0016666666666666666 + #define CLOUD_LOW_FACTOR 0.0002777777777777778 + #elif CLOUD_SPEED == 1 + #define CLOUD_HI_FACTOR 0.016666666666666666 + #define CLOUD_LOW_FACTOR 0.002777777777777778 + #elif CLOUD_SPEED == 2 + #define CLOUD_HI_FACTOR 0.16666666666666666 + #define CLOUD_LOW_FACTOR 0.02777777777777778 + #endif +#endif + +// Godrays +#define GODRAY_STEPS 6 +#define CHEAP_GODRAY_SAMPLES 4 + +// Color blindness +// #define COLOR_BLINDNESS // Enable color blindness correction +#define COLOR_BLIND_MODE 0 // [0 1 2] Set color blindness type + +// Sun rotation angle +const float sunPathRotation = -25.0; // [-40.0 -35.0 -30.0 -25.0 -20.0 -15.0 -10.0 -5.0 0.0 5.0 10.0 15.0 20.0 25.0 30.0 35.0 40.0] + +#define SHADOW_DISTANCE_SLIDER 1 // [0 1 2] +#define SHADOW_QTY_SLIDER 2 // [1 2 3] + +#define SHADOW_CASTING // Enable or disable shadows. Configure quality in advanced options. + +#ifdef SHADOW_CASTING + // Shadow parameters + const float shadowIntervalSize = 3.0; + + const bool shadowtex0Mipmap = false; + const bool shadowtex1Mipmap = false; + const bool shadowColor0Mipmap = false; + const bool shadowColor1Mipmap = false; + + const bool shadowtex0Clear = false; + const bool shadowtex1Clear = false; + const bool shadowcolor0Clear = false; + const bool shadowcolor1Clear = false; + + #ifndef NO_SHADOWS + #if SHADOW_DISTANCE_SLIDER == 0 + #if SHADOW_QTY_SLIDER == 1 + #define SHADOW_LIMIT 75.0 + const int shadowMapResolution = 300; + const float shadowDistance = 75.0; + #define SHADOW_FIX_FACTOR 0.3 + #define SHADOW_DIST 0.75 + + #elif SHADOW_QTY_SLIDER == 2 + #define SHADOW_LIMIT 75.0 + const int shadowMapResolution = 600; + const float shadowDistance = 75.0; + #define SHADOW_FIX_FACTOR 0.15 + #define SHADOW_DIST 0.81 + + #elif SHADOW_QTY_SLIDER == 3 + #define SHADOW_LIMIT 75.0 + const int shadowMapResolution = 1200; + const float shadowDistance = 75.0; + #define SHADOW_FIX_FACTOR 0.05 + #define SHADOW_DIST 0.81 + + #endif + + #elif SHADOW_DISTANCE_SLIDER == 1 + #if SHADOW_QTY_SLIDER == 1 + #define SHADOW_LIMIT 105.0 + const int shadowMapResolution = 420; + const float shadowDistance = 105.0; + #define SHADOW_FIX_FACTOR 0.28 + #define SHADOW_DIST 0.75 + + #elif SHADOW_QTY_SLIDER == 2 + #define SHADOW_LIMIT 105.0 + const int shadowMapResolution = 840; + const float shadowDistance = 105.0; + #define SHADOW_FIX_FACTOR 0.07 + #define SHADOW_DIST 0.83 + + #elif SHADOW_QTY_SLIDER == 3 + #define SHADOW_LIMIT 105.0 + const int shadowMapResolution = 1680; + const float shadowDistance = 105.0; + #define SHADOW_FIX_FACTOR 0.03 + #define SHADOW_DIST 0.83 + + #endif + + #elif SHADOW_DISTANCE_SLIDER == 2 + #if SHADOW_QTY_SLIDER == 1 + #define SHADOW_LIMIT 255.0 + const int shadowMapResolution = 1020; + const float shadowDistance = 255.0; + #define SHADOW_FIX_FACTOR 0.12 + #define SHADOW_DIST 0.8 + + #elif SHADOW_QTY_SLIDER == 2 + #define SHADOW_LIMIT 255.0 + const int shadowMapResolution = 2040; + const float shadowDistance = 255.0; + #define SHADOW_FIX_FACTOR 0.03 + #define SHADOW_DIST 0.85 + + #elif SHADOW_QTY_SLIDER == 3 + #define SHADOW_LIMIT 255.0 + const int shadowMapResolution = 4080; + const float shadowDistance = 255.0; + #define SHADOW_FIX_FACTOR 0.015 + #define SHADOW_DIST 0.87 + + #endif + #endif + + #if VOL_LIGHT == 2 + const float shadowDistanceRenderMul = -1.0; + #else + const float shadowDistanceRenderMul = 1.0; + #endif + + const bool shadowHardwareFiltering = true; + const bool shadowtex1Nearest = false; + #endif + +#else + #define SHADOW_DIST 0.0 + #define SHADOW_RES 0 + const int shadowMapResolution = 100; + const float shadowDistance = 60.0; +#endif + +// Redefined constants +#if AO == 0 + const float ambientOcclusionLevel = 0.7; +#else + const float ambientOcclusionLevel = 0.0; +#endif + +const float eyeBrightnessHalflife = 6.0; +const float centerDepthHalflife = 0.66; + +// DH exclusive +#if defined DISTANT_HORIZONS + #define TRANSITION_DH_SUP 0.05 + #define TRANSITION_DH_INF 0.90 +#endif \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/day_blend.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/day_blend.glsl new file mode 100644 index 0000000..d41e4d2 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/day_blend.glsl @@ -0,0 +1,19 @@ +vec3 day_blend(vec3 sunset, vec3 day, vec3 night) { + // f(x) = min(-((x-.25)^2)∙20 + 1.25, 1) + // g(x) = min(-((x-.75)^2)∙50 + 3.125, 1) + + vec3 day_color = mix(sunset, day, day_mixer); + vec3 night_color = mix(sunset, night, night_mixer); + + return mix(day_color, night_color, step(0.5, day_moment)); +} + +float day_blend_float(float sunset, float day, float night) { + // f(x) = min(-((x-.25)^2)∙20 + 1.25, 1) + // g(x) = min(-((x-.75)^2)∙50 + 3.125, 1) + + float day_value = mix(sunset, day, day_mixer); + float night_value = mix(sunset, night, night_mixer); + + return mix(day_value, night_value, step(0.5, day_moment)); +} \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/depth.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/depth.glsl new file mode 100644 index 0000000..3041add --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/depth.glsl @@ -0,0 +1,9 @@ +/* MakeUp - depth_dh.glsl +Depth utilities. + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +float ld(float depth) { + return (2.0 * near) / (far + near - depth * (far - near)); +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/depth_dh.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/depth_dh.glsl new file mode 100644 index 0000000..0caa490 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/depth_dh.glsl @@ -0,0 +1,9 @@ +/* MakeUp - depth_hd.glsl +Depth utilities (dh). + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +float ld_dh(float depth) { + return (2.0 * dhNearPlane) / (dhFarPlane + dhNearPlane - depth * (dhFarPlane - dhNearPlane)); +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/dither.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/dither.glsl new file mode 100644 index 0000000..04c15f3 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/dither.glsl @@ -0,0 +1,266 @@ +/* MakeUp - dither.glsl +Dither and hash functions + +There are a multitude of dithers in MakeUp, with different variants. + +There are fixed ones (that do not change over time) as well as those that change +when temporal sampling is active. Of the latter, there are two versions: +one that uses dither_shift (Minecraft 1.13+) and another that uses frame_mod +to rotate the dither values. + +There are several variants because each one performs better or worse +depending on the situation in which it is used. + +The philosophy of their use is as follows: +1) use the fastest one possible that still produces acceptable results. +2) If multiple effects use a dithering and they are in the same step +of the Optifine/Iris pipeline, then calculate the dithering only once +and use it in all the effects that need it to avoid redundant calculations. + +The variants that change over time have the prefix "shifted". + +The variants with the prefix 'eclectic' are perturbed versions of their simpler counterparts. +They offer good results because they avoid the appearance of repetitive patterns, +but they require the calculation of a hash to create this perturbation. + +There is a function based on a texture, which assumes a size for the texture of 64x64 pixels, +but there is no such texture currently. + +*/ + +#if MC_VERSION >= 11300 + uniform float dither_shift; +#else + uniform int frame_mod; +#endif + +float hash12(vec2 v) +{ + v = 0.0002314814814814815 * v + vec2(0.25, 0.0); + float state = fract(dot(v * v, vec2(3571.0))); + return fract(state * state * 7142.0); +} + +float hash13(vec3 v) +{ + v = fract(v * .1031); + v += dot(v, v.zyx + 31.32); + return fract((v.x + v.y) * v.z); +} + +vec2 hash22(vec2 p) +{ + vec3 p3 = fract(vec3(p.xyx) * vec3(.1031, .1030, .0973)); + p3 += dot(p3, p3.yzx+33.33); + return fract((p3.xx+p3.yz)*p3.zy); +} + +float r_dither(vec2 frag) { + return fract(dot(frag, vec2(0.75487766624669276, 0.569840290998))); +} + +float eclectic_r_dither(vec2 frag) { + vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); + float state = fract(dot(v * v, vec2(3571.0))); + float p4 = fract(state * state * 7142.0) * 0.075; + + return fract(dot(frag, vec2(0.75487766624669276, 0.569840290998)) + p4); +} + +float dither13(vec2 frag) +{ + return fract(dot(frag, vec2(0.3076923076923077, 0.5384615384615384))); +} + +float eclectic_dither13(vec2 frag) +{ + vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); + float state = fract(dot(v * v, vec2(3571.0))); + float p4 = fract(state * state * 7142.0) * 0.075; + + return fract(dot(frag, vec2(0.3076923076923077, 0.5384615384615384)) + p4); +} + +float dither_grad_noise(vec2 frag) { + return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag))); +} + +float eclectic_dither_grad_noise(vec2 frag) { + vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); + float state = fract(dot(v * v, vec2(3571.0))); + float p4 = fract(state * state * 7142.0) * 0.075; + + return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)) + p4); +} + +float texture_noise_64(vec2 p, sampler2D noise) { + return texture2D(noise, p * 0.015625).r; +} + +float semiblue(vec2 xy) { + vec2 tile = floor(xy * 0.25); + float flip = mod(tile.x + tile.y, 2.0); + xy = mix(xy, xy.yx, flip); + + return fract(dot(vec2(0.75487766624669276, 0.569840290998), xy) + hash12(tile)); +} + +float dither_makeup(vec2 xy) { + vec2 tile = floor(xy * 0.25); + float flip = mod(tile.x + tile.y, 2.0); + xy = mix(xy, xy.yx, flip); + + float r_dither = fract(dot(xy, vec2(0.75487766624669276, 0.569840290998))); + float plastic = 2.0 * abs(fract(dot(tile, vec2(0.8085512046226566, 0.5562305898749054))) - 0.5); + + return fract(r_dither + plastic); +} + +#if MC_VERSION >= 11300 + + float shifted_hash12(vec2 v) + { + v = 0.0002314814814814815 * v + vec2(0.25, 0.0); + float state = fract(dot(v * v, vec2(3571.0))); + return fract(dither_shift + (state * state * 7142.0)); + } + + float shifted_hash13(vec3 v) + { + v = fract(v * .1031); + v += dot(v, v.zyx + 31.32); + return fract(dither_shift + ((v.x + v.y) * v.z)); + } + + float shifted_r_dither(vec2 frag) { + return fract(dither_shift + dot(frag, vec2(0.75487766624669276, 0.569840290998))); + } + + float shifted_eclectic_r_dither(vec2 frag) { + vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); + float state = fract(dot(v * v, vec2(3571.0))); + float p4 = fract(state * state * 7142.0) * 0.075; + + return fract(dot(frag, vec2(0.75487766624669276, 0.569840290998)) + dither_shift + p4); + } + + float shifted_dither13(vec2 frag) + { + return fract(dither_shift + dot(frag, vec2(0.3076923076923077, 0.5384615384615384))); + } + + float shifted_eclectic_dither13(vec2 frag) + { + vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); + float state = fract(dot(v * v, vec2(3571.0))); + float p4 = fract(state * state * 7142.0) * 0.075; + + return fract(dot(frag, vec2(0.3076923076923077, 0.5384615384615384)) + dither_shift + p4); + } + + float shifted_dither_grad_noise(vec2 frag) { + return fract(dither_shift + (52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)))); + } + + float shifted_eclectic_dither_grad_noise(vec2 frag) { + vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); + float state = fract(dot(v * v, vec2(3571.0))); + float p4 = fract(state * state * 7142.0) * 0.075; + + return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)) + dither_shift + p4); + } + + float shifted_texture_noise_64(vec2 p, sampler2D noise) { + float dither = texture2D(noise, p * 0.015625).r; + return fract(dither_shift + dither); + } + + float shifted_semiblue(vec2 xy) { + vec2 tile = floor(xy * 0.25); + float flip = mod(tile.x + tile.y, 2.0); + xy = mix(xy, xy.yx, flip); + + return fract(dither_shift + dot(vec2(0.75487766624669276, 0.569840290998), xy) + hash12(tile)); + } + + float shifted_dither_makeup(vec2 xy) { + vec2 tile = floor(xy * 0.25); + float flip = mod(tile.x + tile.y, 2.0); + xy = mix(xy, xy.yx, flip); + + float r_dither = fract(dot(xy, vec2(0.75487766624669276, 0.569840290998))); + float plastic = 2.0 * abs(fract(dot(tile, vec2(0.8085512046226566, 0.5562305898749054))) - 0.5); + + return fract(dither_shift + r_dither + plastic); + } + +#else + + float shifted_hash12(vec2 v) + { + v = 0.0002314814814814815 * v + vec2(0.25, 0.0); + float state = fract(dot(v * v, vec2(3571.0))); + return fract((frame_mod * 0.4) + (state * state * 7142.0)); + } + + float shifted_hash13(vec3 v) + { + v = fract(v * .1031); + v += dot(v, v.zyx + 31.32); + return fract((frame_mod * 0.4) + ((v.x + v.y) * v.z)); + } + + float shifted_r_dither(vec2 frag) { + return fract((frame_mod * 0.4) + dot(frag, vec2(0.75487766624669276, 0.569840290998))); + } + + float shifted_eclectic_r_dither(vec2 frag) { + vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); + float state = fract(dot(v * v, vec2(3571.0))); + float p4 = fract(state * state * 7142.0) * 0.075; + + return fract(dot(frag, vec2(0.75487766624669276, 0.569840290998)) + (frame_mod * 0.4) + p4); + } + + float shifted_dither13(vec2 frag) + { + return fract((frame_mod * 0.4) + dot(frag, vec2(0.3076923076923077, 0.5384615384615384))); + } + + float shifted_dither_grad_noise(vec2 frag) { + return fract((frame_mod * 0.4) + (52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)))); + } + + float shifted_eclectic_dither_grad_noise(vec2 frag) { + vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); + float state = fract(dot(v * v, vec2(3571.0))); + float p4 = fract(state * state * 7142.0) * 0.075; + + return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)) + (frame_mod * 0.4) + p4); + } + + float shifted_texture_noise_64(vec2 p, sampler2D noise) { + float dither = texture2D(noise, p * 0.015625).r; + return fract((frame_mod * 0.4) + dither); + } + + float shifted_semiblue(vec2 xy) { + vec2 tile = floor(xy * 0.25); + float flip = mod(tile.x + tile.y, 2.0); + xy = mix(xy, xy.yx, flip); + + return fract((frame_mod * 0.4) + dot(vec2(0.75487766624669276, 0.569840290998), xy) + hash12(tile)); + } + + float shifted_dither_makeup(vec2 xy) { + vec2 tile = floor(xy * 0.25); + float flip = mod(tile.x + tile.y, 2.0); + xy = mix(xy, xy.yx, flip); + + float r_dither = fract(dot(xy, vec2(0.75487766624669276, 0.569840290998))); + float plastic = 2.0 * abs(fract(dot(tile, vec2(0.8085512046226566, 0.5562305898749054))) - 0.5); + + return fract((frame_mod * 0.4) + r_dither + plastic); + } + +#endif diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/fast_taa.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/fast_taa.glsl new file mode 100644 index 0000000..19c1e13 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/fast_taa.glsl @@ -0,0 +1,98 @@ +/* MakeUp - fast_taa.glsl +Temporal antialiasing functions. + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { + // Verificamos si proyección queda fuera de la pantalla actual + if (clamp(texcoord_past, 0.0, 1.0) != texcoord_past) { + return current_color; + } else { + // Previous color + vec3 previous = texture2D(colortex3, texcoord_past).rgb; + + // Apply clamping on the history color. + vec3 near_color0 = texture2D(colortex1, texcoord + vec2(-pixel_size_x, 0.0)).rgb; + vec3 near_color1 = texture2D(colortex1, texcoord + vec2(pixel_size_x, 0.0)).rgb; + vec3 near_color2 = texture2D(colortex1, texcoord + vec2(0.0, -pixel_size_y)).rgb; + vec3 near_color3 = texture2D(colortex1, texcoord + vec2(0.0, pixel_size_y)).rgb; + + vec3 nmin = + min(current_color, min(near_color0, min(near_color1, min(near_color2, near_color3)))); + vec3 nmax = + max(current_color, max(near_color0, max(near_color1, max(near_color2, near_color3)))); + + // Edge detection + vec3 edge_color = -near_color0; + edge_color -= near_color1; + edge_color += current_color * 4.0; + edge_color -= near_color2; + edge_color -= near_color3; + + float edge = clamp(length(edge_color) * 0.5773502691896258, 0.0, 1.0); // 1/sqrt(3) + + // nmax = current_color + (edge * 0.7 + 0.3) * (nmax - current_color); + // nmin = current_color + (edge * 0.7 + 0.3) * (nmin - current_color); + + // Clip + // previous = clamp(previous, nmin, nmax); + + vec3 center = (nmin + nmax) * 0.5; + float radio = length(nmax - center); + + vec3 color_vector = previous - center; + float color_dist = length(color_vector); + + float factor = 1.0; + if (color_dist > radio) { + factor = radio / color_dist; + } + previous = center + (color_vector * factor); + + return mix(current_color, previous, 0.8 + (edge * 0.19)); + } +} + +vec4 fast_taa_depth(vec4 current_color, vec2 texcoord_past) { + // Verificamos si proyección queda fuera de la pantalla actual + if (clamp(texcoord_past, 0.0, 1.0) != texcoord_past) { + return current_color; + } else { + // Muestra del pasado + vec4 previous = texture2D(colortex3, texcoord_past); + + vec4 near_color0 = texture2D(colortex1, texcoord + vec2(-pixel_size_x, 0.0)); + vec4 near_color1 = texture2D(colortex1, texcoord + vec2(pixel_size_x, 0.0)); + vec4 near_color2 = texture2D(colortex1, texcoord + vec2(0.0, -pixel_size_y)); + vec4 near_color3 = texture2D(colortex1, texcoord + vec2(0.0, pixel_size_y)); + + vec4 nmin = + min(current_color, min(near_color0, min(near_color1, min(near_color2, near_color3)))); + vec4 nmax = + max(current_color, max(near_color0, max(near_color1, max(near_color2, near_color3)))); + + // Clip + vec3 center = (nmin.rgb + nmax.rgb) * 0.5; + float radio = length(nmax.rgb - center); + + vec3 color_vector = previous.rgb - center; + float color_dist = length(color_vector); + + float factor = 1.0; + if (color_dist > radio) { + factor = radio / color_dist; + } + previous = vec4(center + (color_vector * factor), previous.a); + + // Edge detection + vec3 edge_color = -near_color0.rgb; + edge_color -= near_color1.rgb; + edge_color += current_color.rgb * 4.0; + edge_color -= near_color2.rgb; + edge_color -= near_color3.rgb; + float edge = clamp(length(edge_color) * 0.5773502691896258, 0.0, 1.0); // 1/sqrt(3) + + return mix(current_color, previous, 0.8 + (edge * 0.19)); + } +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/luma.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/luma.glsl new file mode 100644 index 0000000..f436a6e --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/luma.glsl @@ -0,0 +1,13 @@ +/* MakeUp - luma.glsl +Luma related functions. + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +float luma(vec3 color) { + return dot(color, vec3(0.299, 0.587, 0.114)); +} + +float color_average(vec3 color) { + return (color.r + color.g + color.b) * 0.3333333333; +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/material_gloss_fragment.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/material_gloss_fragment.glsl new file mode 100644 index 0000000..87cb4a8 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/material_gloss_fragment.glsl @@ -0,0 +1,28 @@ +#if defined THE_END + float material_gloss(vec3 reflected_vector, vec2 lmcoord_alt, float gloss_power, vec3 flat_normal) { + vec3 astro_pos = (gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; + float astro_vector = + max(dot(normalize(reflected_vector), normalize(astro_pos)), 0.0) * step(0.0001, dot(astro_pos, flat_normal)); + + return clamp( + mix(0.0, 1.0, pow(clamp(astro_vector * 2.0 - 1.0, 0.0, 1.0), gloss_power)), + 0.0, + 1.0 + ); + } +#else + float material_gloss(vec3 reflected_vector, vec2 lmcoord_alt, float gloss_power, vec3 flat_normal) { + vec3 astro_pos = mix(-sunPosition, sunPosition, light_mix); + float astro_vector = + max(dot(normalize(reflected_vector), normalize(astro_pos)), 0.0) * + step(0.0001, dot(astro_pos, flat_normal)); + + return clamp( + mix(0.0, 1.0, pow(clamp(astro_vector * 2.0 - 1.0, 0.0, 1.0), gloss_power)) * + clamp(lmcoord_alt.y, 0.0, 1.0) * + (1.0 - rainStrength), + 0.0, + 1.0 + ) * abs(mix(1.0, -1.0, light_mix)); + } +#endif \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/motion_blur.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/motion_blur.glsl new file mode 100644 index 0000000..5a480a3 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/motion_blur.glsl @@ -0,0 +1,39 @@ +/* MakeUp - motion_blur.glsl +Motion blur functions. + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +vec3 motion_blur(vec3 color, float the_depth, vec2 blur_velocity, sampler2D image) { + if (the_depth > 0.7) { // No hand + vec2 double_pixels = 2.0 * vec2(pixel_size_x, pixel_size_y); + vec3 m_blur = vec3(0.0); + + blur_velocity = + (MOTION_BLUR_STRENGTH * blur_velocity) / ((1.0 + length(blur_velocity)) * (frameTime * 500.0)) ; + + #if AA_TYPE > 0 + vec2 coord = + texcoord - blur_velocity * (1.5 + shifted_r_dither(gl_FragCoord.xy)); + #else + vec2 coord = + texcoord - blur_velocity * (1.5 + eclectic_r_dither(gl_FragCoord.xy)); + #endif + + float weight = 0.0; + float mask; + vec2 sample_coord; + vec3 b_sample; + for(int i = 0; i < MOTION_BLUR_SAMPLES; i++, coord += blur_velocity) { + sample_coord = clamp(coord, double_pixels, 1.0 - double_pixels); + b_sample = texture2DLod(image, sample_coord, 0.0).rgb; + m_blur += b_sample; + weight++; + } + m_blur /= max(weight, 1.0); + + return m_blur; + } else { + return color.rgb; + } +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/mu_ftransform.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/mu_ftransform.glsl new file mode 100644 index 0000000..08ab18f --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/mu_ftransform.glsl @@ -0,0 +1,18 @@ +vec4 mu_ftransform() { + float lineWidth = 1.75; + vec2 screenSize = vec2(viewWidth, viewHeight); + mat4 VIEW_SCALE = mat4(mat3(1.0 - 0.00390625)); + mat4 tempmat = gl_ProjectionMatrix * VIEW_SCALE * gl_ModelViewMatrix; + vec4 linePosStart = tempmat * gl_Vertex; + vec4 linePosEnd = tempmat * vec4(gl_Vertex.xyz + gl_Normal, 1.0); + vec3 ndc1 = linePosStart.xyz / linePosStart.w; + vec3 ndc2 = linePosEnd.xyz / linePosEnd.w; + vec2 lineScreenDirection = normalize((ndc2.xy - ndc1.xy) * screenSize); + vec2 lineOffset = vec2(-lineScreenDirection.y, lineScreenDirection.x) * lineWidth / screenSize; + if(lineOffset.x < 0.0) + lineOffset *= -1.0; + if(gl_VertexID % 2 == 0) + return vec4((ndc1 + vec3(lineOffset, 0.0)) * linePosStart.w, linePosStart.w); + else + return vec4((ndc1 - vec3(lineOffset, 0.0)) * linePosStart.w, linePosStart.w); +} \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/post.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/post.glsl new file mode 100644 index 0000000..22efcaf --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/post.glsl @@ -0,0 +1,19 @@ +vec3 sharpen(sampler2D image, vec3 color, vec2 coords) { + vec3 sum = -texture2D(image, coords + vec2(-pixel_size_x, 0.0)).rgb; + sum -= texture2D(image, coords + vec2(0.0, -pixel_size_y)).rgb; + sum += 11.0 * color; + sum -= texture2D(image, coords + vec2(0.0, pixel_size_y)).rgb; + sum -= texture2D(image, coords + vec2(pixel_size_x, 0.0)).rgb; + + return sum * 0.14285714285714285; +} + +vec3 edge_detect(sampler2D image, vec3 color, vec2 coords) { + vec3 sum = -texture2D(image, coords + vec2(-pixel_size_x, -pixel_size_y)).rgb; + sum -= texture2D(image, coords + vec2(pixel_size_x, -pixel_size_y)).rgb; + sum += 4.0 * color; + sum -= texture2D(image, coords + vec2(-pixel_size_x, pixel_size_y)).rgb; + sum -= texture2D(image, coords + vec2(pixel_size_x, pixel_size_y)).rgb; + + return vec3(length(sum)) * 0.5773502691896258; +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/projection_utils.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/projection_utils.glsl new file mode 100644 index 0000000..a3c41e3 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/projection_utils.glsl @@ -0,0 +1,15 @@ +/* MakeUp - projection_utils.glsl +Projection generic functions. + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define diagonal3(m) vec3((m)[0].x, (m)[1].y, m[2].z) +#define projMAD(m, v) (diagonal3(m) * (v) + (m)[3].xyz) + +vec3 camera_to_screen(vec3 fragpos) { + vec4 pos = gbufferProjection * vec4(fragpos, 1.0); + pos /= pos.w; + + return pos.xyz * 0.5 + 0.5; +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/shadow_frag.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/shadow_frag.glsl new file mode 100644 index 0000000..dc5de38 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/shadow_frag.glsl @@ -0,0 +1,156 @@ +/* MakeUp - shadow_frag.glsl +Fragment shadow function. + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +float get_shadow(vec3 the_shadow_pos, float dither) { + float shadow_sample = 1.0; + + #if SHADOW_TYPE == 0 // Pixelated + shadow_sample = shadow2D(shadowtex1, the_shadow_pos).r; + #elif SHADOW_TYPE == 1 // Soft + float current_radius = dither; + dither *= 6.283185307179586; + float dither_2 = dither + 1.5707963267948966; + + shadow_sample = 0.0; + + vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; + + vec2 offset_2 = (vec2(cos(dither_2), sin(dither_2)) * (1.0 - current_radius) * SHADOW_BLUR) / shadowMapResolution; + + float z_bias = dither * 0.00002; + + shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; + shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; + + shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset_2, the_shadow_pos.z - z_bias)).r; + shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset_2, the_shadow_pos.z - z_bias)).r; + + // shadow_sample *= 0.5; + shadow_sample *= 0.25; + #endif + + return shadow_sample; +} + +#if defined COLORED_SHADOW + + vec3 get_colored_shadow(vec3 the_shadow_pos, float dither) { + #if SHADOW_TYPE == 0 // Pixelated + float shadow_detector = 1.0; + float shadow_black = 1.0; + vec4 shadow_color = vec4(1.0); + + float alpha_complement; + + shadow_detector = shadow2D(shadowtex0, vec3(the_shadow_pos.xy, the_shadow_pos.z)).r; + if (shadow_detector < 1.0) { + shadow_black = shadow2D(shadowtex1, vec3(the_shadow_pos.xy, the_shadow_pos.z)).r; + if (shadow_black != shadow_detector) { + shadow_color = texture2D(shadowcolor0, the_shadow_pos.xy); + alpha_complement = 1.0 - shadow_color.a; + shadow_color.rgb = mix(shadow_color.rgb, vec3(1.0), alpha_complement); + shadow_color.rgb *= alpha_complement; + } + } + + shadow_color *= shadow_black; + shadow_color.rgb = clamp(shadow_color.rgb * (1.0 - shadow_detector) + shadow_detector, vec3(0.0), vec3(1.0)); + + return shadow_color.rgb; + + #elif SHADOW_TYPE == 1 // Soft + float shadow_detector_a = 1.0; + float shadow_black_a = 1.0; + vec4 shadow_color_a = vec4(1.0); + + float shadow_detector_b = 1.0; + float shadow_black_b = 1.0; + vec4 shadow_color_b = vec4(1.0); + + float shadow_detector_c = 1.0; + float shadow_black_c = 1.0; + vec4 shadow_color_c = vec4(1.0); + + float shadow_detector_d = 1.0; + float shadow_black_d = 1.0; + vec4 shadow_color_d = vec4(1.0); + + float alpha_complement; + + float current_radius = dither; + dither *= 6.283185307179586; + float dither_2 = dither + 1.5707963267948966; + + vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; + vec2 offset_2 = (vec2(cos(dither_2), sin(dither_2)) * (1.0 - current_radius) * SHADOW_BLUR) / shadowMapResolution; + + float z_bias = dither * 0.00002; + + shadow_detector_a = shadow2D(shadowtex0, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; + shadow_detector_b = shadow2D(shadowtex0, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; + + shadow_detector_c = shadow2D(shadowtex0, vec3(the_shadow_pos.xy + offset_2, the_shadow_pos.z - z_bias)).r; + shadow_detector_d = shadow2D(shadowtex0, vec3(the_shadow_pos.xy - offset_2, the_shadow_pos.z - z_bias)).r; + + if (shadow_detector_a < 1.0) { + shadow_black_a = shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; + if (shadow_black_a != shadow_detector_a) { + shadow_color_a = texture2D(shadowcolor0, the_shadow_pos.xy + offset); + alpha_complement = 1.0 - shadow_color_a.a; + shadow_color_a.rgb = mix(shadow_color_a.rgb, vec3(1.0), alpha_complement); + shadow_color_a.rgb *= alpha_complement; + } + } + + shadow_color_a *= shadow_black_a; + + if (shadow_detector_b < 1.0) { + shadow_black_b = shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; + if (shadow_black_b != shadow_detector_b) { + shadow_color_b = texture2D(shadowcolor0, the_shadow_pos.xy - offset); + alpha_complement = 1.0 - shadow_color_b.a; + shadow_color_b.rgb = mix(shadow_color_b.rgb, vec3(1.0), alpha_complement); + shadow_color_b.rgb *= alpha_complement; + } + } + + shadow_color_b *= shadow_black_b; + + if (shadow_detector_c < 1.0) { + shadow_black_c = shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset_2, the_shadow_pos.z - z_bias)).r; + if (shadow_black_c != shadow_detector_c) { + shadow_color_c = texture2D(shadowcolor0, the_shadow_pos.xy + offset_2); + alpha_complement = 1.0 - shadow_color_c.a; + shadow_color_c.rgb = mix(shadow_color_c.rgb, vec3(1.0), alpha_complement); + shadow_color_c.rgb *= alpha_complement; + } + } + + shadow_color_c *= shadow_black_c; + + if (shadow_detector_d < 1.0) { + shadow_black_d = shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset_2, the_shadow_pos.z - z_bias)).r; + if (shadow_black_d != shadow_detector_d) { + shadow_color_d = texture2D(shadowcolor0, the_shadow_pos.xy - offset_2); + alpha_complement = 1.0 - shadow_color_d.a; + shadow_color_d.rgb = mix(shadow_color_d.rgb, vec3(1.0), alpha_complement); + shadow_color_d.rgb *= alpha_complement; + } + } + + shadow_color_d *= shadow_black_d; + + shadow_detector_a = (shadow_detector_a + shadow_detector_b + shadow_detector_c + shadow_detector_d); + shadow_detector_a *= 0.25; + + shadow_color_a.rgb = (shadow_color_a.rgb + shadow_color_b.rgb + shadow_color_c.rgb + shadow_color_d.rgb) * 0.25; + shadow_color_a.rgb = mix(shadow_color_a.rgb, vec3(1.0), shadow_detector_a); + + return shadow_color_a.rgb; + #endif + } + +#endif diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/shadow_vertex.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/shadow_vertex.glsl new file mode 100644 index 0000000..99a74c9 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/shadow_vertex.glsl @@ -0,0 +1,20 @@ +/* MakeUp - shadow_vertex.glsl +Vertex shadow function. + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define diagonal3(m) vec3((m)[0].x, (m)[1].y, m[2].z) + +vec3 get_shadow_pos(vec3 shadow_pos) { + shadow_pos = mat3(shadowModelView) * shadow_pos + shadowModelView[3].xyz; + shadow_pos = diagonal3(shadowProjection) * shadow_pos + shadowProjection[3].xyz; + + float distb = length(shadow_pos.xy); + float distortion = distb * SHADOW_DIST + (1.0 - SHADOW_DIST); + + shadow_pos.xy /= distortion; + shadow_pos.z *= 0.2; + + return shadow_pos * 0.5 + 0.5; +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/tone_maps.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/tone_maps.glsl new file mode 100644 index 0000000..f77761e --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/tone_maps.glsl @@ -0,0 +1,26 @@ +/* MakeUp - tone_maps.glsl +Tonemap functions. + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +// vec3 custom_sigmoid(vec3 color) { +// color = 1.4 * color; +// color = color / pow(pow(color, vec3(3.0)) + 1.0, vec3(0.3333333333333)); + +// return pow(color, vec3(1.15)); +// } + +vec3 custom_sigmoid(vec3 color) { + color = 1.4 * color; + color = color / pow(pow(color, vec3(2.5)) + 1.0, vec3(0.4)); + + return pow(color, vec3(1.15)); +} + +vec3 custom_sigmoid_alt(vec3 color) { + color = 1.4 * color; + color = color / pow(pow(color, vec3(3.05)) + 1.0, vec3(0.3278688524590164)); + + return pow(color, vec3(1.15)); +} \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/vector_utils.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/vector_utils.glsl new file mode 100644 index 0000000..da78a70 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/vector_utils.glsl @@ -0,0 +1,17 @@ +/* MakeUp - basic_utils.glsl +Moving vector utils. + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +vec3 wave_move(vec3 pos) { + float timer = (frameTimeCounter) * 3.141592653589793; + pos = mod(pos, 157.07963267948966); // PI * 25 + vec2 wave_x = vec2(timer * 0.5, timer) + pos.xy; + vec2 wave_z = vec2(timer, timer * 1.5) + pos.xy; + vec2 wave_y = vec2(timer * 0.5, timer * 0.25) - pos.zx; + + wave_x = sin(wave_x + wave_y); + wave_z = cos(wave_z + wave_y); + return vec3(wave_x.x + wave_x.y, 0.0, wave_z.x + wave_z.y); +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/volumetric_clouds.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/volumetric_clouds.glsl new file mode 100644 index 0000000..1b5f64b --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/volumetric_clouds.glsl @@ -0,0 +1,146 @@ +/* MakeUp - volumetric_clouds.glsl +Fast volumetric clouds - MakeUp implementation +*/ + +vec3 get_cloud(vec3 view_vector, vec3 block_color, float bright, float dither, vec3 base_pos, int samples, float umbral, vec3 cloud_color, vec3 dark_cloud_color) { + float plane_distance; + float cloud_value; + float density; + vec3 intersection_pos; + vec3 intersection_pos_sup; + float dif_inf; + float dif_sup; + float dist_aux_coeff; + float current_value; + float surface_inf; + float surface_sup; + bool first_contact = true; + float opacity_dist; + vec3 increment; + float increment_dist; + float view_y_inv = 1.0 / view_vector.y; + float distance_aux; + float dist_aux_coeff_blur; + + #if VOL_LIGHT == 0 + block_color.rgb *= + clamp(bright + ((dither - .5) * .1), 0.0, 1.0) * .3 + 1.0; + #endif + + #if defined DISTANT_HORIZONS && defined DEFERRED_SHADER + float d_dh = texture2D(dhDepthTex0, vec2(gl_FragCoord.x / viewWidth, gl_FragCoord.y / viewHeight)).r; + float linear_d_dh = ld_dh(d_dh); + if (linear_d_dh < 0.9999) { + return block_color; + } + #endif + + if (view_vector.y > 0.0) { // Over horizon + plane_distance = (CLOUD_PLANE - base_pos.y) * view_y_inv; + intersection_pos = (view_vector * plane_distance) + base_pos; + + plane_distance = (CLOUD_PLANE_SUP - base_pos.y) * view_y_inv; + intersection_pos_sup = (view_vector * plane_distance) + base_pos; + + dif_sup = CLOUD_PLANE_SUP - CLOUD_PLANE_CENTER; + dif_inf = CLOUD_PLANE_CENTER - CLOUD_PLANE; + dist_aux_coeff = (CLOUD_PLANE_SUP - CLOUD_PLANE) * 0.075; + dist_aux_coeff_blur = dist_aux_coeff * 0.3; + + opacity_dist = dist_aux_coeff * 2.0 * view_y_inv; + + increment = (intersection_pos_sup - intersection_pos) / samples; + increment_dist = length(increment); + + cloud_value = 0.0; + + intersection_pos += (increment * dither); + + for (int i = 0; i < samples; i++) { + current_value = + texture2D( + gaux2, + (intersection_pos.xz * 0.0002777777777777778) + (frameTimeCounter * CLOUD_HI_FACTOR) + ).r; + + + #if V_CLOUDS == 2 && CLOUD_VOL_STYLE == 0 + current_value += + texture2D( + gaux2, + (intersection_pos.zx * 0.0002777777777777778) + (frameTimeCounter * CLOUD_LOW_FACTOR) + ).r; + + current_value *= 0.5; + current_value = smoothstep(0.05, 0.95, current_value); + + #endif + + // Ajuste por umbral + current_value = (current_value - umbral) / (1.0 - umbral); + + // Superficies inferior y superior de nubes + surface_inf = CLOUD_PLANE_CENTER - (current_value * dif_inf); + surface_sup = CLOUD_PLANE_CENTER + (current_value * dif_sup); + + if ( // Dentro de la nube + intersection_pos.y > surface_inf && + intersection_pos.y < surface_sup + ) { + cloud_value += min(increment_dist, surface_sup - surface_inf); + + if (first_contact) { + first_contact = false; + density = + (surface_sup - intersection_pos.y) / + (CLOUD_PLANE_SUP - CLOUD_PLANE); + } + } + else if (surface_inf < surface_sup && i > 0) { // Fuera de la nube + distance_aux = min( + abs(intersection_pos.y - surface_inf), + abs(intersection_pos.y - surface_sup) + ); + + if (distance_aux < dist_aux_coeff_blur) { + cloud_value += min( + (clamp(dist_aux_coeff_blur - distance_aux, 0.0, dist_aux_coeff_blur) / dist_aux_coeff_blur) * increment_dist, + surface_sup - surface_inf + ); + + if (first_contact) { + first_contact = false; + density = + (surface_sup - intersection_pos.y) / + (CLOUD_PLANE_SUP - CLOUD_PLANE); + } + } + } + + intersection_pos += increment; + } + + cloud_value = clamp(cloud_value / opacity_dist, 0.0, 1.0); + density = clamp(density, 0.0001, 1.0); + + float att_factor = mix(1.0, 0.75, bright * (1.0 - rainStrength)); + + #if CLOUD_VOL_STYLE == 1 + cloud_color = mix(cloud_color * att_factor, dark_cloud_color * att_factor, pow(density, 0.3) * 0.85); + #else + cloud_color = mix(cloud_color * att_factor, dark_cloud_color * att_factor, pow(density, 0.4)); + #endif + + // Halo brillante de contra al sol + cloud_color = + mix(cloud_color, cloud_color * 13.0, (1.0 - pow(cloud_value, 0.2)) * bright * bright * (1.0 - rainStrength)); + + block_color = mix( + block_color, + cloud_color, + cloud_value * clamp((view_vector.y - 0.06) * 5.0, 0.0, 1.0) + ); + } + + return block_color; +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/volumetric_clouds_end.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/volumetric_clouds_end.glsl new file mode 100644 index 0000000..472755e --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/volumetric_clouds_end.glsl @@ -0,0 +1,142 @@ +/* MakeUp - volumetric_clouds_end.glsl +Fast volumetric clouds (for The End) - MakeUp implementation +*/ + +vec3 get_end_cloud(vec3 view_vector, vec3 block_color, float bright, float dither, vec3 base_pos, int samples) { + float plane_distance; + float cloud_value; + float umbral; + float density; + vec3 intersection_pos; + vec3 intersection_pos_sup; + float dif_inf; + float dif_sup; + float dist_aux_coeff; + float current_value; + float surface_inf; + float surface_sup; + bool first_contact = true; + float opacity_dist; + vec3 increment; + float increment_dist; + float view_y_inv = 1.0 / view_vector.y; + float distance_aux; + float dist_aux_coeff_blur; + + block_color.rgb *= + clamp(bright + ((dither - .5) * .1), 0.0, 1.0) * .3 + 1.0; + + #if defined DISTANT_HORIZONS && defined DEFERRED_SHADER + float d_dh = texture2D(dhDepthTex0, vec2(gl_FragCoord.x / viewWidth, gl_FragCoord.y / viewHeight)).r; + float linear_d_dh = ld_dh(d_dh); + if (linear_d_dh < 0.9999) { + return block_color; + } + #endif + + if (view_vector.y > 0.0) { // Vista sobre el horizonte + umbral = 0.25; + + vec3 cloud_color = block_color * 1.75; + vec3 dark_cloud_color = block_color * 0.9; + + plane_distance = (CLOUD_PLANE - base_pos.y) * view_y_inv; + intersection_pos = (view_vector * plane_distance) + base_pos; + + plane_distance = (CLOUD_PLANE_SUP - base_pos.y) * view_y_inv; + intersection_pos_sup = (view_vector * plane_distance) + base_pos; + + dif_sup = CLOUD_PLANE_SUP - CLOUD_PLANE_CENTER; + dif_inf = CLOUD_PLANE_CENTER - CLOUD_PLANE; + dist_aux_coeff = (CLOUD_PLANE_SUP - CLOUD_PLANE) * 0.075; + dist_aux_coeff_blur = dist_aux_coeff * 0.4; + + opacity_dist = dist_aux_coeff * 2.5 * view_y_inv; + + increment = (intersection_pos_sup - intersection_pos) / samples; + increment_dist = length(increment); + + cloud_value = 0.0; + + intersection_pos += (increment * dither); + + for (int i = 0; i < samples; i++) { + current_value = + texture2D( + gaux2, + (intersection_pos.xz * .0008) + (frameTimeCounter * CLOUD_HI_FACTOR * 3.0) + ).r; + + #if V_CLOUDS == 2 && CLOUD_VOL_STYLE == 0 + current_value += + texture2D( + gaux2, + (intersection_pos.zx * .0008) + (frameTimeCounter * CLOUD_LOW_FACTOR * 3.0) + ).r; + current_value *= 0.5; + current_value = smoothstep(0.05, 0.95, current_value); + #endif + + // Ajuste por umbral + current_value = (current_value - umbral) / (1.0 - umbral); + + // Superficies inferior y superior de nubes + surface_inf = CLOUD_PLANE_CENTER - (current_value * dif_inf); + surface_sup = CLOUD_PLANE_CENTER + (current_value * dif_sup); + + if ( // Dentro de la nube + intersection_pos.y > surface_inf && + intersection_pos.y < surface_sup + ) { + cloud_value += min(increment_dist, surface_sup - surface_inf); + + if (first_contact) { + first_contact = false; + density = + (surface_sup - intersection_pos.y) / (CLOUD_PLANE_SUP - CLOUD_PLANE); + } + } + else if (surface_inf < surface_sup && i > 0) { // Fuera de la nube + distance_aux = min( + abs(intersection_pos.y - surface_inf), + abs(intersection_pos.y - surface_sup) + ); + + if (distance_aux < dist_aux_coeff_blur) { + cloud_value += min( + (clamp(dist_aux_coeff_blur - distance_aux, 0.0, dist_aux_coeff_blur) / dist_aux_coeff_blur) * increment_dist, + surface_sup - surface_inf + ); + + if (first_contact) { + first_contact = false; + density = + (surface_sup - intersection_pos.y) / + (CLOUD_PLANE_SUP - CLOUD_PLANE); + } + } + } + + intersection_pos += increment; + } + + cloud_value = clamp(cloud_value / opacity_dist, 0.0, 1.0); + density = clamp(density, 0.0001, 1.0); + + cloud_color = mix(cloud_color, dark_cloud_color, sqrt(density)); + + // Halo brillante de contra al sol + cloud_color = mix(cloud_color, cloud_color * 2.0, (1.0 - cloud_value) * bright); + + block_color = mix( + block_color, + cloud_color, + cloud_value * clamp((view_vector.y - 0.06) * 5.0, 0.0, 1.0) + ); + + block_color = + mix(block_color, vec3(1.0), clamp(bright * .04, 0.0, 1.0)); + } + + return block_color; +} \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/volumetric_clouds_vertex.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/volumetric_clouds_vertex.glsl new file mode 100644 index 0000000..45e6e12 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/volumetric_clouds_vertex.glsl @@ -0,0 +1,51 @@ +#if MC_VERSION >= 11300 + umbral = (smoothstep(1.0, 0.0, rainStrength) * .3) + .25; +#else + umbral = (smoothstep(1.0, 0.0, rainStrength) * .3) + .55; +#endif + +dark_cloud_color = day_blend( + ZENITH_SUNSET_COLOR, + ZENITH_DAY_COLOR, + ZENITH_NIGHT_COLOR +); + +dark_cloud_color = mix( + dark_cloud_color, + ZENITH_SKY_RAIN_COLOR * color_average(dark_cloud_color), + rainStrength +); + +vec3 cloud_color_aux = mix( + day_blend( + LIGHT_SUNSET_COLOR, + LIGHT_DAY_COLOR, + LIGHT_NIGHT_COLOR * vec3(0.5, 0.6, 0.75) + ), + ZENITH_SKY_RAIN_COLOR * color_average(dark_cloud_color), + rainStrength +); + +cloud_color = mix( + clamp(mix(vec3(luma(cloud_color_aux)), cloud_color_aux, 0.5) * vec3(1.5), 0.0, 1.4), + day_blend( + HORIZON_SUNSET_COLOR, + HORIZON_DAY_COLOR, + HORIZON_NIGHT_COLOR + ), + 0.3 +); + +cloud_color = mix(cloud_color, HORIZON_SKY_RAIN_COLOR * luma(cloud_color_aux) * 5.0, rainStrength); + +dark_cloud_color = mix(dark_cloud_color, cloud_color, 0.22); + +dark_cloud_color = mix( + dark_cloud_color, + day_blend( + cloud_color_aux, + dark_cloud_color, + dark_cloud_color + ), + 0.4 +); \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/volumetric_light.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/volumetric_light.glsl new file mode 100644 index 0000000..6c94d75 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/volumetric_light.glsl @@ -0,0 +1,130 @@ +/* MakeUp - volumetric_clouds.glsl +Volumetric light - MakeUp implementation +*/ + +#if VOL_LIGHT == 2 + + #define diagonal3(m) vec3((m)[0].x, (m)[1].y, m[2].z) + + vec3 get_volumetric_pos(vec3 shadow_pos) { + shadow_pos = mat3(shadowModelView) * shadow_pos + shadowModelView[3].xyz; + shadow_pos = diagonal3(shadowProjection) * shadow_pos + shadowProjection[3].xyz; + float distb = length(shadow_pos.xy); + float distortion = distb * SHADOW_DIST + (1.0 - SHADOW_DIST); + + shadow_pos.xy /= distortion; + shadow_pos.z *= 0.2; + + return shadow_pos * 0.5 + 0.5; + } + + float get_volumetric_light(float dither, float view_distance, mat4 modeli_times_projectioni) { + float light = 0.0; + + float current_depth; + vec3 view_pos; + vec4 pos; + vec3 shadow_pos; + + for (int i = 0; i < GODRAY_STEPS; i++) { + // Exponentialy spaced shadow samples + current_depth = exp2(i + dither) - 0.6; + if (current_depth > view_distance) { + break; + } + + // Distance to depth + current_depth = (far * (current_depth - near)) / (current_depth * (far - near)); + + view_pos = vec3(texcoord, current_depth); + + // Clip to world + pos = modeli_times_projectioni * (vec4(view_pos, 1.0) * 2.0 - 1.0); + view_pos = (pos.xyz /= pos.w).xyz; + shadow_pos = get_volumetric_pos(view_pos); + light += shadow2D(shadowtex1, shadow_pos).r; + } + + light /= GODRAY_STEPS; + + return light * light; + } + + #if defined COLORED_SHADOW + + vec3 get_volumetric_color_light(float dither, float view_distance, mat4 modeli_times_projectioni) { + float light = 0.0; + + float current_depth; + vec3 view_pos; + vec4 pos; + vec3 shadow_pos; + + float shadow_detector = 1.0; + float shadow_black = 1.0; + vec4 shadow_color = vec4(1.0); + vec3 light_color = vec3(0.0); + + float alpha_complement; + + for (int i = 0; i < GODRAY_STEPS; i++) { + // Exponentialy spaced shadow samples + current_depth = exp2(i + dither) - 0.96; // 0.96 avoids points behind near plane + if (current_depth > view_distance) { + break; + } + + // Distance to depth + current_depth = (far * (current_depth - near)) / (current_depth * (far - near)); + + view_pos = vec3(texcoord, current_depth); + + // Clip to world + pos = modeli_times_projectioni * (vec4(view_pos, 1.0) * 2.0 - 1.0); + view_pos = (pos.xyz /= pos.w).xyz; + + shadow_pos = get_volumetric_pos(view_pos); + + shadow_detector = shadow2D(shadowtex0, vec3(shadow_pos.xy, shadow_pos.z - 0.001)).r; + if (shadow_detector < 1.0) { + shadow_black = shadow2D(shadowtex1, vec3(shadow_pos.xy, shadow_pos.z - 0.001)).r; + if (shadow_black != shadow_detector) { + shadow_color = texture2D(shadowcolor0, shadow_pos.xy); + alpha_complement = 1.0 - shadow_color.a; + shadow_color.rgb *= alpha_complement; + shadow_color.rgb = mix(shadow_color.rgb, vec3(1.0), alpha_complement); + } + } + + shadow_color *= shadow_black; + light_color += clamp(shadow_color.rgb * (1.0 - shadow_detector) + shadow_detector, vec3(0.0), vec3(1.0)); + } + + light_color /= GODRAY_STEPS; + + return light_color; + } + + #endif + +#elif VOL_LIGHT == 1 + + float ss_godrays(float dither) { + float light = 0.0; + float comp = 1.0 - (near / (far * far)); + + vec2 ray_step = vec2(lightpos - texcoord) * 0.2; + vec2 dither2d = texcoord + (ray_step * dither); + + float depth; + + for (int i = 0; i < CHEAP_GODRAY_SAMPLES; i++) { + depth = texture2D(depthtex1, dither2d).x; + dither2d += ray_step; + light += step(comp, depth); + } + + return light / CHEAP_GODRAY_SAMPLES; + } + +#endif diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/water.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/water.glsl new file mode 100644 index 0000000..290060f --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/water.glsl @@ -0,0 +1,324 @@ +/* MakeUp - water.glsl +Water reflection and refraction related functions. +*/ + +vec3 fast_raymarch(vec3 direction, vec3 hit_coord, inout float infinite, float dither) { + vec3 dir_increment; + vec3 current_march = hit_coord; + vec3 old_current_march; + float screen_depth; + float depth_diff = 1.0; + vec3 march_pos = camera_to_screen(hit_coord); + float prev_screen_depth = march_pos.z; + float hit_z = march_pos.z; + bool search_flag = false; + bool hidden_flag = false; + bool first_hidden = true; + bool out_flag = false; + bool to_far = false; + vec3 last_march_pos; + + int no_hidden_steps = 0; + bool hiddens = false; + + // Ray marching + for (int i = 0; i < RAYMARCH_STEPS; i++) { + if (search_flag) { + dir_increment *= 0.5; + current_march += dir_increment * sign(depth_diff); + } else { + old_current_march = current_march; + current_march = hit_coord + ((direction * exp2(i + dither)) - direction); + dir_increment = current_march - old_current_march; + } + + last_march_pos = march_pos; + march_pos = camera_to_screen(current_march); + + if ( // Is outside screen space + march_pos.x < 0.0 || + march_pos.x > 1.0 || + march_pos.y < 0.0 || + march_pos.y > 1.0 || + march_pos.z < 0.0 + ) { + out_flag = true; + } + + if (march_pos.z > 0.9999) { + to_far = true; + } + + screen_depth = texture2D(depthtex1, march_pos.xy).x; + depth_diff = screen_depth - march_pos.z; + + if (depth_diff < 0.0 && abs(screen_depth - prev_screen_depth) > abs(march_pos.z - last_march_pos.z)) { + hidden_flag = true; + hiddens = true; + if (first_hidden) { + first_hidden = false; + } + } else if (depth_diff > 0.0) { + hidden_flag = false; + if (!hiddens) { + no_hidden_steps++; + } + } + + if (search_flag == false && depth_diff < 0.0 && hidden_flag == false) { + search_flag = true; + } + + prev_screen_depth = screen_depth; + } + + infinite = float(screen_depth > 0.9999); + + if (out_flag) { + infinite = 1.0; + return march_pos; + } else if (to_far) { + if (screen_depth > 0.9999) { + infinite = 1.0; + return march_pos; + } else if (no_hidden_steps < 3 || screen_depth > hit_z) { + return march_pos; + } else { + infinite = 1.0; + return vec3(1.0); + } + } else { + return march_pos; + } +} + +#if SUN_REFLECTION == 1 + #if !defined NETHER && !defined THE_END + float sun_reflection(vec3 fragpos) { + vec3 astro_pos = worldTime > 12900 ? moonPosition : sunPosition; + float astro_vector = + max(dot(normalize(fragpos), normalize(astro_pos)), 0.0); + + return smoothstep(0.995, 1.0, astro_vector) * + clamp(lmcoord.y, 0.0, 1.0) * + (1.0 - rainStrength) * 3.0; + } + #endif +#endif + +vec3 normal_waves(vec3 pos) { + float speed = frameTimeCounter * .025; + vec2 wave_1 = + texture2D(noisetex, ((pos.xy - pos.z * 0.2) * 0.05) + vec2(speed, speed)).rg; + wave_1 = wave_1 - .5; + vec2 wave_2 = + texture2D(noisetex, ((pos.xy - pos.z * 0.2) * 0.03125) - speed).rg; + wave_2 = wave_2 - .5; + vec2 wave_3 = + texture2D(noisetex, ((pos.xy - pos.z * 0.2) * 0.125) + vec2(speed, -speed)).rg; + wave_3 = wave_3 - .5; + wave_3 *= 0.66; + + vec2 partial_wave = wave_1 + wave_2 + wave_3; + vec3 final_wave = vec3(partial_wave, WATER_TURBULENCE - (rainStrength * 0.6 * WATER_TURBULENCE * visible_sky)); + + return normalize(final_wave); +} + +vec3 refraction(vec3 fragpos, vec3 color, vec3 refraction) { + vec2 pos = gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y); + + #if REFRACTION == 1 + pos = pos + refraction.xy * (0.075 / (1.0 + length(fragpos) * 0.4)); + #endif + + float water_absortion; + if (isEyeInWater == 0) { + float water_distance = + 2.0 * near * far / (far + near - (2.0 * gl_FragCoord.z - 1.0) * (far - near)); + + float earth_distance = texture2D(depthtex1, pos.xy).r; + earth_distance = + 2.0 * near * far / (far + near - (2.0 * earth_distance - 1.0) * (far - near)); + + #if defined DISTANT_HORIZONS + float earth_distance_dh = texture2D(dhDepthTex1, pos.xy).r; + earth_distance_dh = + 2.0 * dhNearPlane * dhFarPlane / (dhFarPlane + dhNearPlane - (2.0 * earth_distance_dh - 1.0) * (dhFarPlane - dhNearPlane)); + earth_distance = min(earth_distance, earth_distance_dh); + #endif + + water_absortion = earth_distance - water_distance; + water_absortion *= water_absortion; + water_absortion = (1.0 / -((water_absortion * WATER_ABSORPTION) + 1.125)) + 1.0; + } else { + water_absortion = 0.0; + } + + return mix(texture2D(gaux1, pos.xy).rgb, color, water_absortion); +} + +vec3 get_normals(vec3 bump, vec3 fragpos) { + float NdotE = abs(dot(water_normal, normalize(fragpos))); + + bump *= vec3(NdotE) + vec3(0.0, 0.0, 1.0 - NdotE); + + mat3 tbn_matrix = mat3( + tangent.x, binormal.x, water_normal.x, + tangent.y, binormal.y, water_normal.y, + tangent.z, binormal.z, water_normal.z + ); + + return normalize(bump * tbn_matrix); +} + +vec4 reflection_calc(vec3 fragpos, vec3 normal, vec3 reflected, inout float infinite, float dither) { + #if SSR_TYPE == 0 // Flipped image + #if defined DISTANT_HORIZONS + vec3 pos = camera_to_screen(fragpos + reflected * 768.0); + #else + vec3 pos = camera_to_screen(fragpos + reflected * 76.0); + #endif + #else // Raymarch + vec3 pos = fast_raymarch(reflected, fragpos, infinite, dither); + #endif + + float border = + clamp((1.0 - (max(0.0, abs(pos.y - 0.5)) * 2.0)) * 50.0, 0.0, 1.0); + + border = clamp(border - pow(pos.y, 10.0), 0.0, 1.0); + + pos.x = abs(pos.x); + if (pos.x > 1.0) { + pos.x = 1.0 - (pos.x - 1.0); + } + + return vec4(texture2D(gaux1, pos.xy).rgb, border); +} + +vec3 water_shader( + vec3 fragpos, + vec3 normal, + vec3 color, + vec3 sky_reflect, + vec3 reflected, + float fresnel, + float visible_sky, + float dither, + vec3 light_color +) { + vec4 reflection = vec4(0.0); + float infinite = 1.0; + + #if REFLECTION == 1 + reflection = + reflection_calc(fragpos, normal, reflected, infinite, dither); + #endif + + reflection.rgb = mix( + sky_reflect * visible_sky, + reflection.rgb, + reflection.a + ); + + #ifdef VANILLA_WATER + fresnel *= 0.8; + #endif + + #if SUN_REFLECTION == 1 + #ifndef NETHER + #ifndef THE_END + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX) + + vec3(sun_reflection(reflect(normalize(fragpos), normal))) * light_color * infinite * visible_sky; + #else + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); + #endif + #else + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); + #endif + #else + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); + #endif +} + +// GLASS + +vec4 cristal_reflection_calc(vec3 fragpos, vec3 normal, inout float infinite, float dither) { + #if SSR_TYPE == 0 + #if defined DISTANT_HORIZONS + vec3 reflected_vector = reflect(normalize(fragpos), normal) * 768.0; + #else + vec3 reflected_vector = reflect(normalize(fragpos), normal) * 76.0; + #endif + vec3 pos = camera_to_screen(fragpos + reflected_vector); + #else + vec3 reflected_vector = reflect(normalize(fragpos), normal); + vec3 pos = fast_raymarch(reflected_vector, fragpos, infinite, dither); + + if (pos.x > 99.0) { // Fallback + #if defined DISTANT_HORIZONS + pos = camera_to_screen(fragpos + reflected_vector * 768.0); + #else + pos = camera_to_screen(fragpos + reflected_vector * 76.0); + #endif + } + #endif + + float border_x = max(-fourth_pow(abs(2.0 * pos.x - 1.0)) + 1.0, 0.0); + float border_y = max(-fourth_pow(abs(2.0 * pos.y - 1.0)) + 1.0, 0.0); + float border = min(border_x, border_y); + + return vec4(texture2D(gaux1, pos.xy, 0.0).rgb, border); +} + +vec4 cristal_shader( + vec3 fragpos, + vec3 normal, + vec4 color, + vec3 sky_reflection, + float fresnel, + float visible_sky, + float dither, + vec3 light_color +) { + vec4 reflection = vec4(0.0); + float infinite = 0.0; + + #if REFLECTION == 1 + reflection = cristal_reflection_calc(fragpos, normal, infinite, dither); + #endif + + sky_reflection = mix(color.rgb, sky_reflection, visible_sky * visible_sky); + + reflection.rgb = mix( + sky_reflection, + reflection.rgb, + reflection.a + ); + + color.rgb = mix(color.rgb, sky_reflection, fresnel); + color.rgb = mix(color.rgb, reflection.rgb, fresnel); + + color.a = mix(color.a, 1.0, fresnel * .9); + + #if SUN_REFLECTION == 1 + #ifndef NETHER + #ifndef THE_END + return color + vec4( + mix( + vec3(sun_reflection(reflect(normalize(fragpos), normal)) * light_color * infinite * visible_sky), + vec3(0.0), + reflection.a + ), + 0.0 + ); + #else + return color; + #endif + #else + return color; + #endif + #else + return color; + #endif +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/water_dh.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/water_dh.glsl new file mode 100644 index 0000000..902b6a5 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/lib/water_dh.glsl @@ -0,0 +1,135 @@ +/* MakeUp - water_dh.glsl +Water reflection and refraction related functions (dh). +*/ + +#if SUN_REFLECTION == 1 + #if !defined NETHER && !defined THE_END + float sun_reflection(vec3 fragpos) { + vec3 astro_pos = worldTime > 12900 ? moonPosition : sunPosition; + float astro_vector = + max(dot(normalize(fragpos), normalize(astro_pos)), 0.0); + + return smoothstep(0.995, 1.0, astro_vector) * + clamp(lmcoord.y, 0.0, 1.0) * + (1.0 - rainStrength) * 3.0; + } + + #endif +#endif + +vec3 normal_waves_dh(vec3 pos) { + vec2 wave_2 = + texture2D(noisetex, ((pos.xy - pos.z * 0.2) * 0.03125) - (frameTimeCounter * .025)).rg; + wave_2 = wave_2 - .5; + vec2 partial_wave = wave_2; + vec3 final_wave = vec3(partial_wave, WATER_TURBULENCE); + + return normalize(final_wave); +} + +vec3 refraction(vec3 fragpos, vec3 color, vec3 refraction) { + vec2 pos = gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y); + + #if REFRACTION == 1 + pos = pos + refraction.xy * (0.075 / (1.0 + length(fragpos) * 0.4)); + #endif + + float water_absortion; + if (isEyeInWater == 0) { + float water_distance = + 2.0 * dhNearPlane * dhFarPlane / (dhFarPlane + dhNearPlane - (2.0 * gl_FragCoord.z - 1.0) * (dhFarPlane - dhNearPlane)); + + float earth_distance = texture2D(dhDepthTex1, pos.xy).r; + earth_distance = + 2.0 * dhNearPlane * dhFarPlane / (dhFarPlane + dhNearPlane - (2.0 * earth_distance - 1.0) * (dhFarPlane - dhNearPlane)); + + water_absortion = (earth_distance - water_distance) * 0.5; + water_absortion *= water_absortion; + water_absortion = (1.0 / -((water_absortion * WATER_ABSORPTION) + 1.125)) + 1.0; + } else { + water_absortion = 0.0; + } + + return mix(texture2D(gaux1, pos.xy).rgb, color, water_absortion); +} + +vec3 get_normals(vec3 bump, vec3 fragpos) { + float NdotE = abs(dot(water_normal, normalize(fragpos))); + + bump *= vec3(NdotE) + vec3(0.0, 0.0, 1.0 - NdotE); + + mat3 tbn_matrix = mat3( + tangent.x, binormal.x, water_normal.x, + tangent.y, binormal.y, water_normal.y, + tangent.z, binormal.z, water_normal.z + ); + + return normalize(bump * tbn_matrix); +} + +vec4 reflection_calc_dh(vec3 fragpos, vec3 normal, vec3 reflected, vec3 infinite_color, float dither) { + vec3 pos = camera_to_screen(fragpos + reflected * 768.0); + + float border = + clamp((1.0 - (max(0.0, abs(pos.y - 0.5)) * 2.0)) * 50.0, 0.0, 1.0); + + border = clamp(border - pow(pos.y, 10.0), 0.0, 1.0); + + pos.x = abs(pos.x); + if (pos.x > 1.0) { + pos.x = 1.0 - (pos.x - 1.0); + } + + vec4 final_reflex; + if (texture2D(depthtex0, pos.xy).r < 0.999) { + final_reflex = vec4(infinite_color, border); + } else { + final_reflex = vec4(texture2D(gaux1, pos.xy).rgb, border); + } + return final_reflex; +} + +vec3 water_shader_dh( + vec3 fragpos, + vec3 normal, + vec3 color, + vec3 sky_reflect, + vec3 reflected, + float fresnel, + float visible_sky, + float dither, + vec3 light_color +) { + vec4 reflection = vec4(0.0); + float infinite = 1.0; + + #if REFLECTION == 1 + reflection = + reflection_calc_dh(fragpos, normal, reflected, sky_reflect, dither); + #endif + + reflection.rgb = mix( + sky_reflect * visible_sky, + reflection.rgb, + reflection.a + ); + + #ifdef VANILLA_WATER + fresnel *= 0.8; + #endif + + #if SUN_REFLECTION == 1 + #ifndef NETHER + #ifndef THE_END + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX) + + vec3(sun_reflection(reflect(normalize(fragpos), normal))) * light_color * infinite * visible_sky; + #else + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); + #endif + #else + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); + #endif + #else + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); + #endif +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/prepare.fsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/prepare.fsh new file mode 100644 index 0000000..c980cf1 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/prepare.fsh @@ -0,0 +1,18 @@ +#version 120 +/* MakeUp - prepare.fsh +Render: Sky + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif + +#define PREPARE_SHADER +#define NO_SHADOWS +#define SET_FOG_COLOR + +#include "/common/prepare_fragment.glsl" \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/prepare.vsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/prepare.vsh new file mode 100644 index 0000000..5f6bdf2 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/prepare.vsh @@ -0,0 +1,17 @@ +#version 120 +/* MakeUp - prepare.vsh +Render: Sky + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif + +#define PREPARE_SHADER +#define NO_SHADOWS + +#include "/common/prepare_vertex.glsl" \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/shaders.properties b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/shaders.properties new file mode 100644 index 0000000..fb78ef2 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/shaders.properties @@ -0,0 +1,210 @@ +# MakeUp - shader.properties + +#Profiles +profile.no_effects= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=0 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=0 SUN_REFLECTION=0 WAVING=0 V_CLOUDS=0 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS +profile.shadowless_low= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=0 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS +profile.shadowless_medium= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.shadowless_high= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.low= SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.medium= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.high= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.extreme= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.extremeplus= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS + +# Default forced options +vignette = false +separateAo = false +oldLighting = false +dynamicHandLight = true +oldHandLight = false +underwaterOverlay = false +sun = true +moon = true +frustum.culling = true +shadow.culling = true +particles.before.deferred = true + +#if V_CLOUDS > 0 + clouds = off +#else + clouds = fancy +#endif + +texture.gbuffers.noisetex = textures/water_256_RG_8bit.png + +#if CLOUD_VOL_STYLE == 0 + texture.gbuffers.gaux2 = textures/clouds_natural_512_R_8bit.png + texture.deferred.gaux2 = textures/clouds_natural_512_R_8bit.png +#else + texture.gbuffers.gaux2 = textures/clouds_blocky_512_R_8bit.png + texture.deferred.gaux2 = textures/clouds_blocky_512_R_8bit.png +#endif + +# texture.deferred.colortex0 = textures/bluenoise_64.png + +program.shadow.enabled=SHADOW_CASTING +program.world0/shadow.enabled=SHADOW_CASTING +program.world1/shadow.enabled=SHADOW_CASTING +program.world-1/shadow.enabled=SHADOW_CASTING + +# Config main screen +screen.columns = 3 +screen = ACERCADE WAVING COLOR_SCHEME BLOOM REFLECTION_SLIDER AO SUN_REFLECTION SHADOW_CASTING V_CLOUDS CLOUD_REFLECTION COLORED_SHADOW AA_TYPE REFRACTION VOL_LIGHT DOF MATERIAL_GLOSS CHROMA_ABER MOTION_BLUR [ADVANCED_SCREEN] + +# Sub-screens: +screen.ADVANCED_SCREEN.columns=3 +screen.ADVANCED_SCREEN = [COMPATIBILITY_SCREEN] [ACCESIBILITY_SCREEN] [CUSTOM_COLORS_SCREEN] [SHADOWS_SCREEN] [DOF_SCREEN] [AO_SCREEN] [WATER_SCREEN] [POST_SCREEN] [CLOUDS_SCREEN] [LIGHT_SCREEN] [FOG_SCREEN] [MOTION_BLUR_SCREEN] + +screen.COMPATIBILITY_SCREEN = USE_BASIC_SH BLACK_ENTITY_FIX DEBUG_MODE +screen.SHADOWS_SCREEN = SHADOW_TYPE SHADOW_BLUR SHADOW_DISTANCE_SLIDER SHADOW_QTY_SLIDER +screen.DOF_SCREEN = DOF_STRENGTH +screen.AO_SCREEN = AOSTEPS AO_STRENGTH +screen.WATER_SCREEN = WATER_ABSORPTION WATER_TEXTURE VANILLA_WATER WATER_COLOR_SOURCE WATER_TURBULENCE +screen.POST_SCREEN = BLOOM_SAMPLES CHROMA_ABER_STRENGTH +screen.CLOUDS_SCREEN = CLOUD_SPEED CLOUD_STEPS_AVG CLOUD_VOL_STYLE END_CLOUDS sunPathRotation +screen.LIGHT_SCREEN = AVOID_DARK_LEVEL NIGHT_BRIGHT BLOCKLIGHT_TEMP DYN_HAND_LIGHT +screen.FOG_SCREEN = FOG_ACTIVE FOG_ADJUST NETHER_FOG_DISTANCE +screen.MOTION_BLUR_SCREEN = MOTION_BLUR_STRENGTH MOTION_BLUR_SAMPLES +screen.ACCESIBILITY_SCREEN = COLOR_BLINDNESS COLOR_BLIND_MODE + +screen.CUSTOM_COLORS_DAY.columns=3 +screen.CUSTOM_COLORS_DAY = LIGHT_DAY_COLOR_R LIGHT_DAY_COLOR_G LIGHT_DAY_COLOR_B ZENITH_DAY_COLOR_R ZENITH_DAY_COLOR_G ZENITH_DAY_COLOR_B HORIZON_DAY_COLOR_R HORIZON_DAY_COLOR_G HORIZON_DAY_COLOR_B + +screen.CUSTOM_COLORS_SUNSET.columns=3 +screen.CUSTOM_COLORS_SUNSET = LIGHT_SUNSET_COLOR_R LIGHT_SUNSET_COLOR_G LIGHT_SUNSET_COLOR_B ZENITH_SUNSET_COLOR_R ZENITH_SUNSET_COLOR_G ZENITH_SUNSET_COLOR_B HORIZON_SUNSET_COLOR_R HORIZON_SUNSET_COLOR_G HORIZON_SUNSET_COLOR_B + +screen.CUSTOM_COLORS_NIGHT.columns=3 +screen.CUSTOM_COLORS_NIGHT = LIGHT_NIGHT_COLOR_R LIGHT_NIGHT_COLOR_G LIGHT_NIGHT_COLOR_B ZENITH_NIGHT_COLOR_R ZENITH_NIGHT_COLOR_G ZENITH_NIGHT_COLOR_B HORIZON_NIGHT_COLOR_R HORIZON_NIGHT_COLOR_G HORIZON_NIGHT_COLOR_B + +screen.CUSTOM_COLORS_WATER.columns=3 +screen.CUSTOM_COLORS_WATER = WATER_COLOR_R WATER_COLOR_G WATER_COLOR_B + +screen.CUSTOM_COLORS_NV.columns=3 +screen.CUSTOM_COLORS_NV = NV_COLOR_R NV_COLOR_G NV_COLOR_B + +screen.CUSTOM_COLORS_SCREEN.columns=1 +screen.CUSTOM_COLORS_SCREEN = [CUSTOM_COLORS_DAY] [CUSTOM_COLORS_SUNSET] [CUSTOM_COLORS_NIGHT] [CUSTOM_COLORS_WATER] [CUSTOM_COLORS_NV] OMNI_TINT_CUSTOM + +sliders = SHADOW_DISTANCE_SLIDER SHADOW_QTY_SLIDER REFLECTION_SLIDER SHADOW_BLUR DOF_STRENGTH AOSTEPS AO_STRENGTH MOTION_BLUR_STRENGTH WATER_ABSORPTION CHROMA_ABER_STRENGTH BLOOM_SAMPLES CLOUD_STEPS_AVG sunPathRotation NIGHT_BRIGHT AVOID_DARK_LEVEL WATER_TURBULENCE FOG_ADJUST MOTION_BLUR_SAMPLES BLOCKLIGHT_TEMP LIGHT_DAY_COLOR_R LIGHT_DAY_COLOR_G LIGHT_DAY_COLOR_B ZENITH_DAY_COLOR_R ZENITH_DAY_COLOR_G ZENITH_DAY_COLOR_B HORIZON_DAY_COLOR_R HORIZON_DAY_COLOR_G HORIZON_DAY_COLOR_B LIGHT_SUNSET_COLOR_R LIGHT_SUNSET_COLOR_G LIGHT_SUNSET_COLOR_B ZENITH_SUNSET_COLOR_R ZENITH_SUNSET_COLOR_G ZENITH_SUNSET_COLOR_B HORIZON_SUNSET_COLOR_R HORIZON_SUNSET_COLOR_G HORIZON_SUNSET_COLOR_B LIGHT_NIGHT_COLOR_R LIGHT_NIGHT_COLOR_G LIGHT_NIGHT_COLOR_B ZENITH_NIGHT_COLOR_R ZENITH_NIGHT_COLOR_G ZENITH_NIGHT_COLOR_B HORIZON_NIGHT_COLOR_R HORIZON_NIGHT_COLOR_G HORIZON_NIGHT_COLOR_B WATER_COLOR_R WATER_COLOR_G WATER_COLOR_B NV_COLOR_R NV_COLOR_G NV_COLOR_B OMNI_TINT_CUSTOM + +# Custom uniforms ----- + +# Many values are precalculated to avoid their later or repetitive calculation. + +# Pixel size +uniform.float.pixel_size_x = 1.0 / viewWidth +uniform.float.pixel_size_y = 1.0 / viewHeight +uniform.float.inv_aspect_ratio = 1.0 / aspectRatio + +# Time constants +variable.float.hour_world = worldTime * 0.001 +uniform.float.day_moment = hour_world * 0.04166666666666667 + +# Day color mixer (for shadows) - This formula allows graphing the function that is calculated later. +# It allows setting values depending on the time of day. Particularly interesting are the transitions +# from day to night and vice versa, which are often used to indicate the intensity of the shadow +# (when it is produced by the moon instead of the sun), and other similar things. +# f(x) = min(−((x−.25)^2)∙20 + 1.25, 1) +# g(x) = min(−((x−.75)^2)∙50 + 3.125, 1) + +variable.float.moment_aux = day_moment - 0.25 +variable.float.moment_aux_2 = moment_aux * moment_aux +uniform.float.day_mixer = clamp(-moment_aux_2 * 20.0 + 1.25, 0.0, 1.0) + +variable.float.moment_aux_3 = day_moment - 0.75 +variable.float.moment_aux_4 = moment_aux_3 * moment_aux_3 +uniform.float.night_mixer = clamp(-moment_aux_4 * 50.0 + 3.125, 0.0, 1.0) + +# Day color mixer (for volumetric light) - "Similar to the previous case, but applied to values +# dependent on the time of day for volumetric lighting. + +variable.float.moment_aux_5 = (day_moment * 4.0) - 1.0 +variable.float.moment_aux_6 = moment_aux_5 * moment_aux_5 * moment_aux_5 * moment_aux_5 +variable.float.day_vol_mixer = clamp(((-moment_aux_6 + 1.0) * 7.0) + 1.0, 1.0, 8.0) + +variable.float.moment_aux_7 = (day_moment * 4.0) - 3.0 +variable.float.moment_aux_8 = moment_aux_7 * moment_aux_7 * moment_aux_7 * moment_aux_7 +variable.float.night_vol_mixer = clamp(((-moment_aux_8 + 1.0) * 7.0) + 1.0, 1.0, 8.0) + +uniform.float.vol_mixer = max(day_vol_mixer, night_vol_mixer) + +# Light mix - Similar to the previous cases, a value that depends on the time of day +# to adjust various different parameters. +variable.float.light_mix_a = if((worldTime >= 0 && worldTime < 12485) || worldTime >= 23515, 1.0, 0.0) +variable.float.light_mix_b = if(worldTime >= 12485 && worldTime < 13085, 1.0 - ((worldTime - 12485) * 0.0016666666666666668), 0.0) +variable.float.light_mix_c = 0.0 +variable.float.light_mix_d = if(worldTime >= 22915 && worldTime < 23515, (worldTime - 22915) * 0.0016666666666666668, 0.0) +variable.float.light_mix_e = max(light_mix_a, light_mix_b) +variable.float.light_mix_f = max(light_mix_c, light_mix_d) +uniform.float.light_mix = max(light_mix_e, light_mix_f) + +# Frame modulus +uniform.int.frame_mod = fmod(frameCounter, 10) + +# TAA OFFSET - The offset for TAA is precalculated here. +# It is based on a pentagon (repeated twice as it is a multiple of the 10-frame module.) +# The traversal goes from one vertex of the pentagon to another at the opposite end, +# so that the traversal between different points is maximized and the images vary +# as much as possible from one to the next. It helps to make the flickering of the image +# so fast that it is "absorbed" and better masked by the TAA history. + +#if AA_TYPE > -1 + # Pentagon + uniform.vec2.taa_offset = vec2((if( \ + frame_mod == 0, 0.7071067811865476, \ + frame_mod == 1, -0.5720614028176843, \ + frame_mod == 2, 0.2185080122244104, \ + frame_mod == 3, 0.21850801222441057, \ + frame_mod == 4, -0.5720614028176845, \ + frame_mod == 5, 0.7071067811865476, \ + frame_mod == 6, -0.5720614028176843, \ + frame_mod == 7, 0.2185080122244104, \ + frame_mod == 8, 0.21850801222441057, \ + frame_mod == 9, -0.5720614028176845, \ + 0.0)) * pixel_size_x, \ + (if( \ + frame_mod == 0, 0.0, \ + frame_mod == 1, 0.4156269377774535, \ + frame_mod == 2, -0.6724985119639574, \ + frame_mod == 3, 0.6724985119639574, \ + frame_mod == 4, -0.4156269377774534, \ + frame_mod == 5, 0.0, \ + frame_mod == 6, 0.4156269377774535, \ + frame_mod == 7, -0.6724985119639574, \ + frame_mod == 8, 0.6724985119639574, \ + frame_mod == 9, -0.4156269377774534, \ + 0.0)) * pixel_size_y) + + # Dither shift - When Temporal sampling is active, dithering patterns change over time, + # but not randomly. The dithering pattern remains fixed, but the assigned + # value to each point changes by adding a value defined here, so that they + # "rotate" in a controlled manner within the range of 0 to 1. + # When the sum exceeds 1.0, only the mantissa is taken. The changes are not completely random. + # They are incremental, but not by a fixed amount, but rather a fixed amount + # that was slightly altered by randomness. This only works in recent versions + # of Minecraft/Optifine. For older versions, a mechanism that depends on the + # uniform "frame_mod" is used to calculate the increment. + uniform.float.dither_shift = if( \ + frame_mod == 0, 0.0, \ + frame_mod == 1, 0.9, \ + frame_mod == 2, 0.5, \ + frame_mod == 3, 0.8, \ + frame_mod == 4, 0.3, \ + frame_mod == 5, 0.7, \ + frame_mod == 6, 0.1, \ + frame_mod == 7, 0.6, \ + frame_mod == 8, 0.4, \ + frame_mod == 9, 0.2, \ + 0.0) +#endif + +# FOV - A precalculated value related to FOV +uniform.float.fov_y_inv = 1.0 / atan(1.0 / gbufferProjection.1.1) * 0.5 + +# float horizontalFOV = atan(1.0 / gbufferProjection[0].x); +# float verticalFOV = atan(1.0 / gbufferProjection[1].y); <-- fov_y_inv + +#ifdef DISTANT_HORIZONS +dhShadow.enabled = false +blend.dh_water=SRC_ALPHA ONE_MINUS_SRC_ALPHA ONE ONE_MINUS_SRC_ALPHA +#endif \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/shadow.fsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/shadow.fsh new file mode 100644 index 0000000..8248104 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/shadow.fsh @@ -0,0 +1,13 @@ +#version 120 +/* MakeUp - shadow.fsh +Render: Shadowmap + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define SHADOW_SHADER + +#include "/common/shadow_fragment.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/shadow.vsh b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/shadow.vsh new file mode 100644 index 0000000..454c2ce --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/shadow.vsh @@ -0,0 +1,13 @@ +#version 120 +/* MakeUp - shadow.fsh +Render: Shadowmap + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#ifdef USE_BASIC_SH + #define UNKNOWN_DIM +#endif +#define SHADOW_SHADER + +#include "/common/shadow_vertex.glsl" diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/basiccoords_vertex.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/basiccoords_vertex.glsl new file mode 100644 index 0000000..6d43872 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/basiccoords_vertex.glsl @@ -0,0 +1,9 @@ +texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + +#ifndef SHADER_BASIC + #ifdef WATER_F + lmcoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy * 1.0323886639676114; + #else + vec2 lmcoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy * 1.0323886639676114; + #endif +#endif diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/basiccoords_vertex_dh.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/basiccoords_vertex_dh.glsl new file mode 100644 index 0000000..3a4479f --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/basiccoords_vertex_dh.glsl @@ -0,0 +1,7 @@ +texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + +#ifdef DH_WATER + lmcoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy * 1.0323886639676114; +#else + vec2 lmcoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy * 1.0323886639676114; +#endif diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/cloudfinalcolor.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/cloudfinalcolor.glsl new file mode 100644 index 0000000..ae993d1 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/cloudfinalcolor.glsl @@ -0,0 +1,6 @@ +block_color.rgb = + mix( + block_color.rgb, + texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb, + clamp(pow(gl_FogFragCoord / (far * 1.66), 1.5), 0.0, 1.0) + ); diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/finalcolor.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/finalcolor.glsl new file mode 100644 index 0000000..7b0eb5c --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/finalcolor.glsl @@ -0,0 +1,41 @@ +#if defined THE_END + if(isEyeInWater == 0 && FOG_ADJUST < 15.0) { // In the air + block_color.rgb = mix(block_color.rgb, ZENITH_DAY_COLOR, frog_adjust); + } +#elif defined NETHER + if(isEyeInWater == 0 && FOG_ADJUST < 15.0) { // In the air + block_color.rgb = mix(block_color.rgb, mix(fogColor * 0.1, vec3(1.0), 0.04), frog_adjust); + } +#else + #ifdef FOG_ACTIVE // Fog active + #if MC_VERSION >= 11900 + vec3 fog_texture; + if(darknessFactor > .01) { + fog_texture = vec3(0.0); + } else { + fog_texture = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb; + } + #else + vec3 fog_texture = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb; + #endif + #if defined GBUFFER_ENTITIES + if(isEyeInWater == 0 && entityId != 10101 && FOG_ADJUST < 15.0) { // In the air + block_color.rgb = mix(block_color.rgb, fog_texture, frog_adjust); + } + #else + if(isEyeInWater == 0) { // In the air + block_color.rgb = mix(block_color.rgb, fog_texture, frog_adjust); + } + #endif + #endif +#endif + +#if MC_VERSION >= 11900 + if(blindness > .01 || darknessFactor > .01) { + block_color.rgb = mix(block_color.rgb, vec3(0.0), max(blindness, darknessLightFactor) * gl_FogFragCoord * 0.24); + } +#else + if(blindness > .01) { + block_color.rgb = mix(block_color.rgb, vec3(0.0), blindness * gl_FogFragCoord * 0.24); + } +#endif \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/finalcolor_dh.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/finalcolor_dh.glsl new file mode 100644 index 0000000..da35d84 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/finalcolor_dh.glsl @@ -0,0 +1,15 @@ +#if defined DH_WATER + if(isEyeInWater == 0) { + vec3 fog_texture = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb; + block_color.rgb = mix(block_color.rgb, fog_texture, frog_adjust); + } +#elif defined NETHER + #if NETHER_FOG_DISTANCE == 1 + block_color.rgb = mix(fogColor * 0.1, vec3(1.0), 0.04); + #else + block_color.rgb = mix(block_color.rgb, mix(fogColor * 0.1, vec3(1.0), 0.04), frog_adjust); + #endif +#else + vec3 fog_texture = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb; + block_color.rgb = mix(block_color.rgb, fog_texture, frog_adjust); +#endif \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/fog_vertex.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/fog_vertex.glsl new file mode 100644 index 0000000..90677ef --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/fog_vertex.glsl @@ -0,0 +1,47 @@ +#if !defined THE_END && !defined NETHER + + // Fog intensity calculation + #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + float fog_density_coeff = FOG_DENSITY * FOG_ADJUST; + #else + float fog_density_coeff = day_blend_float( + FOG_SUNSET, + FOG_DAY, + FOG_NIGHT + ) * FOG_ADJUST; + #endif + + float fog_intensity_coeff = eye_bright_smooth.y * 0.004166666666666667; + + #ifdef DISTANT_HORIZONS + frog_adjust = pow( + clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0) * fog_intensity_coeff, + mix(fog_density_coeff * 0.15, 0.25, rainStrength) + ); + #else + frog_adjust = pow( + clamp(gl_FogFragCoord / far, 0.0, 1.0) * fog_intensity_coeff, + mix(fog_density_coeff, 1.0, rainStrength) + ); + #endif + +#else + #if defined NETHER + #if NETHER_FOG_DISTANCE == 1 + float sight = NETHER_SIGHT; + #else + #if defined DISTANT_HORIZONS + float sight = dhRenderDistance; + #else + float sight = NETHER_SIGHT; + #endif + #endif + #else + #if defined DISTANT_HORIZONS + float sight = dhRenderDistance; + #else + float sight = far; + #endif + #endif + frog_adjust = sqrt(clamp(gl_FogFragCoord / sight, 0.0, 1.0)); +#endif diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/hi_sky.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/hi_sky.glsl new file mode 100644 index 0000000..979ae9d --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/hi_sky.glsl @@ -0,0 +1,18 @@ +#ifdef UNKNOWN_DIM + vec3 hi_sky_color_rgb = skyColor; + hi_sky_color = rgb_to_xyz(hi_sky_color_rgb); +#else + vec3 hi_sky_color_rgb = day_blend( + ZENITH_SUNSET_COLOR, + ZENITH_DAY_COLOR, + ZENITH_NIGHT_COLOR + ); + + hi_sky_color_rgb = mix( + hi_sky_color_rgb, + ZENITH_SKY_RAIN_COLOR * luma(hi_sky_color_rgb), + rainStrength + ); + + hi_sky_color = rgb_to_xyz(hi_sky_color_rgb); +#endif \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/light_vertex.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/light_vertex.glsl new file mode 100644 index 0000000..6cbd14b --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/light_vertex.glsl @@ -0,0 +1,148 @@ +tint_color = gl_Color; + +// Native light (lmcoord.x: candel, lmcoord.y: sky) ---- +vec2 illumination = lmcoord; + +// Sky visibility +illumination.y = (max(illumination.y, 0.065) - 0.065) * 1.06951871657754; +visible_sky = clamp(illumination.y, 0.0, 1.0); + +// Underwater light adjust +if (isEyeInWater == 1) { + visible_sky = (visible_sky * .95) + .05; +} + +#if defined UNKNOWN_DIM + visible_sky = (visible_sky * 0.6) + 0.4; +#endif + +// Candels color and intensity +#if defined UNKNOWN_DIM + candle_color = + CANDLE_BASELIGHT * ((illumination.x * illumination.x) + sixth_pow(illumination.x * 1.205)) * 2.75; +#else + candle_color = + CANDLE_BASELIGHT * (pow(illumination.x, 1.5) + sixth_pow(illumination.x * 1.17)); +#endif + +#ifdef DYN_HAND_LIGHT + float dist_factor; + float hand_dist; + vec3 hand_light; + + if (heldItemId == 11001 || heldItemId2 == 11001 || heldItemId == 11002 || heldItemId2 == 11002) { + float dist_offset = (heldItemId == 11001 || heldItemId2 == 11001) ? 0.0 : 0.5; + hand_dist = (1.0 - clamp((gl_FogFragCoord * 0.06666666666666667) + dist_offset, 0.0, 1.0)); + hand_light = CANDLE_BASELIGHT * (pow(hand_dist, 1.5) + sixth_pow(hand_dist * 1.17)); + candle_color = max(candle_color, hand_light); + } +#endif + +candle_color = clamp(candle_color, vec3(0.0), vec3(4.0)); + +// Atenuation by light angle =================================== +#if defined THE_END || defined NETHER + vec3 sun_vec = + normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; +#else + vec3 sun_vec = normalize(sunPosition); +#endif + +vec3 normal = gl_NormalMatrix * gl_Normal; +float sun_light_strength; +if (length(normal) != 0.0) { // Workaround for undefined normals + normal = normalize(normal); + sun_light_strength = dot(normal, sun_vec); +} else { + normal = vec3(0.0, 1.0, 0.0); + sun_light_strength = 1.0; +} + +#if defined THE_END || defined NETHER + direct_light_strength = sun_light_strength; +#else + direct_light_strength = + mix(-sun_light_strength, sun_light_strength, light_mix); +#endif + +// Omni light intensity changes by angle +float omni_strength = (direct_light_strength * .125) + 1.0; + +// Direct light color +#ifdef UNKNOWN_DIM + direct_light_color = texture2D(lightmap, vec2(0.0, lmcoord.y)).rgb; +#else + direct_light_color = day_blend( + LIGHT_SUNSET_COLOR, + LIGHT_DAY_COLOR, + LIGHT_NIGHT_COLOR + ); +#endif + +// Direct light strenght -- +#ifdef FOLIAGE_V // This shader has foliage + float far_direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); + if (mc_Entity.x != ENTITY_LEAVES) { + far_direct_light_strength = far_direct_light_strength * 0.75 + 0.25; + } + if (is_foliage > .2) { // It's foliage, light is atenuated by angle + #ifdef SHADOW_CASTING + direct_light_strength = sqrt(abs(direct_light_strength)); + #else + direct_light_strength = (clamp(direct_light_strength, 0.0, 1.0) * 0.5 + 0.5) * 0.75; + #endif + + omni_strength = 1.0; + } else { + direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); + } +#else + direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); +#endif + +// Omni light color +#if defined THE_END || defined NETHER + omni_light = LIGHT_DAY_COLOR; +#else + direct_light_color = mix( + direct_light_color, + ZENITH_SKY_RAIN_COLOR * luma(direct_light_color) * 0.4, + rainStrength + ); + + // Minimal light + vec3 omni_color = mix(hi_sky_color_rgb, direct_light_color * 0.45, OMNI_TINT); + float omni_color_luma = color_average(omni_color); + float luma_ratio = AVOID_DARK_LEVEL / omni_color_luma; + vec3 omni_color_min = omni_color * luma_ratio; + omni_color = max(omni_color, omni_color_min); + + omni_light = mix(omni_color_min, omni_color, visible_sky); +#endif + +// Avoid flat illumination in caves for entities +#ifdef CAVEENTITY_V + float candle_cave_strength = (direct_light_strength * .5) + .5; + candle_cave_strength = + mix(candle_cave_strength, 1.0, visible_sky); + candle_color *= candle_cave_strength; +#endif + +#if !defined THE_END && !defined NETHER + #ifndef SHADOW_CASTING + // Fake shadows + if (isEyeInWater == 0) { + direct_light_strength = mix(0.0, direct_light_strength, pow(visible_sky, 10.0)); + } else { + direct_light_strength = mix(0.0, direct_light_strength, visible_sky); + } + #else + direct_light_strength = mix(0.0, direct_light_strength, visible_sky); + #endif +#endif + +#ifdef EMMISIVE_V + if (is_fake_emmisor > 0.5) { + direct_light_strength = 10.0; + } +#endif \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/light_vertex_dh.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/light_vertex_dh.glsl new file mode 100644 index 0000000..0035aa0 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/light_vertex_dh.glsl @@ -0,0 +1,98 @@ +tint_color = gl_Color; + +// Luz nativa (lmcoord.x: candela, lmcoord.y: cielo) ---- +#if defined THE_END || defined NETHER + vec2 illumination = vec2(lmcoord.x, 1.0); +#else + vec2 illumination = lmcoord; +#endif +illumination.y = (max(illumination.y, 0.065) - 0.065) * 1.06951871657754; +visible_sky = clamp(illumination.y, 0.0, 1.0); + +#if defined UNKNOWN_DIM + visible_sky = (visible_sky * 0.6) + 0.4; +#endif + +// Intensidad y color de luz de candelas +#if defined UNKNOWN_DIM + candle_color = + CANDLE_BASELIGHT * ((illumination.x * illumination.x) + sixth_pow(illumination.x * 1.205)) * 2.75; +#else + candle_color = + CANDLE_BASELIGHT * (pow(illumination.x, 1.5) + sixth_pow(illumination.x * 1.17)); +#endif + +candle_color = clamp(candle_color, vec3(0.0), vec3(4.0)); + +// Atenuación por dirección de luz directa =================================== +#if defined THE_END || defined NETHER + vec3 sun_vec = + normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; +#else + vec3 sun_vec = normalize(sunPosition); +#endif + +vec3 normal = gl_NormalMatrix * gl_Normal; +float sun_light_strength; +if (length(normal) != 0.0) { // Workaround for undefined normals + normal = normalize(normal); + sun_light_strength = dot(normal, sun_vec); +} else { + normal = vec3(0.0, 1.0, 0.0); + sun_light_strength = 1.0; +} + +#if defined THE_END || defined NETHER + direct_light_strength = sun_light_strength; +#else + direct_light_strength = + mix(-sun_light_strength, sun_light_strength, light_mix); +#endif + +// Intensidad por dirección +float omni_strength = (direct_light_strength * .125) + 1.0; + +// Calculamos color de luz directa +#ifdef UNKNOWN_DIM + direct_light_color = texture2D(lightmap, vec2(0.0, lmcoord.y)).rgb; +#else + direct_light_color = day_blend( + LIGHT_SUNSET_COLOR, + LIGHT_DAY_COLOR, + LIGHT_NIGHT_COLOR + ); +#endif + +direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); + +#if defined THE_END || defined NETHER + omni_light = LIGHT_DAY_COLOR; +#else + direct_light_color = mix( + direct_light_color, + ZENITH_SKY_RAIN_COLOR * luma(direct_light_color) * 0.4, + rainStrength + ); + + // Minimal light + vec3 omni_color = mix(hi_sky_color_rgb, direct_light_color * 0.45, OMNI_TINT); + float omni_color_luma = color_average(omni_color); + float luma_ratio = AVOID_DARK_LEVEL / omni_color_luma; + vec3 omni_color_min = omni_color * luma_ratio; + omni_color = max(omni_color, omni_color_min); + + omni_light = mix(omni_color_min, omni_color, visible_sky); + +#endif + +if (isEyeInWater == 0) { + direct_light_strength = mix(0.0, direct_light_strength, pow(visible_sky, 10.0)); +} else { + direct_light_strength = mix(0.0, direct_light_strength, visible_sky); +} + +if (dhMaterialId == DH_BLOCK_ILLUMINATED) { + direct_light_strength = 10.0; +} else if (dhMaterialId == DH_BLOCK_LAVA) { + direct_light_strength = 1.0; +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/low_sky.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/low_sky.glsl new file mode 100644 index 0000000..40deba3 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/low_sky.glsl @@ -0,0 +1,18 @@ +#ifdef UNKNOWN_DIM + vec3 low_sky_color_rgb = fogColor; + low_sky_color = rgb_to_xyz(low_sky_color_rgb); +#else + vec3 low_sky_color_rgb = day_blend( + HORIZON_SUNSET_COLOR, + HORIZON_DAY_COLOR, + HORIZON_NIGHT_COLOR + ); + + low_sky_color_rgb = mix( + low_sky_color_rgb, + HORIZON_SKY_RAIN_COLOR * luma(low_sky_color_rgb), + rainStrength + ); + + low_sky_color = rgb_to_xyz(low_sky_color_rgb); +#endif \ No newline at end of file diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/position_vertex.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/position_vertex.glsl new file mode 100644 index 0000000..993d1ff --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/position_vertex.glsl @@ -0,0 +1,87 @@ +#ifdef FOLIAGE_V // General block shader (it has foliage) + #if WAVING == 1 + vec4 sub_position = gl_ModelViewMatrix * gl_Vertex; + vec4 position = gbufferModelViewInverse * sub_position; + + is_foliage = 0.0; + + if ( + mc_Entity.x == ENTITY_LOWERGRASS || + mc_Entity.x == ENTITY_UPPERGRASS || + mc_Entity.x == ENTITY_SMALLGRASS || + mc_Entity.x == ENTITY_SMALLENTS || + mc_Entity.x == ENTITY_LEAVES + ) { + vec3 worldpos = position.xyz + cameraPosition; + + is_foliage = 0.4; + + float weight = float(gl_MultiTexCoord0.t < mc_midTexCoord.t); + + if (mc_Entity.x == ENTITY_UPPERGRASS) { + weight += 1.0; + } else if (mc_Entity.x == ENTITY_LEAVES) { + weight = .3; + } else if (mc_Entity.x == ENTITY_SMALLENTS && (weight > 0.9 || fract(worldpos.y + 0.0675) > 0.01)) { + weight = 1.0; + } + + weight *= lmcoord.y * lmcoord.y; // Evitamos movimiento en cuevas + position.xyz += wave_move(worldpos.xzy) * weight * (0.03 + (rainStrength * .05)); + } else if (mc_Entity.x == ENTITY_SMALLENTS_NW) { + is_foliage = 0.4; + } + + gl_Position = gl_ProjectionMatrix * gbufferModelView * position; + + #else // Normal position + is_foliage = 0.0; + if ( + mc_Entity.x == ENTITY_LOWERGRASS || + mc_Entity.x == ENTITY_UPPERGRASS || + mc_Entity.x == ENTITY_SMALLGRASS || + mc_Entity.x == ENTITY_SMALLENTS || + mc_Entity.x == ENTITY_LEAVES || + mc_Entity.x == ENTITY_SMALLENTS_NW + ) { + is_foliage = 0.4; + } + + vec4 sub_position = gl_ModelViewMatrix * gl_Vertex; + vec4 position = gbufferModelViewInverse * sub_position; + + gl_Position = gl_ProjectionMatrix * gbufferModelView * position; + #endif + +#else + vec4 sub_position = gl_ModelViewMatrix * gl_Vertex; + #ifndef NO_SHADOWS + #ifdef SHADOW_CASTING + vec4 position = gbufferModelViewInverse * sub_position; + #endif + #endif + + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; +#endif + +#ifdef EMMISIVE_V + float is_fake_emmisor = 0.0; + if (mc_Entity.x == ENTITY_F_EMMISIVE) { + is_fake_emmisor = 1.0; + } +#endif + +#if AA_TYPE > 1 + gl_Position.xy += taa_offset * gl_Position.w; +#endif + +#ifndef SHADER_BASIC + vec4 homopos = gbufferProjectionInverse * vec4(gl_Position.xyz / gl_Position.w, 1.0); + vec3 viewPos = homopos.xyz / homopos.w; + + #if defined GBUFFER_CLOUDS + gl_FogFragCoord = length(viewPos.xz); + #else + gl_FogFragCoord = length(viewPos.xyz); + #endif +#endif diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/position_vertex_dh.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/position_vertex_dh.glsl new file mode 100644 index 0000000..8fdf1e2 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/position_vertex_dh.glsl @@ -0,0 +1,35 @@ +position = gbufferModelViewInverse * gl_ModelViewMatrix * gl_Vertex; + +if(dhMaterialId == DH_BLOCK_WATER) { // Water + position.y -= 0.125; +} + + +gl_Position = dhProjection * gbufferModelView * position; + +#if AA_TYPE > 1 + gl_Position.xy += taa_offset * gl_Position.w; +#endif + +// Fog intensity calculation +#if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + float fog_density_coeff = FOG_DENSITY * FOG_ADJUST; +#else + float fog_density_coeff = day_blend_float( + FOG_SUNSET, + FOG_DAY, + FOG_NIGHT + ) * FOG_ADJUST; +#endif + +gl_FogFragCoord = length(position.xyz); + +#if !defined THE_END && !defined NETHER + float fog_intensity_coeff = eye_bright_smooth.y * 0.004166666666666667; + frog_adjust = pow( + clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0) * fog_intensity_coeff, + mix(fog_density_coeff * 0.15, 0.25, rainStrength) + ); +#else + frog_adjust = sqrt(clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0)); +#endif diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/position_vertex_water.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/position_vertex_water.glsl new file mode 100644 index 0000000..1d53694 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/position_vertex_water.glsl @@ -0,0 +1,16 @@ +vec4 position2 = gl_ModelViewMatrix * gl_Vertex; +fragposition = position2.xyz; +vec4 position = gbufferModelViewInverse * position2; +worldposition = position + vec4(cameraPosition.xyz, 0.0); +gl_Position = gl_ProjectionMatrix * gbufferModelView * position; + +#if AA_TYPE > 1 + gl_Position.xy += taa_offset * gl_Position.w; +#endif + +vec4 homopos = gbufferProjectionInverse * vec4(gl_Position.xyz / gl_Position.w, 1.0); +vec3 viewPos = homopos.xyz / homopos.w; +gl_FogFragCoord = length(viewPos); + + + diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/shadow_src_vertex.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/shadow_src_vertex.glsl new file mode 100644 index 0000000..881a082 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/shadow_src_vertex.glsl @@ -0,0 +1,70 @@ +#ifdef FOLIAGE_V + float NdotL; + if (is_foliage > .2) { + #ifdef THE_END + vec3 custom_light_pos = normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; + NdotL = clamp( + abs(dot(normal, custom_light_pos)), + 0.0, + 1.0 + ); + #else + vec3 normal_light_pos = normalize(shadowLightPosition); + NdotL = clamp( + abs(dot(normal, normal_light_pos)), + 0.0, + 1.0 + ); + #endif + } else { + #ifdef THE_END + NdotL = clamp( + dot( + normal, + normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz + ), + 0.0, + 1.0 + ); + #else + NdotL = clamp( + dot( + normal, + normalize(shadowLightPosition) + ), + 0.0, + 1.0 + ); + #endif + } +#else + #ifdef THE_END + float NdotL = clamp( + dot( + normal, + normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz + ), + 0.0, + 1.0 + ); + #else + float NdotL = clamp( + dot( + normal, + normalize(shadowLightPosition) + ), + 0.0, + 1.0 + ); + #endif +#endif + +vec3 shadow_world_normal = normalize(mat3(gbufferModelViewInverse) * (normal * 1024.0) + gbufferModelViewInverse[3].xyz); +vec3 bias = shadow_world_normal * min(SHADOW_FIX_FACTOR + length(position.xyz) * 0.005, 0.5) * (2.0 - max(NdotL, 0.0)); +vec3 shadow_world = position.xyz + bias; + +shadow_pos = get_shadow_pos(shadow_world); + +vec2 shadow_diffuse_aux = (shadow_pos.xy - 0.5) * 2.0; +shadow_diffuse = sqrt(shadow_diffuse_aux.x * shadow_diffuse_aux.x + shadow_diffuse_aux.y * shadow_diffuse_aux.y); +shadow_diffuse = clamp(pow(shadow_diffuse, 10.0), 0.0, 1.0); diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/taa_offset.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/taa_offset.glsl new file mode 100644 index 0000000..35d138e --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/taa_offset.glsl @@ -0,0 +1,22 @@ +#if MC_VERSION >= 11300 + uniform vec2 taa_offset; +#else + uniform int frame_mod; + uniform float pixel_size_x; + uniform float pixel_size_y; + + vec2[10] offset_array = vec2[10] ( + vec2(0.7071067811865476, 0.0), + vec2(-0.5720614028176843, 0.4156269377774535), + vec2(0.2185080122244104, -0.6724985119639574), + vec2(0.21850801222441057, 0.6724985119639574), + vec2(-0.5720614028176845, -0.4156269377774534), + vec2(0.7071067811865476, 0.0), + vec2(-0.5720614028176843, 0.4156269377774535), + vec2(0.2185080122244104, -0.6724985119639574), + vec2(0.21850801222441057, 0.6724985119639574), + vec2(-0.5720614028176845, -0.4156269377774534) + ); + + vec2 taa_offset = offset_array[frame_mod] * vec2(pixel_size_x, pixel_size_y); +#endif diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/writebuffers.glsl b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/writebuffers.glsl new file mode 100644 index 0000000..8937166 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/src/writebuffers.glsl @@ -0,0 +1,20 @@ +#ifdef WATER_F + /* DRAWBUFFERS:1 */ + gl_FragData[0] = block_color; +#elif (defined SPECIAL_TRANS && MC_VERSION >= 11300) || defined GBUFFER_HAND_WATER + /* DRAWBUFFERS:1 */ + gl_FragData[0] = block_color; +#else + #if defined SET_FOG_COLOR + /* DRAWBUFFERS:17 */ + gl_FragData[0] = vec4(block_color, 1.0); + gl_FragData[1] = vec4(block_color, 1.0); + #elif MC_VERSION < 11604 && defined GBUFFER_SKYBASIC + /* DRAWBUFFERS:17 */ + gl_FragData[0] = block_color; + gl_FragData[1] = block_color; + #else + /* DRAWBUFFERS:1 */ + gl_FragData[0] = block_color; + #endif +#endif diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/textures/bluenoise_64.png b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/textures/bluenoise_64.png new file mode 100644 index 0000000000000000000000000000000000000000..f26e93bcd8cfebe0aa5d0b303e247a6990772076 GIT binary patch literal 5525 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 literal 0 HcmV?d00001 diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/textures/clouds_blocky_512_R_8bit.png.mcmeta b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/textures/clouds_blocky_512_R_8bit.png.mcmeta new file mode 100644 index 0000000..9599036 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/textures/clouds_blocky_512_R_8bit.png.mcmeta @@ -0,0 +1,7 @@ +{ + "texture": + { + "blur": true, + "clamp": false + } +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/textures/clouds_natural_512_R_8bit.png b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/textures/clouds_natural_512_R_8bit.png new file mode 100644 index 0000000000000000000000000000000000000000..346eed12c6066dade7c3923b3a06b2f367e23c04 GIT binary patch literal 93630 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 N002ovPDHLkV1k(apE3Xd literal 0 HcmV?d00001 diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/textures/clouds_natural_512_R_8bit.png.mcmeta b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/textures/clouds_natural_512_R_8bit.png.mcmeta new file mode 100644 index 0000000..9599036 --- /dev/null +++ b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/textures/clouds_natural_512_R_8bit.png.mcmeta @@ -0,0 +1,7 @@ +{ + "texture": + { + "blur": true, + "clamp": false + } +} diff --git a/shaderpacks/MakeUp-UltraFast-9.1c/shaders/textures/water_256_RG_8bit.png b/shaderpacks/MakeUp-UltraFast-9.1c/shaders/textures/water_256_RG_8bit.png new file mode 100644 index 0000000000000000000000000000000000000000..0f71be0051a26eaf039a4c5d84b3fb1e873c1da1 GIT binary patch literal 68594 zcmV)1K+V62P)-Zm3wa`jPv+zj zrZOBgju(9}CIe389|u1=y`vpdhH}B>m;<;o;3d42moS7jdAxXgaTqugE||(xF5v|) zVK&|mepmkHybJwc9$bPuKPC^ul$Y>=31;|29Kc{Y6992Kh+~d{In(o3#0LZ3;Ws#h zA$-A0FlbJ9%)sf;6&GB%;3EGzAkg7Z9t~}%fPrBHb6$oyOxyrG{(_(lS6o36;olaSpDS0{J=P7YU%4G9;hXD;{Q;pf!+u0R|Y; z7zgv9eZhr5SL{FzT=MPu#4ebq(Lm>Z2cl?vh=wWlV7xJZLof6TAE=@oJ@EtAdiRC^ zh6tjlpaPChJRWYRU1&VE_`?Fi^jKxMp~}(do!&S)-f+o}WsZXzKJu^ULl8_DUDk7a@gr_kfI3teb}O&q2%1`k6d7f}35vD^R%62Aom-0}EQmj8Er4-?$cc)=i2 z|1G&#r{NQgk1cp()>q5lA|N<45YIPaj!iJ;#0@hr#B(i*APuP>C5C`G*F>*+7m{xz zo}>w`V0)9t@0D8OBDm~NPCYafQN(KF#eX{v77rwz4E1K~$f%dFceyFg1994`}=j6vgL6s?WSQ^vT$Io?%!pt8SFLF39p+R%nRf`x*^88Tc zc<^|qpR|SwGrpSV6Ew*qBwrqAyr))A+3PH@JSO8i9YRw&`I>PU;J7oLIbr6G%_kFg zsiQ(`br32Jb0S`!qz+^G_I~&Ol-fV>nd3N*kL}7-P~7WrX)Z*m-@X@tG2NpTb z6>Yhlw2o%K{R)p;UFk2l(3zVm-k=$}{=7m%JFU^`xa_T=9a??@2Nz6ffT4nFo}C6} z=s+jLnlNT;Ynbs;FWQqn>gh{f0&N|=aez4khG6l<*2QP}4|O=HXCXwLh4J0u5*MKh zN0ecnOV&Y@$I0WJ$Ai`p!M)DBC?3dyWGLP+#|LgSFh#X~nAb~<%_B5L8r^BsL!4-B z0EaQLL60}5`GHMPr`02_TMBBmnc?*zCNzbH$6Z&OKW;4qJuu}0p74|NEALxhg^Zzw3hjUcJrT{1q)P8~ z$i@1TIy_7<=#Cm5>l@6lcouQa#g*6VuQ+33zvw?{BX2xYx}sGQ*t&>e8gtYSsb#%( zKT$XtGP0If&yiILI5gy)7VE~qY0Bf|?Tw?;1dXLX^LnvWjntzzWprj-uLGU?Kw1}Z z{BKp-5eFX~nq%;CWLA~0S$DRH&N^AEq*jo)UD+)`oU$fZ%e^t<29KlB@?!Cs-(9Ls z%Ti$=pqjs{HN>!nH;DZZzrw44jFT&BaYb5g03{#PdMsIkSsoKj>6RCAtHVAj(%6Kp zBS)QLGixmq+;XGJs*PiNXdZvaw@YtTKBBbF(P$k#X#I9w&ngWX-WUyoXJa-#H2c-~ z$=P)@j)VRNC)P1x8W;+_Id;K7Tdn?VDpl5B~8d zeE>AgAKM!lloI8m&&2yzpn$pAFu5Q}n_|{`_{(A9)(O>;f22r}N4p(yiM6i7KW{N8&{EyvNP5 z(`C{?8y&P(rx>El#^(oTRBw#$&6-hpd*i^TuD(UH&p9bjppRQPUJ( zrs0~qE;_UcvmsU6DxtlCJKSw5)K;xw^5r`CT=xEk%G3Dyuel;h+)K(i3=>V?Du zMw_VMmXE0w{w0dRF#4!vM}9q@*#{rO0T?zJR%ZzqJcXmt9T|1~NfvzZXQC?@%4g%e z@)gE9ShZt-4BG2Bv@8UhavspLt8R)2Qwmq9vnMde*tC7%1Di~%>O!i=QhLJ`I#*)~ z&j<2F|DsJ)@eVClSoeAp3z~?}tccTu=}hA#9Pz##t#uZsz=D+my|HTYrXYefEO40W zf8wL6Ff>V;18m}5gZdDBjerCn1whyCK3TC;kwCLA+o_aR%$>B81 ziYq%MWh&})t$N9sGn?!=(YfEO6;7@5cGY-w4(zL`Hy(}F^7F@ki^jLCMPDB~nvHl7 z(xEXrocPRT*5Z6IhGp-%FWyO)UGSokZGhB{oQ}+FF;{mIAM|LPnt-&_lFH5POk>Of zM(fxX+pjZP6IXu02L&ffVk&W3BvLu^w5H>Vkh^qfo~i2j`tKN=8`BxaklZ}7u>We% z;}q;YtG?*AO_`0aPCNN+q8&LHo!NK|^o!%lOT+7!%tmwOHD$sTpTzNjMnBpRveS(n z*jknzrr8%twdPZyam1hL33mkOna4J{Jy3?zCUY<+GLQ*mA0MkczHe;x+43{U4Xjho z#yVC%PHVJY8w|`CvCzL_bAd9CWNe}cQDYXHF^yr&NgJr$db~gvZ5NsApD0IrN0js6 zXh>9y4rI~0n1t03#+J*X;7A}V%7Il}*~A7i3$*p!X}Hj14Q*J&6Mv*u;V_O-=%Hhv zLT^0kLQK4}+Ec5OAo?fwD*pIZK5DI@3tmR6W^OLzq-u;@;!&}{=!NbDDkZ4lvQa`U zs5JJ#^sGRd-w^24W+@U|tKp5=(C8o=^KamENp8g(7yP>T_@s?}d*t~YIMT>HFlK^% z{)Ie?rjbPGqQ;d%caelC;@}TnY(i6xV0LO}#9ztMynuF#|L#n{X#*K`ir8(lEo87D ze9?qKv!auHXsQG*Xa(k4V|M)D=zP5BN;?@H@60%upShikWXdK?#T(7(bKlI-&ro2O zSHIC3N5>A1H;yw8Q>!8;PS_~Xqg2jnZRUIIz1l6Qo=|HwHc;9~6a>XaVH-kU2zTz$ z8^#HZAnZALTnIG5^o9sI_hv~8 z?7!OnA?w2@PAmm_76~#PR}SUjw7R~%{=5VVTpOS%))HGtlub~@gyA^61ns<$KS~s> z$|Mh%i5T<1Pi$Z({>9@@-agT4zN2CF1DE1rC4qt6pf_6M1PzG2U?MG$eu3-p0MH@7uX?CA^uWB7k#kD2JRHcO)U1@=qE&@&&C%+nxFW#cR?s;Ck;L~_}ZdN-% zktoUyUdSss$5_yIqsCNe4U6Odpf$P_bj#*pn&iP0FE^<`N8q4(V%ZFe!C%dl8Vx#IPtxqJD^?_h`mvY8Whyz=z57DHbqv27{o<9D+QjB6A zZ_Y4YgY)7LwC%opVZ?PhGX?7mWgNU7%s+VlCvs&utMLO3>$!WQp*&?Yo4VYYp;`a~?R(0oVsjZTWj-Pc|+)ajPciWc6|z&lsx>*V8=4WSkX z|JnGV^lLX@RQ<-m3w*#A@{9gNW&#!7XsrsZmM3@9q8Du=#nCvmdT3s7P+V@kh^9s3 zu7ZZT*4$~eqyvG((dYqIGZamID03#vkq|`EF@nI+IF#<_RqVR$E?#dda@A34Se5wN zXdUla(8pH(>>L-reIb@-u(lGV+^80<15%2U#_2AFW{NVga`{a1iCgRM7jzkaR^97n7 z#C(*CK?YgeP60FFiaUP{S=DW(j&lZZ(A^ z{+`I8<<*fG4ye+FLy}~)xZkV*sFGJiQ|?!ag0j*HMt>e0Md?x1p|$J<^VqQLgH@8% z3K}?(b^pfE#1o08kVU_H%8lYkkR#cH&`Z6Hc_PA(KWH=ir1&yZiytlMaNdsm=p&;d z%;)8sPhEu;ibnId(CB(eTCx@qw9#8~H*vk@-t(InA;2;6L%QE?A=#X(Eu?P|x}EF9 z|At&#zj*tD$FJOVQN3sgmX5?;;%TQ+tL5g*;;=ClQQF9g$O>%mnN5y8;DnPQ%!~d> z`^2veo~In)<1%?G7Um!uu0B;WK?IlofFlD)O^X*>q%b$A8JJ`2N*661ga zQ(le?_=2DCL?)d?z*hB}XL$*$R&}v1E^Tz73*Bj>sAAzNNL>m?2`14mj&W0zC{yVP zB-M47rdqhOk}`k83c zX^d#xU%R=_1sXTrO%j9A8ZI<1(N5z!dA;-F56)lcq$xdW08K(B*yuBQyT)7(c3o%< zX~A z$1Ay@)))b1IOn7V2~g*Y6fhVEO6+PEW@EnL2l7RG(k3myB@((YO;Bs$CB8%upvs}N zz*RlF{AkrwlkYR%%A)BoX_HQ^RmYU>&TtOjhuIQ5wK{;K>WV%(YM!fpT=2LFGE`p` zt-{sNS60u_;KqARHa?gg%^GIHFQI>c)4#A+R^GB?v~>@LbfS6H(Ciy6+DfZ(NR8&S zIzi*1FZe7zm>SZPag&z2YiJ33piLO1mJ7xp)XqjT&Q~6U3ouDo#*_aNN&deHa%JZ_ z1v~ilcl@1p-IM}_Lx|Cp2QtJUKEU$6vBh)xV?CTBU<&7sa$XLU@iwfkP98OhEEt+OSxF=?_qpR&bTNg z*Id&CWDNX5Y(uVjy)?X#966w+=uejZdBRspujkC7!aC{&BS`YKmuw_HYT{|U8pkMQ zUX&Sz3s?NldIAA1t%^(Pg(Y&Z2&o%)X2PWju=mV@sk}Z+2_-gwM|T#^W>hKpft7Fgsiu zg;B|N%S#|(tLweNeObF&lB$VcPs~6$ssg&}W7U&oYnmF6JaKfXjW+RbbN7dFIy11& zbb1sFw&--H6^t`Wu^oTFER{K9Ti9Qqd4nM=; z8y%v=k_t1>Pf0M_23RV_Vokg}C2?`HEqNAwKkj@R<0guf+STjz7oNM6h^v*i(tECE z)Fju6jrzmBrPsp~HlaiZ+4_fix!3@?^*nMg-tmFG=wGPOM&jjCpnLTCQ5*&oJA}`( zI7*|J`g)KTPMo_wlE3SVP%qALqZcIyjw5v%^GeNvDEfvROh-pCR8l&nnRH%o@an0v zT8;iV7E(1ZNUR`5~&^)R?Co68d3R4v|?K2EZnO9BM0&NQ_1_}Z*fE6GFPq=^)1 zHc>A{PCDqUZEJ-*-thD`i@Y0IXIi^amN#AC^hBuVfgee4y`AV$k35*KnJ+hb7=1zQ zLoJrmR|#_iXlZ95Re=&YNfU|pTn)h)xv?&#paqu4TJFbDIZO`1Z_E_sg4H!XnN zIxoc%R!Fgro>zHn8(G|KD@d{B2AJf@ zXC?R(rz`Eil~>1}^sf}0de1_6wyGtH^a$1Zvhu`dj&3+9KTRF0Ny@q7jGQC;&H>VR z*OF$*Uk@o{H)C-QTn&G4&P@nlN!z(G;1ZhC;$)e%Q#Ct;Ku5IIZPU}!C_VpWD&eAQ zZ>7AL^cOOCjXYC&G-*p#yci+2tTmo$YL?iTQny!W$m|9nuEVPY4kGA5J83=1i={Dq zP2@@YO0(FA4kL=%@Ulp$QyLds7y1QHWTc?lVl^Dh2YxUn`by2CmY^~&>wctoA@I|A ztMH<>Yw@b~eod`})wLM>(UyOLkHocnrg+Zgb}C7|Gpi#oj4Y>d1S@i)N50XmvI^Vb ztF*Mm_AkqInw}-yVb-h24vty!bi5`nI40*OZQuhMOr$fHSd9d%7VzbzO!np8l1=x@ z%nJb$Y*`|hm-5+pOwLg^YN-#WZlufWwh8h(K--iBNNQRMdyQlv9mR9@kfakJO5fIy z2mL_a5(Un#PqReSnJU*P!=_?Nzp$3r!|`Ga^aUY(*G;!ef$~xoj`U&HwcL5t+nq_v zyMLq8sA~IA9z7*TaVN%;osBOA<#@tK6e#p+vt&uJidthf#vA?vuDrZr4|tUFANa`& z{E2_TGh58w&;xpzyO%nq*5x+!-kf#c45U)#AWzt;mrip=jTDeq-B-SJ^R0fMB)1<$ zS62?($MzY8YHIgdyUHGPDu0}a3E-ykY z3Ki?yJFXXU!N~hRs)qJK`yGA94#wJP)v4#TF=?em$d?|3$%$MXzj%G!yx=p-gjP<` z{Itbg`pxLq^~x=hwxd~EAT~X8H2NFITPc%oCgpq)jq3y6&{+i;S#AcWW}ZTJ9Ba%F zSG^@R(gi&j2iCb7BTD20-f6Qg&~j?y-+ba;?`9EjDZaRgl+sT_iUM@qtv6e6=te_! z&#Q3pTPf+~iuCwuCtW$i=(7}QH}=a~!Ac=eo8L4xelxs#@PiBH*SuQuF*io%=ZQUd z|Cug@;8^T#$Tpf~i3(}U7Pf`5f*%NE_3vCH* zW^jh5eQ!Z5cHLZQfwr}0Zr?>5c)bPHIKxNr*(H6kk%d`MxuI8UH{Z-` z{8UW&+fU?nFb6;sH`t||mcV@1#D9ikvl`7xqo_)5t75yROEC1gQEH7qHfs;W^*%Kb z0@1pVC55!3p};F~ye0q6&9)>k9clE&anKHE%!u>283SU`Gmw!8O)Fzbo6s|7WGYkm zZ16yyoa8Evh1UYr6h?8_r@=GXhFHK|zIK4e@?wSvKAMt}#)2cE&b?LkO=$;uAgvN$ zTKYlniX9W4f*S8%w87NOM`&ll0>ZZ4=-rG*IoZRU;CYb+0PH=h2xZ^$NgjtHz^l28 zW!me+iq2vD)l!t^=7zU&+|KmNM@1A+FTMK9o5>6RhI}SvD?A%Vr^ol2c${P{-TGQ5 zsFdU`ig;EOf}_q@fZ@njGG*(!(WG+1^RZy15Op$k&$B-2a@=|_0PAcYh_ezjQfu}7Ki|YZ_r}AyJe!A0 z^7!nFG?4U_OKBdXiMR5G>pJF@%lX-%)9ZGMLax=ixs-P}8zNQHmfka}pj4_4xGKqq zG=GIXEl#&FIA$K<<`r?ZKvm%=4n%wls>7ve59Y~v(FRgh%p;ng$fyzsclA;q-H_sq zGA%F1q|G!#hVX$Ko||Bu^7DcG;2;0wurv%c%P@~DMs=QCOD&VR0ArjiAs zdR~QEq#>LKa@I3ysTFa-CT*s4)^DX1vI~!7B4NVwz@1~zp((nOg}6x=e9J0#vR6@Z zFGqya6CgKZUP#*#^PLq%0tL}Lw3!$840Y}zR?5Z@%6|24NewP|M~og3I+f2Q@;}%B z+(h8tdZdy|S!Z;Pkx);9s^9leycm-$@Rl3b9v$kNR1t3F?ewfFwO3hXn~sYgHP^{{ zA(K96mT4$VtkLSVUY-t(l|(d)0Z6V-IKo6fDtUoqIm5Ox9<(!|p#k$*N{w3ddSl1^ z=4IWnLV`P29kMIrCj>IFw`0YIopmaIe$b7-|5;W{PdSEamDa+mqrcJq#*t0%?+LGR zQ!$V5&dy9335!~YLt>u<1{a}%597G0IO334HOz{3n{k%F=owemJj>$y`RTW16x4*> zLuLwoP6l@}Jdr^wz$)s8a6&9`t2m8%(*c}^_q;%rXo$7qfbv^VVRbG0FkRMLN%`?g z+FC9gZm!cbL-w?Q1+1Z=f}UGEymQppe3_TUG}^cTG$%YgqX-vYk<@apB%)h~BTG_W zyKLBPoq2IMUY?jRB^xvLyfBIZurdHe(3p57)|97Wx5y1WlIYOr08bvDoKO0!OV7Bk zIlmtqwefaurD^|a>bbd|YKi)VlK0cER*J@LnBqk{hc~sjebe843K8jUn zqqqD%A-4#@i5<)`0mkNjX_Dt#WzII)EQn3?1|yQJliVcx>DINxQdW}3Ut)X$czrqN zE9JyqN_Va5IaaVOF&`=2(XkKsF=-K2RVfw9ceBzhdn_PxpikN?jJa4(x#`zKHnO6~ zj*g!kZ=lSXa;A7h{kz|70qjeu&&|V{$C%VJ54*Q#5>^OCW@piwev?CTi#D=ic{!6v zNr9H{FclYO=kk)S_}+f4c#Lohwpm~2=1dRNPD;!Ymd>j)BgEj7UM4tWH(+v;`ebu& z$-vAos4UNViI?L~wkkbzrgY_>586PVTZP#a>#23sgX2J3V*TApU%9TKylW^HP*COQ za9~F&WZd@}eK`jSxvbhL;3_X&fc7-?#lIZJ^-PEp`xbm@i&6K)+`$M^C8HbrJqC`0&l zB7=`FbZo2F0u1hAR0|eu(rOT&cTLP$#%-&41TJCaB1Niw>);`}p zl@(nio+)cR(Da^?*QvaeuZSnIbVx4SaX8K08F~w1s95H9v;I(O%6q{eH&N%7;QE&7 zE_+@IA8zTkX(WgQp%Z`L$4wyEGa1u_*JOTie9^Bw?04F0xou+STSfO}-5j-l$G}$B zvC#*^QV>7Nl9572wq&R+C0VKZf+O`unYPO|ZOZe(d?L@JZ{6uDXIGiRke%z64_`Al zHGJgaH)9E0#xJD_k9j*WeH$vi{U5D1fM$kTFB7wuJuvmK3(uA8ebSsRABtTra zI*=J&R$`O12Y3m{N`|y{S-a%~C+-)1%awmBsa7)Ob-)`u@r#wZ8$fDMY~w(B+I+*% zlhEx*%-V&UXO_$P6(*#yd8b9>r)J4A0VJ|KX3I5p7CRQk<+d{LmW^8}>Wii{V~h&p z(XG7DC>mR+L0irTXp(I6^3_WmuOp?fee8gs6@RpuNp<2P;iYYJUIw9mSmTnO0tAL z@7d*1>|I5SRE)8%ke{+!gi4vx#!b&IFxVoQ`>QQ!Z2$@L#E*n4;>#}icO*5KBty?~ zLeEO2uC~qVDloW&FXd5;#CA25q%@A*rp)LfjG+u;*v$oMTmH1FJ6Uq{5KCX^mGZDK zYHH^^(f~L$I2XVT_O8lIW6x~OJM8)`(0U~w+7?Q9RT`}f%VXfikj=af=OR07 zx6Redg1|$scJi7W;q112&E3)@Aj%;ioE3Rs{w-&(Y4TsBXjjWg>H2hvRgtB^8gs9)F zv2l*XXO8Hh&?$0v_EiXO6u~Pu;ZBW(1SS^WTv6r~0_>HwW-H*s6AxXP;gJ}d_sqa1 z-M7_gqg!MK-ZMhBN6~rTbJNy^&?Zw8Z-_L2v!rZM2`3BLGB=H$VbP{s7xK(#Hl@s> zjiZ%sA!In)J?T3Id&L=~a%k)T{(G?N7DSZE%`1vpWh(``<5w!(x#jK$J2NYfKXV&z zhTZrf`rsvuPXEaxM3J7g{A_785xb2-;6__2z2_r~V|WGCn=oe9C#`s>JPt-e+9nxU zBh@?V?LEas=M`=fm+uO0Sx&J?_|d|J()C+9`!9tPdGWARQhD1sCEQ)w^92rF>*$T*p6}DQsGio#>|UU3tAqxQWc@ijqh@M5G$P77EM!O zM6GcY`!gEP51t3J^W#_cMsZD#($@Ck3$sTjBjKCu$vjednh^##k377a(4S!COEToD zLoTut4`$zjFzTYn^ip;lU1$y3-7Mc}(GgbeYRJx#+Y&w-?aUz*deLSXTW<*fA^*|} zJd5&ynaSR>V~w{@+Epl|C7zR-zsaaUB+Dd~pv3Y<{SCVtwt z6*ar+CouU?K#Uok{2A&Y0D zpS*d-9I(>imjke}@NMm6mPd{iP<-#){$cbFHF%30P z?d+VI(Ae;b9trtg%a3BW`3_4%t3vk-j@?l(B>NWKSOYG6WLWXl81NOuswIMsGnLnY zAM`JdS3*@sM|z6Ux7NS>*Q>yjO2f5~z7|&>f@Gbvk@-zgGpr;wd@~p~7eW?bG7}wd zg2cFhp7l>SEi=ol_P~HkX$J^>WW|zJsq)bpMf~Zl3{ytWwcAdv0}Oj{Jn660F$U_l zGR^PPpF+u-=2FeiFSiui@V*@dz{kb1`V(%V)Okx!v&Pq>%rsZ6nWcA}#pq7rj@mZOQ>E z04Eq`9r;g)8AD(sorm%mB?=10uHfMY?UvNF8KNqq6T;WcgQP4`vyNJvn#2dt90fU- zBcy=yA^dsL4t{^qJntoH^jP@RV*1@&$gyp!SB}8x95*aHjauPR8a0chWhG#wq-^Q% z?slR`#+FGFn$cGo-EOU(q}3yXsYCcANK2tqEA6D0dU;ikf1!;c@al|f_F%r@j$P=h z2B`Th#nJOEi=s!B_{*k49U1fH;`fw$rH@BzVvyeq&AQo!cquRC>y3wQIqe#!r=^&n zLL%nL=v?6nyb>8}jpM){aG(z)BEx27-hel(=MUU1gzR}!D?m=lH6ivbGO&j^+6q6O zHE!fMb6~_vxeWUq`6rK0?7~LQM`~~gJ>Z?lpR(NvtUSu)P2P4}HaxNulv*MNRygS# z-#F1U_`oOw-h!JZjK+U_a2UT&9-SUPZQkzdmeFonF2|USAUE^=EdPzI+MpzH!OMh- zJ?Q-bK9DG3uZ_$EdKkZ?8^@%V$0gGis-V)+?P+E2AMNDp|)y zF&w|QY2E*A=fc@e1 zS}?4}P-JrSObHL+{yh15qyIo+TCgz&^FqIvU-*?benx*b^teTkdlmOy`P2nPFC-*R z{YAh<+|@8%GbzJOl;}<%RNuzsSUu0q_&XBmOIHp2igI&g1>CBbmU88;!y_<0wLN}E zbW>NcLz>gH2p1R!ej*qBg}h4Grzz03fjr@vW)7@O(hKL5OiEj$Db03odY8w+x1{_v zNo1#73GN(lIAdUzk|AmI4zh=%xTeuIa*cesh-81Bh%lKYI!LBMlJoMmC#6Qptdx%3 z3q@>|_8fNSP*X>B;6@*uBL~b)&vIyXtfR`%ibgEYQ(NNvGPtFSec;ARcwU)rrxkb{ z(RY1t-Wu^VCt405lY<_bs-YDFuh2?*Fe`d)GK8n|R!P>gW!deG<4^jlgt9SaYu;>~ zwe%yVYgSf50=)&;F>$Rlm{9voWOBS}lA%@vUCSS+_DzD1(ogyu!{J5yM4fh3{-&fO zSu6eAZ)uyK#>6!LljEPXue$D68(Ksx zWel)eylzJP-b9K^nVc8;+>PuS^t&(QO2?m)W<8Ue-%7Y9$C@jun>5Iwngwu8WeDn= zPkM9(;YMh;;Ew`-y@G*NGGi-h#h4(;|3U!<4KMij0BBP)GYvA zZknB0{_F`qPx_S-Zmm;hIjDtV^j=?|vmHt(mO1Ez!^$|DnYf)6(4A3!T(*5?=zYpcj?>p1zEaCMrRL|2LI^v@BNIG>?pOxb1Y4KZ-N1M%KTrDPsHquYFL_Pg21m_L2)E+_ zr{tBMrg#;arIu#c4t8FHS}$cf*G%!2mcC#rpKoYO2y&0I@jVV?4W^wH*C>+)M_6@Y zdyJa8bqjSF#uc(*PnJ45vnh<3{D18D<3yE*z)1ChHRhS|QpYFy%$_@;%-awVRr-;z zu@>I9!Q=5w0MZ+0&+=*IDXczzoII7@dH<8+g$|lBJOBQlcs}^g|2L06=$d+RYOH0e zVPR4Omy|u6Z&?Cb`*w$H(_onZwU{`mnR#mj7}Za2)vfS4=?8q#1}d2fx*})pA$GIz zeBdYYCy!?i5U_d(>q&Yoviv+!O1_FWj&PpndY=a`s-wE2o(`c6?3Zaj>Ks<*^ zc*ouuoqkmAUyT|Fd0EE#7E8Kj5D8o2zvw$v9-X6fAIR3Otm)*_83*>xdqn3Bx?u-D zf8*PM#gES08`AR~&6%$MUY?b;ro&5}7+On3r`mTzw(jy~N8SrR-%v;YOtPX^jPoMY z2H%9eatDPx)2ZSdzmz{Z56N{I!$E?t?490rYS^s#F#*J5xAdxNphG+xvrGD2$OF&D zOL&Z|=Ua^*Pe*%11;y&wW0gD|_;Q=&9b0)AeIfMmxh>h8ICs~g4<+ih&QRx8*p~(# z1G;bbvdSL3)mlo;W_iZNwzReNOruz{7?u#)*QTw+{Q$*2-?=_{{LFCNR&!izR1Qxq zCMpzO>dqDAP~JLS@*?t^b#>{B7Ed$|K0%x}r-!;Bv;&>z51#)A{eR{C-#C6D0tfm| z|AD+SPwXhuoWY=dpHjM8LA3>Rj)%jy~a)6G;|)E>)c5+KS~> z5-d~Zfx*K#Ufbvl_^8o1Z7W8D&CGeV%SrP+DlZbmp29=Y85e`M#F8zMrKVYCPT554 zBB!L}JKpg=sYAyazZ`$?_*eQ!(NTQ6>tIS*rtSkJ zoSsIIl7oxxsFlg+! zstk>_Jtk~AeLJ|RxnhD%=G?-5-jN5zY;i2;Ti!*S;|IiKm~ZY^UA@;)`B zG2!chONRXh@EU7TD>5z4*EqkMrboNCoDMcCNs1y$B1);bsaS2xX=r(3T5(iz1B@xPQsQqVQ@_AKS_I)VQoa7 zz@l{G`LxPW)Xh;Yls1;iESX?GHn<{Mht7(+C~5kdDs7r0wz4&6&#j8ucot3Z-~PsF zyvM99&wOIPl|5R6Gp5ngj(AIPi=Eo%mK$sdXXiM1yrD;GgrdB*0~z>*ypn4i!W5dP z1A2|+%1N=ovBzAU16SIW7Sc7RBkuHMk?W=lXG3rFI-i>2Maj7`o$;c-=(Dm7M7Ah(?*7`RmlRtz;j#)`FDGStaC~q)X#JKTy^KW%*6|Z! z0;c1QuYaHy#}~XZlo&4aL4 zxvV#)bBRwWkJVfja@&-CCo6$<&p6*$M%XU4)de~`Y_OHJJh0L9jMR;^W1J_PtJQ?#CgScny&1;Y<$l!;>p$pYN>#CB%9=*sy&s_ zO9#+-NnxO~9$MMT)`_`@`uhPIQo; zm(m}cu`9mNtGt($q#e31ixTL5?D_2}AC{wEdZWM7-r>wZ6}vgG0sx5#MRs6k<&Qtm zH%4a~@sbojPttZG21PlK^6={U54dHk9{s{CL)PLd>*)E z0F3?Qx1T$?BW5dk-T;pcb*)J|p|CrJLun`e0dF-l})%sJ5rwDs{~| z=l_;5XE9!=Ho*Us8+|7zd5P>NZE`5qbBa!s3JaacER=g3Xhp9aM!#}gl9eejl308x znCEtp5?N&pAE_6Lcbpt>+o@nOILKj%@|Qw<6|&CLQ(h86y%kWm$h%C6mYM)5+YlG~ zDqjD(kwV^x-o(kbM9Xy*NQHi;slVlbj|c~dj@eg2+aj%lE-e3wRD0^BmD(ieENkz~ zdoNNlTibrvE7g0C?88e=ZE6qz01cMH6j)eUDhaFt=+_HZYu0NR|xcWZXJwm14z zTF5Ko%4*3&Sv3*?ueZC$sPYr2AU3J0TW-QZD_fP6xIHeVfMt{46#ngZKH%MGJ#$u~ z5AOc=tN~2EDVBjN1~Wcsej8IB8DQLGNwS4qagAyv!^HKP^Y(P--gw~&F?4l7u33Fr z%~cMPsQ!x8ksrdl6~FAhQ`58pZRWw3;>v@qU&;*4@K~Hk&-p^~sw5Auxh5o@YgbN8 zIs%21n|qFLo&;wPo606wX-7?VYCAC4?-ACPxh5-Ibp=E>Pu=ng4q3QI1Rv$eW$8Uy z8auC0y-n^)4t~~hNVYnIk{YW(!nMP_DrUbj5p_|YUdYi(-C8p?*Yg<-ITFn2gChb* zX8OX!kzPKvn`Btasq@WRutdB5J$d`~^s6h($ej3grU?y+GvMouzgdO*myWeBoZ%Mm zm1PW_C$uMzPq;R%yK3SkYPVjtx)lUHGR0&~=6B3@PC~+@(ML}kZd~2G$ z=347*F8l&>!%W95&}p3l3)qQEGL7bOakYKK1Y9<6)4G-`sK>-yk-bc*xziEo`E_D% z^e?!Qb6w*Sw2YB0*ERjRw|-rRa{r2KXQWk`tow?pMoGW#TvXaI6pw*S#ge;EIn%cdZlFR;#t^2 zIV~q|e+x$`aPa=(&*1rEKabtsl13*}3%b`?>kH)MTD0fMK0&_0ki{KUeR9pjG%{fqVseWF)x zyj^kBW{YZbmRQgi{VGWd_)TZAkVr4}YxX>)Biz`(Rta|>>f>~|x$>->K4Ef;R?LK# zU`KT!w;_R%kEx|{^8(951p4aW=}C)o(fpR&T{TRk_YAqihPyC_NrjBV&P=s&g87_Jd{O!$1zCwlR?%K5H4NkJ;w0JhXIa`9VBW-vNwz3{8{ z!0o7w8^uVrGx%bH~eNWc=I+MoK>#uKfIgIDh{S-k)2?k_Mepy!dVWZ8-FE zC~{?L4E@G>E&@bvv3BZtWqD&BToHaKoS!+5D3)n_+RU&}&IiW_{?0rhcEXVZM(=n{HgjC3N9f*7dmq6I$cwv|i6#Gs0{oe!G8j06 zcO!=sFn!DB>0Q$jt1~9FhpjwuYk)zR-V%?g z5OZ!FZGZ&c@smH_uy^ENIe*e7t~uvD1^% z#W7)Ilzf!mVL^%2|9GRHB{8gUxOm-n+~8(VCiFhj zwP|ahRm55ix@CBiS9XXksX}2gp%tAi1(poU}xL9*EFQN^niM)O>aXiW%CUF zUGJ%qbH_g4Q0M)b(@Ki>s%o#aE?GXU-QNlg@Eo_67ibR7%K(pF(^QuPF!rQf8+5-ro{EO)14A& zSjSsU5c~@eJbLOBo6tIb)Lfj4ZfRX=#--bTcO6{6C%Kjs+eF~#y#3&B|DeA!d%kqF z%-BiDwY(G4k;cc1<0@?*`}^h%Jh>)r^vd7$0}&nvk4Nc<{&Ld$ciqW~c(Lzk&2~Gc zSMmsGqsL60`Ay-kjow~+Wvr`n80wrcL1MGOP+|d%od6kS99mk|7$S@j4id^JgY5isd|*#bVxF4Xx+Uq1bqr^7W4Y&;0n{ z_?h_I0-bEJX)7hSq?!jC&j=A=m-JG)atYRWY4$K{g3!`9h7Q0xBMiYahm1Vl`0WSh zBe&3^nYT*Wiqf&vu0G*W2Hy?cO8$XqsTY2Xtjmc(n!R#`OMK;QRp~~VN?^aLXy<<* zJ<72uo?fsn1?JxTEiFC4w`nM=TzkQQ^OkcxYmC&6AF7mAotr(7bzRIYOTJqIRt&rp z_Y|j8?|V{^7mf9oXpr~`0a|;N=HrcjzVq=<+RqF#j76WGZmmLVxoV^YQnI(P+$v@& zCM-~JnKy4owUutUnJZ505V#?7XRp7!}&XfFk za$252YX;t(-m-!eV;)|(i=ugLlJTRe8{dwhA@s_@w_PO%aUu7kuqA{0@y4lj!BSd4 z*)t^lmIj&lN0Dgv@sI02)0q=9x^Z|O`QbDE26HXPqu*Rdp3mQ^EjGJd6q>K^zFT6R zTC?pHmWrlTjSX-IE7+#H7rd{~{i>8bQt5^;7E+iz5x88P8c&^vZeDL#~{^a;XziQ|ew_!8(ZF1wHGIl}Yi2{ebR65=n z@O-6hJjw}K9MkRE9W#vz7&=qC(f)t7-mFQI97)n-5df-Y?vYu2?9LuQB)0ObQdkuS-?E zudUX|vV*T%b^SBbif8uEggput1HGdPj^REEw>XzAUoZ@%=Ck2#VeAuhM7EbrF90H( zgf_!)x9K`}M7~}AM)k6XbpV4=u;e$Mz#wbnKLrDh4YlzG2j7VTP-z(5oP#A!M#CQ? z!F%IyiI^aQ_D&aWgWQ+AhVMl|^?-W4y#Rh2Dn=|m(p-}7KsMk^kaTd0YxIofPQzCR zwxCtKoD4PKFU$StIS858wm*@GQ-#xE^?a;`|HkCrWoP zfr&m=i3m@$wRNU->JS`>MakRa@Sb57Okmph1fry8hIbRo-dA8z7 za6Ws1PfjhGWIr{qxmY77C_;a+Y}U?Qoi44D3#q-&>?W&HB!R7#3>~6zE&fYES=zY# z-BF76c-cgKs>U9NVaP)>-%bhtn*9qFl81i#1!UNmJ5lg!gSFh^>TQG#IHh@RB%U~D;nPC@!|J(O1oj{n{&SA+|a)S`GIlb{6>8{ zw2PvGPZg>i7G`6xGsXRG@%77zc|sa`b!F&m7$@clJ@DhFUw{^LAc1YmlTU-Yrh%j< zK_fgX&WD@S>_iiR49siEbyMxP6Cc*FWkWIB?90|E!WaXi__LvN1yJOPNxW_MlKL-@ zg0_nSBa;dt8_@^>;;7`!CuxJ)UNM1h#xXH$w!6)UAgFq6#9-W zz10bBn9cRZLtICI3-UMGPdu(g5-t_T1LXra{E#zAwmm~)O&FteNMA`LniM|ud;pt} zaPjI(HXf0Nf0QzKG?LX;j)Sh~d6S!)s&Ni~XXf@x9lF-2bbk&CFT-Amyl9=6@8uxf z=QEw4N0<#l&0$%96v${DckmYZ#bRfT;n2EZj!5b?mPY{|V8P=X)Ik$Mm=P_dxE!!lmNU4lv%cgLE_*kFuZumOzj9Iyth0|hE`%QG3EfFzlbx@Sn z#Xs{2&wv`-s-V?CyzfYoa88T{G_*g^-XOwppnP~z@zjhm^wZussdkTr{gsIf zUO`Q$skgX!3^U09)8 z_RR6Xk53#GQ@n{!L4?JSS%!%J-opptkd+Y0d)8QlwV0<$ccKJbe_^ID4~a4{!Q8Ob z;%Acu6xc=*TeOc!xirMQJGCS`8B4Y`_^DagzAAnz_?YYFF?)0!#S@VBBG20Y12`&5 zgVsniDSm-EB{T9!c*_R9$?Jgu{Cwb0{Qg1%>fw;|orsH@*(#<-VO@x$@YPC&dkyL%@&fOojVQVF|*SUCBZ6_wGf$sSH0;XAR0c>&mlhI9p>iODWT zs29-h!lL37svn=Ihpp~oWW1?>Y%w|`iN|dW6zW<+Cl~P5;M!X+n}WX#f;S8iTA*_) zCeSC!08j6T%7xOG4`KJ&)dDndbKljhL1gMQ5?oj^Y!k5#>7#)M1L>@BZef@>b( zj5mWCK1Spg#sIrV~vQz`+qvMD`wI8+0auP{czzmF2;^to}|~k%P3=$2^dMuD$@F;M3IVqM%gl@}|@m zU1jt74oid`6%RnL;>|eb=Kmf7eS^M1mk&MJ_%{{WT$+&sv6%r8f_^P{jQt3fv1hM= z7F+~jv{<~_sI89XzhH?syB3rKM+1lO$ZQS!hiBiM4G`mu`bsi@V>-mDsE67Yc=wjb23yWMFg1y@q5H@=piS93 zVek#9g2?N&@ry0+9kLtN8HCi2<4q7=I~pT2mB=QMNMW;Z3abNcm(t&uKXLx_q$X9= ziGy$`+Khp^Y@&5q%^$}%z%|Aa5ipbBqiMzGbc0JXUs1!+JTYa4DnYUG(dF%zr zW?XgC(uc~cgx6jbIM7STG@@CrAZWW$ZYZp`8Y6;qpwV5SAcQIC)4zM`?$ckFzlm1x zY&ego`)g2^)Z?uAa;13T5VA(bn-$+yT(&qqrD0TH`b?&XZ@kT1huD>x9Bmlp_(&$#BeNr>j;)V7Zk>@HC9Ch_=0Y zd}R%wRYtVSjsuakjn6>}hgisg1+nMf=MoZ|0@@XXcD|^ut0ly3uFGIt4`@T_pbOG* ze0lDj{U9EtC@VeAwW7@jIK_%31fgWZHX?RA=G?WzsKr3t3U4wpY*=fe$Au{Rm!nCBrX`K}>CD<)p7v7nq<402vWtH;*0p#g& zrb6HY`~VIN!dJuNC(xZER#|<9n9?-WH4K%w{%}tVcCRY0Gt9%y6{Ug?l!n>7X|BZs zLM(b{#d{=~uwtG#fbx#UAh04F@wCGRQxnzL+$FLb$b~4jM>M^(;AXI}#P-Zf%rH&F zD6qz%WiLP~mk`q8T>fWN@Cq7&Z#fp$AjUQBACh19M@&AQ$p5ODI>VUu6&fb+^MNw( ze1}J8MrM(^E82=<0%ibWxyNWL9{mz6veHHcBy<}?O_$3H-$I}%g4mX&TYYtXQ6#6t z)9=Yz!B(<2a}C{j6Z6<%EZbHqmNNr5Lc6bHtr`?J$V$T6Y=G|jUGWKfshgmK9A#j7 zSgT{+4N}p*feSQI-DPX1)r8KKCXgT+p8(L^)5Oa}M^SWA_38eg@H@kqQ@R19X5hb_ z*213l(Fkog#my#Bt7j!#j7s>J4kebPJmfRF4|BJ;>0ons9vj<1o(`z@KbWb~s;>Dv3TnG`s->V-P;rHy{YLtUSwU~mh5G(L zc|$MP=v)0=)jM>Lw@|;S9nc+336~{qV?$pT=lAczqePV?+}MWG8bdc*^mbrYV4y|H zD&hpS74I~KnGK!B&BmbnvJ>thTAUKPtq7n?Zfz&-AZHe2Yo2Bui4cw4`*<8;_-iC& zaI5g$k`hJND%#y@o0`&`E^`w{X=u5;e`WLszE6~YfW93YGbY-F=KvSXhU-ADpr{Hg z)X^anM#bTX$kmPPORk!JD~^t5kK9OJqgxZXcz|?Dnh8)`$zV;b?gS=^Igkn}h1BZK zXmLpuoQr{^Ep4fLF7X$PD_}6$SZ8ch<`L%H(nvhfo0)#8i2IC1F=$O+CPN?4irP++$JH+CKyqw*?h*HRNWStnbbM+ZVd*qVa8TinE6q{aX$fc zA3UcdiSKiQ9VEK^wOhI{g%~d5qzqbNK6*(?kKLIK_*es0dpORwXC2J6nTM$9h+KGU zTNmVc3urUZ>s9dgiI2BiF`Z!?&8rO@ZyUXsU3OZ={LHE;jDu0x3GBNG(|!vzjI}-m z;w?*t?%~@7S95R4oL;JFOvBP2%mwxE4DD1Xb9j0U6O@7VhT1RD%?hJh=E`_LtZ}|j z4L-Hu7fmL~ye6S03b2h8@#a?;D=m59gF-cpvBh-8li}&%>@m8NFel0gN))+~&!bB# zUW_;4e0vaYZpW4(Ve6JSc*Ppg9=ox<@-i)$ww5CY*D5*-%%X}Bu2FdNW-SEC->HBT0-K zkf6jgT&9AmXoQ0T&J~Fh35VnAgkuA% z*)Pj`3El8mVF~C0D5?ghdIr!c9?RB14;&A)8uKFcoMQ~vvGcAJ;s7zl@Ve6FWq>Ic z%ql)Fw5TSFx!o$H1v{v_;fr-aZ?Vt6Vk|fl{sCNyV+M(n!3}KTD8gC*(qTqg=6%gnQy7BzlNms8rN~S-kCbN^8aA6YV$5Ph6*$E|YKx@B;mf@>=X5 zkKKNvRM5)@&?cI)%%}p)aVuI7((!eK$&!uytoS%^yjMi=4E|}d?j|qM8-+S+l2chd zrjk);wLN(p72CUIuN9;z7I%#!G=HYj(dZQ&QXQE?5?aoqVKm?X9Vn4n!dqFZk#tJ3 zsyoo)myvUU;-PfVU4bu_9OGU&3BI&SjH>Z6cQ_wA9 z5vYV>W2qCfdV{5rB#92hwMALn%gRI`!cbfV)SNqD5iio?cnHa>^VoRt;4P!aaQNx= zG{phcaAuX*`G<-)C(sfwpZ4M7MwqtStKPyVV zA>~#J8-rK-tb}j;=PZwNbDH466${O7$fD^sraYLvl#S+R$&CZcXI>Vg*VzAAUZ7`7 z50`kP-O7+HUESH6+ENZZTZ&~wQA>|UFy)FBe|+K}f+qn_$bnJ4+H;BygGz*7$PELp zxD~j0!kO3JQhjPcsXlaa^II?`EKN+sUtA-_&RDb+^`*&-J&3IlX2lrL0(7V)eomM5 zR|R?`o6{0bQ{o0u^dw3VKCVEiaGA61toIii z+7q8o95p=FJ=)^XVswW5hI)YC;5X_UY6K`+HX~aGfpCQn$>dx1w^${H>Vllh-UsnS zttt5VMiZQ0%N(LfW)H6qng3>|cH1%z{zT?XLI|_3>dq%WGmyYBqT#Ti&E2?5n%;EDjla5FbFdXh@ zQx5gwjpBdN8iN9(|BW@M(Gbldy1+ESSahb{#R#mqRnioW_#_81_B5Mi*7k3s`lQRb zYwFpzHjP>X$SnR@XHpgu@!75xW0cAlAzU=~m_qG3~qp4yG}MxQ#Fxm%Qj|JcQ~|20CL;rw;G8t=}oA>~dqF)!^x-2(-M9V!90361)k$ z`u~1*CtDKy?J^K=EtgBQ>jq(L3?+P-p=4|uxWLGPSIdHk2`VWGw&hT1 zyP1P{y#uwN7f3}XyerP=_X((pEr=?`A(91ZQo-t(3-$rc8NCEt&od5Cg$|cqwh<9) z7793*glmOcZia5Nr&TxuPh;|n07Whb_f{imBu_dFZ!W<|EvSk)T$gH7js;fAdAvPg z>H-b>W~O3@EC0^v(_0$>mx}rTpWfCNL|$SfPTMP87){aG=iP2)CUnA|zv27;!RJ5m z@t>gYz=p=y%FCf3b7e|{ZfeEM8CV&iv9LEqx;+f7cu1M`QOSO^{jM{3Hsu^P>Irxm zxqM;~y&@-hz!ak=`T=_Tg^9?2F^_AlJqBde>k6{WHo;rKz#-vbix14e~Q4AGp%83t|4myEJv|`8)`fX*$ouPNZKlY~i)a*(Gt0RMsqOCSQsXF-bfh*x+Hjf-%0g>00_ z_Q{OkryG1hV@mi2v_aoErmxs)!}-MX2kNl^tjYVI1Dzq=`>TV|#0eL>twaa|`1?1E z1CKB8wJ^Pj1aDnO4a%L0z_|*c zVp;GKAT4sCo*^qO)aPYo`778hf;w?d)G`;Ts?;DnMkMfix=0ZQ>pku3fsfSazpj&mJdlmbex1i z?vm+18)!4q?Smg`;L-dQ(zeJ1t(<`w0Vf_vDt;sTlrtFizTC~Tk9=(9O_)s)Hg;OZ zse7I?yX1-EaGmz_^_Xumt_u195o$*(I3GA4sByBSgvOC)>azZ-Xo6-Tr*m_|Zc&J~ zcBBuqiZc8&7mnoIG99X5fz9^ZTWN%X-aJ@VU(gOAycx$pwas}I405ESBV(;io#2VHuT37A z)^~$m(Wb8|iZXoaWHoxL%l4&PsKhLwg4v)05)=KRFiHi}>Sl}tVfCN6x12f5zJb?} z72OyzA!|WI6lxHAY%Bir#6!_~z@ap_?SZ}L2&K$WWP97~7LpP!d%Z{0gp2}Ma0l?x zB)f~!cuIXmj$4VJQ+A3=!^C{KGV}D#35I{Q>jVS8H5>(JLs8(mZ3AUH8cZ{6!{{nL zhuE=F>Bh`{%uFy671-tnhDMAgy9szQM)7aUtZ|L}SfxB#!Ww%rU>t&YOyJGckgfu6+{v39hkU+?;5$M3rw-$hoO~;96*+)s3ZI+K5KB1a)?2 zJO^%{uZ!k+Avw#9$B-zXZb&6u!P`7g z9d!UEn5&p`L0&1UVQaC5RhHos<%C{Do5(RU%`LL6du9uDao{*bFbC=cD-Om{(b~F# zclU`QX>ChI0g}fSiiVBcNW4l_gR*$cM7}}{J^aS-=VLk=gs{TYY`~}6Sv$k`Xdpxn zL@WLdTQ(@eb-Y8pk+9(bZvi=^x8Ug2VMiV8-)fZpX>ndr?6TysH{E53@O+1E?t z8@F8HMIKM>dX9o+i%Ewpe~1~!N;GUGkOE+gf^UG|J_&HKQ=o6M<2N0OhglU&0#6jv z-IPchi2l>}S%jDEp}(Wc51zga4`nzlZ*qt@4JcSq|N2BFv@5dO8QQ?r#m45goEP|? z`0Y=$7dSXPreVfC);wo+koA3(K=CB0fx|Yjhl_9qQ-@n(C}v0b#&hDVcvKX25cbN( z+h{1rC?PB^UmnSsgjHgfC+flI3D0q|QcC?IHE<}Xql8&8)2twiQtB57d%7rvFT}>U z3G{;vxd*2BEWwwC@R=J&R$t1hcRL7e3hli|*L`staYK8sy??^w`CQhEPgx-v6s~Ul zC9VE$<3=jO>q?%bEeTVwB(a&gY0IyxpdBbztnD^gianHO`E?Y);poU2h(X>|OcS@j z=E3+re38*PdjJ3+07*naRM{%wS#$5i21@ZuxIz?CF)HeJ!{cz^8552JI3S0w4DFq} z2>;{%!1W*a-~K<;ZMLu8kOSzv*sF7#imx&$cSohokd^Qa3W4lqFY z@xsB8-Mhh87E2VHymYsyPoJ*jb!kfz^9K%fIf{-5lcWVYlMGk1xj{j-B5=mEA(l#J zf)QHTmD0R3QQeeh?C8w5;OM9`vMU3RbF-fEDu4IA*z#Lr(<#tR>!z`dCS4g@M8I^@ zDcB$V6f+}xdRq7v-O}C@Y=|(9v-mrpu}aqs*2~yp?XcJ_qd?D4IsoGUb?`gV5bdEl zKo9WY8&AwNh|8JEZbGoXaww$udcjxYn}ym`2V!mSNB zzz3wDM;4%IB8+E9p)`{~ikK)}BP7L~I(`e^#+WW;4s@9iqt8Mwh-l9zS1h@tVE^>fmZ@fkY-#I zDm1;ZxfcX(8x-7NY=Pn^Ws6=5MYydjdd0ip{2R|NlQfUd6ka<#TiilS^-DM{j| zwQ=6Fc3q~9vfVIYVzz(TTGctB!@a2)(B&=`@tF*AZ5N|zOL4V@(9NbCOgmkUVP=zR}pbV#pncZiyM*?&BGi``xOU8Ei?B1rA97qf1MVzj7r}TpFf)n6C zP}TUUJW9#5QwpjW1Ug(rxTn_emIY)U=b@+P+xSq>WhlGp%^EUnjisKBY6?mToxM+xutH0Bn1$o~i@!_uCcGQI8INy24ku8J z8AG>|-fshm_hD`}F_Vjvlcc!%(@(|ylUiL!^B#D<(G*leVM>vFF%~g^bfr|J3oO-K zC5?NG@x)&hpMRphK*N7=c2kiB(+3xaHz$_YunKd%LWd98(&eGgpkG_g2Ct~It80@ZWD%Z)0dEWIo(b+ zF#@AV=x=wg^#39cWSK;*b$}8Op4bL5WBgE;gi9ai{SSthP+h@qcpVYmeC}4Ovd*K zDColM(1EU~V--{-(wft)L0d0jJ(AUp>Gg5`SL`~atY!9F@aU+?{iJvt*>}|@f}vmr zuk@Y3Z{C_?!n@&*-@t;$7s_yZMgkB9){m2Og(A>`9#93|hSW8@<|Z!AoQfF(debad zddKui(FvoWMP<*K-jObC^}fe}<^@Wa1yoTxiZ~G5T0<6;>P5B(&qwf{6*jd(YLrY^ z=bt-T$WLng^6hz=~5wp}1Kz?dox#8iy||`b)DwyD}Mj+0RwtLqCX((TQUn{BJr*)PHm!K3?Ncf@LC z1S8t`F^-L4_eG^syp({K#RRz!-Vgkf@ejh|3w2;v6tB(Pfo@LS#MjzeI-_lfpz;!H zJFBQ?0;MA?nb>*P;+9BS@iH2jLjIaY6gJY>YUbD721%F&V3YyWpp#CIImqFcot{?R zR;+ASp_@)_!iyrgkMqZX_BGPp6H4~jtteBfC@ifjDZFf7B0+yvz% zLcgs|eN~(f%)VHh{%7sV8mQA(D%`gAH1a1Y6l1b&a1b3E#cDa9Cy6^v0?jl8-;r9t zgyVtZ1M>+zFb-GONUCDPTJ9tpf*y`@HJSSNiT5XtpWv4-vuy%q%O;K@UISt6`t5P+ zvIzIgdcr99`@qK==R5eMWiby^-0BQ3arz6QqAr_md@ZmEM7S7#eByJ0zoUJRuQtS) zu-310coGXky6tT{&DVrJ}L7JF9tTa0#GF)Dmm`Nw;971=}zT ziw#^~;LE>bEtmzpqrO4Y<)1zkjx5`idTIZ^`kd#x;ZNXS{s4Dy!N>zCjQL#94m?hr z6;+|vHpAYqt@$*UbTd+{7}fo2#{95-q3VrrVN)RLXyS*xu^#*wwx5LqT&#W#lH8;U z`K>Tktbqu|giOrgGuGZvD$WL+&;z{$po$h&RyKVh$?eCKK&**i2!>%XBXg1)&J(2p zWgD%@nqsecUc_-8>G zc>W1`uUHYI4r-kjMU|4UcYFD;tXlOGIkk-6Hu~3zEaoJ?uLK)2ZZAg2(qg73) ziG9yA#Nk^#N#f4^gbwkR`f7ji3>%a!VYq^xjuEE_C~zNU2d0-RN-KStHr?Cu-^5&D z3Ob=RccRtcWoT3sqHFvhx;ELgog<5HCH^gaSDa5g-(D@3NJ}yO`4o%`Eh#&xUbgWu zxf_Z9SCg(cAQeZCOWS6(vEQ&J(wYmjm(tL|!m0aYKU?cX2;!%}Z2 z-aqkt$EP4J5LlUzF^h0MCI>k*KlE+BY5#s_py5y)@sDQ1cU_x=qAPW#h=b0xtk#>t zMer{8kAL7Fg2x}A?$a9^^J_z`ZfctmQnonvC9Wo0ZYWA*r0ptv`!R-KhJhnHR|Bs* z0>tF23@{$wZkR*>&mc=ECfG8@i;pJV&Jv_2+G3Sm>`7<^#{=~UP$2>xC5xq}-Tz0W zl`uz{WhhA1r9I6>U1MWm%(N+gN!>L%r~eU6%BS8n5mD+m-Y zAk>FKu2vibD(F_MZqb)UKVO$Yi;2t}FM-gUaEIfgYPz8!N46 z627aCUmXWTV0i9XyHxBihIihK-3a!1f?5 zmJ>KJ8Bm*qFi1CMX;z)`$6O$X|TEpHwtB@}FiytNzL8?q9N#JB{^ zaxUajL>ufBTAp2w+GYap3RbilLk5m0qzwArekBtaj9EOsVGwGh&}J$jRg}m+Tc5dZ zWxB3=X~xeeu>eU`h+o$Mpe}~aY%T>|Ie7)8d&Q^`If@iHN6=ti@4OK&?e(kh;x_d^ zw59Ia#Qc5Yw2CV^;XT;8NluSslb!hBT||r)?Gc+5Z=g(1arZb^_J$*i`>E*aB>EEV z78NwR&%29NYI(0l(C+KEfFqSea1->EO<=3r^leq-SpJV>ZBNCEFcfuwBWJ+tWAb2h zX|bXTOnFACU`x|z;Y;dIaKq7Ykgwu<_2r~!k|r4??TAVRqu$XD&1uM3i=QNJZNXaCju9lLW^ zxAVvt4P>g`x^+tK+xKp4S`4cZ5#RHV!EPUBpVh7`E4s7I_wo178)#PqdC2b>n*P$OXT%fR4?^ zL@2gSwg}B)dw`d3Jrlw)$b*l{bPWQBf`~Fq7=3J#I7BK=;wsj!guU~l?b;<>@Pgc;&L{>Kz`Q#K z_cY9PB@YNSH(W9=a_dKlxu56|cO%Yfat)e|ppWr8?K?<&Ls9lU+P#JA_Cq}`ZaKxwj zK8}osz~1p+4euu&f8zM*?>xtZb#HroT^Tqa9|;s!=2%FPHAU=c&lrkt+YHLm99UhT zSqtd~g9y?8@;@-X8t93SzgLjGJ(;zjSyBf14dW?~_f#dgV&d&rEecADTa0iuuq}OQ zYa9crYzatqK<4p~x1M0lx$V$31I@+2iG$H}Y1wn+>OW^pAyjS^ttnMXbz8#><@z9> zrIN1Q))0u{bwm1Q1xD&`X_$R;396F?-w0K}ms`Uq=JZ3|i&)hs*$mX;7Gd{KPqfRo zY!lnihF64b*=DjAVJMCaC(TGh^J@>(9=Nz%cu$lOepCzSEqF9MA2>e1hey!Pd2<7I z#TVg>C=i}bx?RPU**G-^JM+Obs>UK$ullF?imGHgy9Cm*p_P{Zy%SxX$!W%HHk=Ht{(+XN$V z%_X=R7O*#C=b-V*DWDb8^o$|qD;ek%>BaVYvc48Oh=vxgW`*Xm=Td2?{7oUkv_P;! zB7d&OT#|iMX9wFvG?B7!g)hQG-8E5h3*;M&UeU+}=f=qQGpu{xTpQ{Ko}V}#DC|jA z8bx`UX(sTRxCGC=@1!+1RIF$$4Y`;>;f3+~02&@Ws8s_D@C6#nm?B#ZX?KM~(`IPV zXan$=^tFQOI)7~pQ^Jw6=LyY->8`SQ$q8NY^MnfO+k-1>bB>VG0=qN2>705bx?lc9 zDxGc?p|Voq>{FO&QjRccp$IaS72R&_sk;K^!iTKPEVDe<=psVw%242~pj|O3Si;=1hn9&AAtOV!ToM8l+~!;EExpzpw|`&a3S_JP{Gy3l^x zXQfOCKv!ImH1Ug9822o?-G5j@3o{?+4H%HV5|fOXwF=%;1C+JlcKp%Ykh+_gh2!bB zU?Ivn=f1_Cz-*9-(=NaO{!xLRxPFHc>cpXF>;!DB5x0{Is8C8vaV#k*DnCNyhbJu4`{{l_O7=u>Vfh={Q#dp!vOd~xllAz;+xgZ#~~)}BsUn=j7%h5!tK zM|Gm1PDsIZqL$!oscWHKZ54F&;j3m8LCwsWxs4q)xl8e^aQOX7an)p|_ATI4#cWHL zzk@nxtp2@VSzwoZMN+>6T|Gvbv_KuD>?`TW2(DF4=Q@6R@|k z0y*gn{l>txiBZCwqL$0p)$D9xQZ%iB2?&`Ag*;Gqtw z)@6G@iz8`5zJWLDRl$9Ue!;UOA%vG_6EJ=SiM({4qS zUH!WOY6Ie$Y(d0%J4swJ7PNmIU7@p6R%Ug^8%jVFDb8#To|h-uGN!Cb0FlmO&8dVy zGX2f7gBhhS-~Z*GYpO;ICBi3)o2=$#TYX$p>PCNsD-Ph5-T+##$; zR?iU%Z(WiHGCFr9O~7}2KC0pf1uU`ERzH$GoH(+>gx8xe7+1qN+=ZhDwD~$OgVSwP zje^0bkzFT261d>Jj~&gMt90l}U9t4_+He>ymwicP7t~s)!?m9zYdb{YAE3}y_JUr} zE9%!1CxMNUS6y9fpOnB`_(CfngVoIzIrFk-v{sx2Eo57}VauYhxqyeugH0ew@f4b& z&YbueCP2TCKg2K1F!KY&$NVcEkJf9DyNJ2j7d5qg99d?OQkdcyABO0yZNLsa7GTC& z0BCRUM1^ky@&@-@K)G4PlP`kUXVton)lmRO?NOB8q1?(hFT^5s2VE~;GfC#uyh}LE zQx+O*&kSbgCY97j#hzguD5k8$g0ALzrvqSTwpy_|BU@ItH-Ao0M}47=5Hl<0#8CA3 zoo2<44XsX*zEuvif};f#D6)bANEoOxUVmgM(>U}m2~sevL`A(UqNjv*lKmd{p51=< z;hhBO8c@pCt=9r59u%S_-b{n`4pdz1vXf#XuA1u66C}YJ6DFuDj#U%6M6~+z66#G z8#2SQ4J){zo^Bm36!4-60XlokwL3+`XT-dTM?9)|qXQA{?|&u}Z*=QY(2_r(7zi>X z)=JAG&Fz!e8%IUW`+069cmU1o&5H3N@rigBxr$&ry zZFnB2C#VEnFN*MPn!*km-utE!IZM-&DeN^NIX>DH$Tj${v`TTryK*s(iDGll5jr_t z?SVB6M;H!L_RSm2On_cuE(SD-!5;?zgKjC|nP`NK*==t-#AhbL>z$ztX$$v0%}rp) zjziQNl+@RdnRCOY?a^gs&ol>)t*}JjY153-P#TmmYzo<--2#bR(<;?dG1~*>19Cbj zJ7usY-^B&K+zw{>YZCu)8kDXsg;K;%w|MYGoUdyzN+y#Y)Cji)uf!*0u46P0sw=Bz zSA*{Bom%i{`20Y9EF2J01&9spNa5M9(26zzcs_+~42Pi2?PlJV+#uA7&nJ#Y2--J; ztNl8R`Oa2plY;`*keAn8y5EN;fvY@Sb7xyE<2Ol!ptzk3=s>j=GtaqrENom*6t%n2 zI77#1(?}vkPVCjrF~M^g+psYd=sqz-7?~yT1m+p1O?bzf!;7LNqB{}RUi#eMQT**3 z-WU7*&9Z8VjJ%~7aiqYG$+y}TO*IKpAq2Ed5N-?X18A5Hy$#7fkweEBkH?)H};cuMR7-_;8b-hgMe-uL~yZZbG_(b5QvhlIw% z9u&(#f+Y`(J34BM*IwhWc@ymn#hYA`z`F8qbUV>(^(gTk8fe>(%MwVYM9`^^_I;)~ zR}P%jJiK9RUBYA`U*bir@QVJn8HFwWIA(%Ep8A%vg8^vuG&?8H703xT%%y z2;K1OnKh)FMLQ3I63Y|8%4w{GI#CFfFilb>>(NB0#1OD(<+b2TQ`ql zaeHHR`PqOG-7=KKEC&_i1Eb*l3-#OUu7ru$0#3raQx6>M1=yThBGI<6vWEVuC=+FZ zhwmAac78idL(^(xyGmCuMdU^uvgwBdIvIoU0uDus>v%cEWRYSK@$N=SGKZ*y8X_mn zW)rb7R!N3y=!0bEA#-LXbiSEjI8+giJUH} z1#jmX5vW2Byq~y!p#6pCpWrvTpooiYYsMe8ptVMt^=+h!HLEb?$g6=T9+$gz9EV7o zXDGi7@sqdewNfO!_zqf=3ARSXv^`gaH0TTTUWqJeme=sxX9%ea{ll{>5h<{aiisjP zBvP@+`73+?hNotTV0N?@>N{LxA%7TkndP$OrVS&`SQuw#a$)=JZZi`jofw!z!>OHV zlfL4K-N>52M6!eRvRomjPnva0i;*q8W{r=73$|iu08FRJb9AWv@GPS=TS=&5jAuja z>h@LLBI-J;EsH~NIk)n2E0#7HukK@$;+I&0*`{E0w27lY54X}wkOp(?gZ~LvOtj=~ zM5v5rqdCTSU_8)&$B)0EFOTu`Agl&ykm?Y-q~2$voKy0B-Z+3)@#H@{%S=dO4Ca;7 z6+?3v;WSe|iB=y|u!eC)5|@H;_>Xj6eshWVIC-cG#Cf`ep=bo@u&2VzZB$1B2)d;` z+rd|X6Z`}{p(mtaq_J91FVt_emj_kYe6s^3$Y*Qpv_;qCJX<5OjwonFF+l;cZU6uv z07*naRIb9e1v^>W##nJL)bBR_$ge9n!8ssAO=uZyyQSNtX;w+$sPHrk+Gm1caTWrbx zfKtK{s;_2T`@oz0U7^6M;=4v~huex>$@74f9Rad~6?j94+E*6fO(+9pv%eTXQV&oA z%BE#x)Z)ef8;cFYgU0k|0#`u?&bh20zp!VJfyyDLFWXeD4)2MDaTTw)s5pg}dNie( z?Vg{(-2S?a;NmVH!YnAVg4}b)xO@~ThpxIdDF{T5?+C}*mM38WgkeJ2Ed?Vou3J#EuUbdaa(aHyj*w%UJHvH-doK3WoAB+(WHmqS&veW?I79P#W* zknC;;@bkc@c07vr2xIH;PhS?#Qu^q z&B;=5aybwkxs7p+ThCkbVE;}k% z_e)GhS~M_y_n0 zYJ)2Jh4I4ia#_4fpi|dABeR6!D2h{jp7@(F3(lXQx0|OH##Of9^^MA;q0}!5n13R8 zcp}cDtd`eFH$6mxcW85R3h<)M$_#9{pGBBr-9n8*DBcu}yx+(P5UE=QG~mXQ@mB-C zQARW{xJk+<0Tx>}{7{^8ft`2Jzdw-$e0T>U5k<3-Kz34#-hft_#gwn&0KN#P#nF}E zIBbxJ1z(EEho1t|S5#C$24;<3-2Q)O-3OHe@%@DG%K1^ol^z+}k8 z5YP#HV04^6alAppqf=-*Xe9(Q6d_`^zV8LIVl=dG&>M7lBC0dH!|JuVD8=2~tW$EoG4rZgMe%sZa0z{0Jm7#VIz=(Twp9kFaYUpa+Oi4?KUz`LEy~ zm=zs(ZxbYDpg|s(pXe{tzoFld4)hQz7Wby*L_a60o)Gv6IZy{6m>1|9^$Lwp#EoUl zo0T7yt-=Rt4WuhaHg!SiI3;#iA-&46QfB8M8!vbhnaOZ7!^6#gWCWzTYfI zhs)KHMPiqmJ>HyQtP#DzwrEQpYOX?PXI5?nAMIl}!JMJLBi}81AzeJWz83HadZ0b= z`NZb~TphiZLTxv!gt15n?+301`hdKl*Gl8F9%~P*RoWx~1#&_jAjKdI;QWd6Zxjt9 zRTjc!#b8NHCn$C_8P-sMV@p6=X`8_>kd1+yCQ>7^NJxon2ht9-6KI~&tOZOMgztg+ zH}K^S9u4UmZ{N%U$A<=l4j;hV=DsQlK`X$xDrQ6diSh+p4l1;!FfRlIPLRh2T%av; zWe*4o2s5Qske~&lK)ctR#;g0;@aS=M^LBlO27!Yw)+)G0)0Nd?+!!{bwsxNh^~CW5 z9ar z_mN#L2il2dvz>-^;H*whSdJuJ-Hh`;5E-N7yk31qO*McXxG3EyEI~m^P=$$prQqw| z@p|Lqf1rGYbiR1#2*TQXOB>k4TVi4Kj53!v%#HB6{pR8=%FV-!MU|C~<-qa4d4_^0 zg{}+`u8KdO(1ByD1k&`=-MlObNDO9<=431{CAiG}I=~+&U%(42sN`^8CxWr#PxP(` z1eW<`RZT&O(=Bn(+-lfvNA)f`+8CandiIp()Y$q%f z=ZPP`<9I@2yCQ~Hnc;R2k5|g&=1}xE%G-lv5b|3)_*Z~pSTR*lrMvhkId#~wIB$!+ z%}i)=YRfINak7&_>~TC%PPD^Ui4DN?!q+HQ`#WHdb%`Vhm}6~IBijd*9xKXR6L#G} zYiJE@xhA}FJg_n1g$RXun8MShC79p*5v*OxQhYg#)0bx+6(U&{wB}>hl8{fk6}i{)Ukku z4<)S@cRZBDWC>2i#1pOH<8Te!81dlx;N=i7+R=Oqo9%rD(2NzWWo_(m+wQ zV}|L$b_dyB?0-OmvC6TsF{U*46)|1yX32EAK-=2hQ9@`X`s)m92#&cpO|-4$5l(q2 z&_^6Fipro9YE-i{>~3E_HT1nfe*-^J-k@(#j~x)Nz_Qz>B9sUtQ1pm1%ok+xtC3%~ z3e`@B%HV*6oEUcPk7P&o$BtH1G)=Zgj+i zbm(v=CpyXt_2rYO#nsA+pO)y2qxZ9jx9kHo8nz@&7{X{&^dGC{`ut%l1=&KJ~&2P z>{a@ja@r2q^;`RqpV6H0lcRzPy48qRWG*m{>h}PJ3c!{$Q&tFM^26LOoB0u&WKTC` zs7Z-zL7_3Ltpp+rton^N@0DywACKBBkSCQRceqGa_}*MK0oK;KfHWLpOhXao?A*F`-2j*tn`;9uIdL73 zC$1lO{wL~}BZD}&>WaJ7T?1xOoL-}m=)i64eELMAN;Az?iCLs!NNhcRHBptN6zw${xX0n`3!lPXxgA{yq2{(MY@ZVuz-fe0YkF1V+L5fp^9857fVb%Xi@}L%^n%XHO_2T|gm3mNWJmBqrLj zeFf_$dAR#5m6X<>%!*gTpN!AHP}9^F$|wQQQN27@46w0crA48zcfCDQTFHN&(3|Y!+8$Cri25p1N1=sLj6MP zAaP@zZ@yC)KW-K(=e@y!Tp9N4@dD;+3%b<1qW_MQP<}$Ml@FWB2<9ahPo=aSk=`%G z(k(wdjg;Ti!x^1Pf-Y05>yAVq9U%No_+tFlx6p2Kw2@%x?J6E9#+Is^mzQIZr{2>@ zEK_8gzq)Ey00!G7Kz@Ac<^=b>Pn_`!{6gWq*n|UFo0^B!&^HqFZQdMSyRdYGRm}sZ z;^L~&>`VMDE3vsopv47#qjZ!DBTf|e6Om`UR@(SNvf5MsDHI(z6z7ZvMq&m>H($2y zo;4#7PRCm$XTUMy1@i%|KzG5<7$^gkP#Kj`?dF`W!(DLVXns%}j%h~qS)3s9u6Tdq ze1JM|fv(v4nK`Rs8u@PstDx?PWtv`yv5L#ik%5Y*f8ti*BnKsD=duw{ zIA&q)QPgEqG6go9g3baj#0R&wHl7lsF}lgQb_(PwdkVPWXxn#kN2=(i>h`hhK%Gu_ zEoD6l2}jUfnxY{yG@nDk@i*%09`hF6)wFhh;1&qA&7sX8-xVJnwa2uMLpREPY^UTa z-wMAOhJRNgq1vy2Kni9Bsvqi?qQCLzI0{;jmSRxA#oUY?ZM!tdRtN+R-iAUsy|rJN5c&yesIn#MMrOG0;L39INqhqC`p{Kn zq_cd7F0R*!LoeMSWBK1f_zAoTkNbMwo}5`QjV0=e7g{6dHNDwnWg3AzjAdHSQM5G7 zz~Ot4GDC+49K#IwDH(Wn(0`&_#Py|(j++^bg_U0ZXFw_BmwQos)tD+B-YaJ6>P)$NygO5qe zESs>C^>Qiz)KFMSP<2f>D2%TMo-ce1RPyMGNx$wflKexon%(7h(Z!MXbzTjEd?c_- z!2tAu+ChCmAeUZs6Nag*xac)hsLr@X5Nd_jwrfl@`w`Np5Z(41fTDCiQrA;npeE18 zs-N>8F@WLnFxu4SgYd;T@?pl!Bd!&ysF~ZWp|M#sHQYo<>&D?23>Rn3xkg&h#_GeS zVM~llZv3NwktBa*+@l{%qU55~Kma(O<30-5RrNjtR=Mk)Zz>&Te+9A z?rx`F5L$I*i@*u@IydBH4719H&MT4qXczskm7F?B+@P?!g__vh!?uG;zBxC0=p?+K zm<9FnJn^FLi1*JcmT?^5PK~LN_04~OVjlRH|G@JbWvokeSY&TTNX@lWk<QRavYxQIj`pcut*%h8d<;;V-- z+BC1K!-71BS3=apeqSN9WG1%XzqeF9nTwE%Z_S(!36RB<(AGJG7|xye6awsIdKdSy z+YG>7jM~6tMlj2*BmeQNRM6P$*ecW~+yiP3;tFn2UF=O8IqLpXJw@Guw=#%#R=gfK zfc6FniZQ(c%V7g70~S~#KVtxFtDGHr%yNSm7jp{~mmx`o#6(EvR>H*sm94lszzsq^ zG|=u&044MTU~uGYp$U#~W<+N9{U2>PBuJnyl^Nk~m;IrtW)=+*2!(=f zRAolEo9X48@3=tF9+I*=XDDso%B(B8@cF^7O8$-V z42R7OlGr3nR=i1&7cA1pP7{s2`+VS9+ zIfm$yS~-0CW?tD-(UWv7O0IqTEyCJhEqq4Ek_oT~QG<;QmD%ArD5nR9%66#t*tfJy zHAGT%#iR{wM}`#p6WRDkyYd;&GP6L1S0W$WGwA^jT6XZvXyhvgV5hAR=04|)iJIvJ zUX;$g&lN(?g#Nvre_SdfQ>fJ&M6eQnUhWz z*h07Bhj&NIOo6a5U8rVgH*eppQf9G~5A6ya9V)DCO z6IVDAj40&zgOIEk-0wUX*0~2?7Zyj-8ycvEFG0RyXB1AF6bh4?s2M5nLNAWOM`jGJ zN)=wir?ZnfYI4>-90ly<#DGkeHJ@%%!vjq@GjtAH0th+7ffiB<0&bMNbGkf)nqinB z6z$ZQSJsQv$c>RAW|YMocAr}0X;1L&d7z3OjFWcKZRj4;GN(D^L!&K>7-Q3 z0HtohIktO2X;xoEcht9BFk93(*(Fhx-vt^Uf1m-2w!e3_G3Gd%5DiOko0P#>?d%Ro zcw4jRASWIV?jPjra%)#uSVnDETILd`W2ex)^Z>AE0D`QFwLwAe%RlNjrZT$6+vl{h zoF*;HQsvAN**@S#Ir(TDo%W(#-Uz<7Bnz8NcUd(+VZTp4tMKBkv&~ybTAfNc$4TRd! ze-4+pQ(19R^n{D{KT#-ST-IeFik+#^N!1?%Nwf#Q-RU1Z{()3~_lP6d`NY8&)IeC< zE#_{gcP91-5yw14O5!8)VF;=A_A%PMmkF-rNPe7%Y)0}C2b*|f8dkID6JnrF_nV;! zuOPaOZFrxX+u{9eD4dDw#d!Gv;7LB>kg$p4+!qB_T+UnxTQV?Kp*1PFDSIASzepF! z5b}0cY+Pl(d7Fn0q11^6>&_W(N=n@OhJD2cj<#y3$!BvOBMCQki+Wd@p|Xkxme5ES z*#I~&?BJJeLnq{kr>=3ivxJcIZoHJD9zG(w++Z7wjtvt#XQrQUHoi4-1Q{*s%v@R# zKBTzq%?4N_(8Wc#WwkdlKRO8raR@^UWG2G_y}7#>wkQ7hSI#?+U(x3RQuQr_r3oa` zaN3VtA!ySW#BEu^ZjcY>=RNTdZq1>qecu1W8}yv2=O4OxIlY06CTwR!1OuTRU&UqU z;OCaK4pKv|#STc8Az)8Kie+Kq>)_rvo=9^PkCnXsE!U-NF)^0T@*w!#GXlPCmOqu1 zWMTKa1YbZR?W=_WYRXIO9k}3Z&TyYcOOv3xq6<}=12#`ay`#zFSWUdnIEx05u;Ba#PL z`qoLV*ZA$`+bfM;DFX3p){uy=MQ3_bG)`u9z0ouB7l`eVfgG3S*IO z;UdikyS9=WidIVXZX`!+@LZJcg>oBQm#4|vG{Z1;I!T}c7EKkE?rx;AbhAFT%%3Pa zlkrP3Lui>7o+GV&#Z;!@{-L%7y|Ay11NGs89U;$vf~h;|;h$z>LWN3vWPU6B+v)H! z7Y$YKkCy;0s4&PH;Y+1=2PBUcr>DHJXJr3xg3r~}JtXIye3A?XdN~H>d7}#73;FV} zz%CnlCsE<70g$U6*xVtD(+8_AY{U#x(*R>GR!EfPc1C2qJfPg>&~~$!mu3Ml;s7u$ z`^sH;5v)TMk3eiouG@ zL1GVoJrHGlQLadN>K=+Q`}lcKHK+#YOO%4#k%J55^l#2WBV~s9*uExty)lDXdzgUT zb=7>OP%5=km8&}uq%_h9D@8<0P5;NNYm?d1`-(d4EQjRoT+@vq)!2XrgKYA_gXaey zPmdY*eZ}c-?8^6^mp~vhY)h@fox82AH-tE+&?R_rflw!952U%^3ajztd!y8YuS9ur zTwcnW14;3B>{8^Q3x|@bn~b~oOkB1-gFX5tG3w2iZt@;CVeLwmSA?R4mu21~BT6f0 zRCFI9FX8U^C!JGZSUUcTr6Ak17%t^Wwu;?q#gpuJf~=YAr^nYq#0w-5Htj#qsjTu8%*z!)#&Enz-MQ5Bi;+>B`mV7srdEdTHy1gfIY% zu_o(gC)bE|@!u8gfiJ8nVWt16K%hbgT$L3Z}B6vLDiS*5?|248#K-=jy3Uh z3$jaJljtesXq%M7X0_Gkjdkt&Y%^#!-A=TW*S3WWny+-SZA=rCK^|nw+Zb;~Y&&UA z;T+uCg3>HKW~^y?Ujr5*<;6%{#CFL@-h|yENNlE}?zeCr)G4rLQf}hq{+O$i76LDcvOX`Gl{eGMm5|0U zIQm-CS{3ekDRn&Rm3emVm2{C?bO?zqoCn>I|EGTk-rwV?b@||aaLXj2x3K4l8|u!+ zv0+wC{W@ZaW3diSB6=qqo4VwRc;gANvwp^ISJy1**79znhtv7GAJ#=Sra zbXs*G-I(}J+q>aT!x8oB2>G3a0xyjk_9c!bxo3`xTwQYkNOr^kv*Lp1fixbL;y7sP&v6${A(eRaTfE6awilpq zB+@{x*ov^!TF$#2t^gzWP1wm=$T>n+Ct-8OXu~Ub@gsD&9cqfCg0T+l#XFgJsR%e~ z@Dh&~Nqr;H#+0m&H5c9oqqb}^pQnEg!b5y;OpwqG2tZ++5dwhc`Pti6#eo<58$Ovg zDb6FCSI#MoA&qOMt54oV?K<-pX#{ZO5_%#>%h%NlLR;)m$yaoGGuJ-5LYdG?Xl$ub z#*J!nrsg0LE2whIbU17>-RLPszhg5!#e(8$T-C2{BBEnN)-;Knk?eau!d;ncWgAat z-!Yn#d^UWclV$DmyR592`FoOScV3loa&NvAo8R1=fi|UOz8)ytUt4%gnC>mB$Ni?V zmfz_>jaeJV&!33Lb0zX-Zw+axB{9zMf!$MKNVy7E_R?j|&EOJC1z7~rIfZjxY`9Ns z%5lY}^A;(&8gpdZ8JY8VQ6y$s@F3aB-|oZ21Bx!ADSfqn-284F8=c&*{k#EKL#=2_ zYm;00XFd}Xi;qX`^0WfjX0`Jw^WFdOBgPs|Q%yT^G`lR|l+f=$%9MiMX*WipWhAd( zRs)yY!|ZC#Pa7U&Q?{Lh@j@?1ZxG2pG2!~)>Yms$@j+?(|LxGSY`GrdZ;uk|u9|LU zA?=H$JagWQ9Uj$x$@yo_=4Ps_EKc;^NWpy=8#ToKEnAm<-O$19LZNCT-i7S17az&n z|Egq9pPzmFPQ0HI+N&Blf+oCZV*x5J32 zG6|`sCUWz-*22_m-)BkG$+mbFS}8tWtbL{GR;4N3a(aRW(#J}|8&*{4R%*Y8A5R!) z4ZAamtUl~+3YnTbYu%pXxlf$%Rvp3NljSL$)9@B^n_-i{oBtSkaj)dz^sAPsnP%4b zg5;GTN~rxjHY(PWzt(J& z%O`AIxDxg7Pt5bwI?_Dir4Lf_mqC+^SBNJ^)+ z&yMqP#5XmojwrPqN-(wn&#iuL!!6y%oE^usqlc4L!kKCMQyb}C)yo#=Ns2crDLgH0 z`}FK0Z3nf|EugkSCy&JFT#0`ieE*_cZr0Ez^ogog~oVVa%VxeXHr0DlV!A@GkqL0EDp6;A>R5?-hI}i{O|TPHKcl5|GtLv*1!qb^pLgOEF; zbM?3M(MdJ#H|jyJaG@8uMc&iz2ft?i`sL=`wSY|IOgi8Lz4=5^F4E;)OJ^C2G@Ll@ z`bm)kw^Kp;g1xk;AQveT|MI4yP$Ia_>6>$>{l3)jZ$e{!96Bu#n({h0;^u9AX(%Ls zA44`lON=RHq9?bE0JWL@R1V9Uw9E^TsVd)|{vH!EyPBG%-{E~r6}}F>I{CGdfNlIT zm&$gy)FTc*T(R4;|M^x#jmwkNX5^l;X~WC$1;1R}Ui9X7b;aLjv+DLROLR7&(d-Qp zHBr@f2uaBjffDY>4$^oFLYA!jn;kpb`?APLj18y%!8&86QL}nCY?7SXNtF^u{-yx* zCf?aR?R^wBeA(|YP%V^kufl)+;CPWQfBw?p27+O^U9oWOc4=03UHKHHdMjoQfiyV| zV_7A7Td&GYsI?y@MMlWgC=I#d8qJZ=*jF@*cjo$L!T>rUpCdjfx*tp1hV$xVEa~-tqrbl05WGI|B zt_wZ4Wi~7LF->if(n_RW#|5R?lR0g>V*Vc6y`)4=w9Lq!*Ztd*zy6K%Vsw|mSt_m# z(_Grrydar9{XA&I{+vpwVHoP}yReuHTboSaiY>e(0DJS>AKS8T0ULLI)K(3eri+L$ z8wq)!*U zu}^hXtpzj;XBn|MRC+YNCRxcLsOovs3};UQ9zv^5eX_4G&8Ygh&-y2R%ARl6gU)B# zddn!VYw)_EnNexY`JVn7Ou@zQ2uC-GH~QcRtG+Evx}_h4X4?p|C4-q-6F>h#`@#4B zCjaL0Y~FFxp`Zvw%pPr~?hI)+$Y^yLON!`9>u!xZV$^?`M8v+0SY(TPii&7H{SyU8 zL^w-E4k%9CCxiH5iazD4|+I1tcbT&pI;g*-OEIam4c@2IN5GM zALK?r%hai(TR^J%P1VQhdMy>a9lkWNwVjQY?SwXHMIT&^aX6}b>c%Yzz4W&{w)vsY z0>IRV4hw5!^^KcLV)0wCy(3*GW#3Kx*-b*DAuo<6bez$G?^%4tB@no z(^iTT1t~XL;SAtP3gbZ?RH0>;n*XygXpBu($RfsSBB!}I?@(#NOF0gQFYF?6Si9)n z-99#%GcEe3CP68TR?_6)^tbWZn!9HogEZVPrk$!DVd7KEfT54%JY-dG=_V!R&Gr$& zO%l?PwTqC=`yVrk9&Q`keA^z)h}k+w>We%MADg&1-i8uoy=mR@l9k?K*xVOex7#>4 zvPb)YCT=fou|*me+BQj_2@vsj)#|hoRs?s$2@S4767nBtB{evL;3APyW2WICQjGu_ zG$8ZaFQm-(-^nKLnc$|erW6vmu`Cqz0dei?V_b<~`|Ma22zgge?i%S?3z_he$4XcmuuI*{jbc^VoCAG7DhO>O~r`+J}DzFnEBc`m>;rs*Qn&}G;LeLyS>Wi z;HbWvod2GdAjk%n!9iSuQ3J$x`JH$qPwD85i@=f{TnDXEFEnOVDM4`>xGjVG9P5rn zNpWG%mYCb)T=!J!ZOq4K|*>yAUZ>Bmp3V%9-H+$OH02VDK zW^U$E4ucJwm2u-_O^$b$B^0p8;WNV%y}Si=J$%eni6(n=Pmami{>|Z~vyHBM#1?p9 z_vBB+D=slUFIM~&@t?e1QyqYt<;DVnw z3f$|$hMEMmy(1-M3kPAVNL%9dffVG$*dlHxf60`|+L!FlV;I{~$oHMz$GXidzOug; z!#mY$#Wac!r3>8D`?^uzk@wxZk+qSGEW@kN6WP%4QK+}%n#Iz6mf-gQIz5{KZ4YrvdE>jtkpfo}1J(S5ddb6`(xNy|~A0vVS zBvRwOqi6vM46VEgPTbKle70yRQM2Yqre!p73YYL%7D)1QzmL%#aBFM`3Z;Vbin@tZ2FL=_}) z>m>30bW<{e)EKtojQh?oId1+635pJKq2&nH#_43*h@{56ICldF(qGxZBc;TD4a$yrgQrj7g3Vu9JC$gzT_MOe!#o z;wYJw)=Py@Y_q{DHP%vQV$|?hSnE>p{*rjLe1$h5>EZRUCuU|F@8zjADpsK#kf*OQ zU?lYAxD{Dhku|xDIZu>)h{Jq5pST|!4|?$*V083cDL7*`QJGe#H|m{_FH$2JKPQJJ zCH_F0g4=l7Bi=6bqIOR6b<{XD^o_i`Gr3YH<;CTmbFc{$x8WwvkcZ6CeN}IZf-1|W z(qa>ubR|eERLt$yRK193w~xk9nWL0 zy30diHD+3vtQB%RlmXzkD(JMcQ2hw82g1JoDiJg-o_0F*;>gx%ZO^gYCDsPaL2L_O zc_L;M;tNjI6-8Q=e1+>ueIo9IPxX{cZb6-hbTopXl%~G2#(O(9OnYH7@ zpYPxh13Z3FzNmw9Kqb|cmoem>ZJdySCKCQkm`pOy%XX&x#?>c@ey83%cu(4vRT>|i z1hv3Rr~Vc$%0Efyy&Fm7LOICUqY^~@GSrQ0q(s`EdNqCtNB515ZYUQYj1KDH(I|G5 z=YS;OrHV;5a;nJK6p@?1drmM%tf_ODrp>Zwylh{2#H@O9P$o2Lb~#pAO<%c5T+Hrx zWuHPEaAZme!npe4xmVJOTyYqO2HUJXhOFVnFj#Q}s*X6+rL*zj--)%wC3BjDaGP$GXtEt@tz3l?vivanawHBr zygE{;eIYmPJI%@7<`l9vSrIAoJR%OTlFVqo|<-HW*mTLO2jsy+1nqL z64`)|h2Q?->U5)OmY>KA?T%pRd5Oc!Hs!H5x)8r(L%_SiD!a7U9-UWa+(|iRT=)}g z$5}lYPye8*F)!-&+OyI-hYi8i75L_zny4k6Cg$O;@oR8ge(oftCV!lc7QC4)S92yK z+QVS*PaoRiA|l%^=hU}ME)7q~Oudd}inS>z-Ul-Z`oDmWCW*a$XDMVR++yz0YNw19 zT-@-+6y-X29o(PJ58P9rTX*bX$|3Wb9@D3{M@1hGo5u5@ILv%C#|y{*?bQNY|1=vX-n{@kl`MTc@JS;4fN&0Caa7`9A` zw1gRqZqu!#jxkI|hD)5nZwKXM3|gjIIP3{md}1j=R%Ao0+FmlR9@G!oj2xc6?8Fp7 zGu+(UWfozbu|=KVE4RP#{qGL)Z<#(^-MDj8YzylNr@_mea#5y+GXB^x93dl-0F(w* zoic63Gh6P2ffst_>eR7r!iik)HM|)w7X@Ir7RuYRwz)vkrU@GX;*7E5WOYc5JiILe zsOj%flXIz`Wc(3_8aXU zny`p!bnU~Y4C~`9-Co-gpK1l=OZb^7)n%Lgh>c|5axtcVWBS@G-FcgICktpx{!2Nh zqxfnz2Y^F2jfoW=|M%d^eETn?Qwu$j&OdKq)70%LErP^XsU~lp0T+-D(%@*mi%89- zBIoe;U%~@q263zP&GKf&SZ{AMb^{G&6X9scMLhatEO!N+>=3!Iv`t0F3}OkjvxYcS z#=2XV7SCR%%rsq2o2kSMi_GgFH|}kVY)~KN@}8gm)@f}(yB?bgJv_B{q%A`wMHbF3 zcL{&`XXW|__tPIu3E-|R-6Y2RV{CZ-w#H(8!yiZloJ?=J#KO_ar=+yu5(7J)y?*P< zjMkg4!+ljZb-&v$zNfQXiO<60;&H~Z?{NFy^ybfpz^3}~`s$SKS6Q|xQwy`d(F0`heq^jzXia22{7!VDOQz@OAuf120>qk9)4=R2 z72+8(+)Zzci`Ldav&mb{nhQl-7`UeX>NZ6ezAIk`(mhSXxwh)UI}L-F52|%Rv8Qm? z>n<~bsP~|A_n89X(6{hF$2BYGoxf%N*MFgBjNZe--{Mj>-IRo*#m)|6xTaaLM2^7> z6my+LjAC8gIo$D-aUbd0Ta9S0CS{BTQfIF8xA32Y(@1}QCw+2%`a@v)k+EgSj@WGW zO(SIcfxzmy!^xy51~;%_okzw;-D2Targ7@xRP_J)pFAJ@@}KC7-hI+&zrJjEeV-=d zf01Qi&S80Y@s?m>9-T89*C{3T9xRjB24KcNN{~g& zw9)w1IcjLyHXQpKP^kyFDhL*D2eWv%`K?e6L_@;SS6IUYrHo8hz6zsxmhBAMm;vr8 zYoIxq5fjX4f{vWfvb?!=tj>L(Zo1s5r88{N=Ldg>AAff#$L^4BW6i|0`pVX@IhxSS zktsIOA3iIz>ctP~;T}={6L1`u5t(M8JZ+-p8Ip~0ZR5)xo4Ee|0-IP!9`u7hI{eO$ zPX|kyM0CiXr8phxg`5r;HDHHBTx|6_Lc4K=scIesBQSXC5elZ@7@4O0@g2GI?ee;S zN_tYxc%@~#%?y;=9FIAs$8{$oC0?1P|`uL zwuaAU+dB=#W;-wCQ2tuUZN)xM+N<<+1B^{5YD=-S*(pmwALKi?JE?%s8m-ZTJY&y+ z#xG+f$7w|9>9@3R#g@vErL#w|?=r8X9O^oP9=PqvJ=b}lZmWCCiZx99&pYiGK7J)f z%FC3{wMp?O?y|ydBH?jv-NzLBZgm6;W3I#JBHZek9$rez zAT;r?9>@*3!Ht&r;|J-Bk1w=)9XP2Rgp@bq#Q&keJFWvt&_$j^*9&6fgEHT zibp+dSw;wYk*cS$w~SQCRN)%XxouGcb_3KivH`d3OEzhjMYWY43tcNcZFtqTHN~D! zI(_%*wa{m#f8!426?c82CBMPz2jfD&xP79h=ThF_)=4dl%Td}+V^?Zx9y(0|qNL7F zuk;r?@+u~mz$bNmX?WNsC(buFXut)Hrkn?*I3-eIh~%;7)vv)3dEns0F}t6qT13sC zq~VJgw7kGg)9hw>IfS5V$d>#S!hH*7&2#rM!(axllj|qtip1jSbL!D=C>OGG{u%CMJXd#kjxUkcCi{y8PxBYIbtNr0ZrtyEBPI5jvX_JV z9sQu+XoXS2@_a3qpfNXxatO!e9)q43)jPrq=de!WT!UxlFHdiv_jh2<(Mm?e2@BTQ z8*y>Efv4*e&o+t z_K2OXktS^8VY4h31WellUZd*eb2fG{_Qc$4V9i;A4(kNIGQY$9C%Kb@Ibur^dqm9; z*Oh-f$enzV)j^cb)l9BvoSP!=whxa+mCfPZI~DRZ+Sd~_>5GqIJ3^PIbnt*qQiravFf1NMtW7m{qu7chJ_ zrl+zOUSb5?6Gwy;S>AnXE^t)H;bj}0YdfcR!_yec!(`R`%q_KLw$Fch=+#(T*XM(; z#J4Y`l7_?ITVfOs_|ePL=&rwz7Roms4~qC-Bav#_+d4{R0}j_jOFZwilk(-B45=igS=O}p zLeb`Km-63#<@h`L+JX%YkznT9=8-!l!5_NC{>3|-hL5p_EJUs$_U9^aDOqG?v`Bl~ z!diO3l^K=SliM>WJzH&HSS0iK&LBFkP{oVsF;=Z_FR*FgY(pe z2Z3h7V@^i{ad)zq3r(0ti_#&#$22j#EmcSfR}v=g1!h&|+eEWQJw?;WwTsCSZ( zo@m67^u#!P{p9mLcqzYqAa z9hi`;zI2op!|`?Fs63v_yEKP%EoSP(N=ReHHg?x`cQ$Z20&%RHvpZlrX)*&hA*5ZK z)ClmD2y~L|Tw@JhO!JF9?rkNFy5`S5pX86h#8J&&LdJSPXR4)SOFh6KUJb3 z?s)@GM4ss+mNNW79DTWS{&=9B^xDeBKy)F_tdwmeB{9|U2Pk<;(k*i&a&nCQR8Y=L zVi&8=WO?y#ZR~`+-Onv=@&?8jndGUbE6#GC8WaRFMRtq^n(k|mmiaD@WhupJ4m$8 zxn8(wWz$?tWV9v6B-7Pgj@l)vGAnI!Eb}HRtIzYbl0L~_jLRheDjNtfm}JN{yS8IeCH1vgw8zL!_wyUP zIDX~!JICpD1;YcDXAWGC4{jow&vZKGLQ=G6fNFzBb`JNE0P66N~_D zK$5@b3&Z;aQzH){yX(ISUybs~@nlrbgwye6v9K_!shIDwT#{ppY-3ZQ?UgYzC}l=u zH%g1nJ5dEy?t{bL4Lh@SQ&MapCMzW^pm!bL?kQ-Yt7|al%iLrAFOY_ho@O45jAh!s zZuCNVaoD&y!aQsDnW?qKGNA{33n}Xhwd>X0jPbkCge>=%=Gry!S2)q9$Jv?+Xk<`M zr7O3KB5)uN$_M3uMnB&)#wN6=P%ldV^MN#*OHUKqGWjM~)#lAMaA?i@P7SH|95|R@ zYs3!Q>(to!UxnAd@XGx72lprG3?ZbhmcX{EbMQQjad`{#tA_YzOCOr8WDi)W4Ig*w zQ;Tt-{UKx0xCkSk84CleYF;0m;=e?Nufw&jbjF1V*Zuhx*MZJK#h4fDM%Q7IC*NVC z-rmU8-<#;Gg}_#+N?^Y)Aj!h?<}?=i$}v8LmXNzE zoSk#1A>TW=3%Q^L1zz;#_Hzwkk47+F9X|csV|+w5jp2)*`0`_OM009aN?c zFb{5u_fry*JTiVNBO3g?(|-Zs@kP4)i|_Hb7`@a8n>o4sy$u+#RD{RJuK? z5!q~_min=hV8)YLQtuLI~5u$He}; zs^?_eabSDg6x~rPwB!}RfU2CCZ`~W{E4g0+R(rjh1YChH9xY|G;G8?xi2R?ioSHtz zE$(z#EP#xdM5HrLUvbavrpl5BOJwxru`6!YJbN2k#b{C%uTuin*FyAWz}+4VO$9EJ zp{_$?=&bWCHM$GW1N{NY@zblj5hGjaJ@=rr4 z&<5ioSFhHFDc}pO`j|`V7Q|*Ak>snc9;9UgQ(y+Y9MFV3{LeJvXN`lrO^H~e3)kSR z+^;Ca0;)A40l<`=p4XjSl4*Zq9h`}m@DY~R9zrJGo0$<$|5CgMh#*B3O@GT@>@k)1 zHUI}@Bh(zbXG>@5Zl#yB$&hS&P~7tBX%cu?DuSN=H>Tl`2nlyeQ-8s7C(HF`M2ssd zk{1Az#Z|g*RqG%>17fqw5Lm=nZ?J|#v}J=L?gGr+$b&c>g&AWuoPlE!AiLT+9zt_= zPPji;Cbmsu(8X|dBw*p0(L%esolpC6qmKwjvp%GDs^Pzb#;R?jh_ZC!mU=%5=|;Mt z#Vv+*WH=c`8MfqZE6=nYw1QUjMLJ!rZbl0$S~Lbb&3qeik2?t3SV>Arw2+oa7?B&a z3#b`V=Q4W0CQkf zx4m*4B{h`KndQ!rIJV3oD)I14-pZIS2JUv*{2A`J&|~vynPqfOXs~w z8uCuBw)D~zzUe4BFW}(zL{FDAS{pux{d4?0ff>^XKYIWfZ*cRKp<=~+A&Ecq%LCP2 zP|b~cP!s?7;QkLDXQTndV8qujlL1Rda!5 zv6CJ~R7elT_3C-oy(6~ZyO6qEp#7j9v`#)L&lu{B)!$o?Ru84SSv80{ z%J#BG1d+ZTN|&8YD4OzFNQGp{$6+eB+k>>ygr;5H1kyS@=;Z}3<;RH*S_^dsD|C8U zD3jY<=k@4z>WweIM`J}q&gKaT*O8e4hOYHd>RwHGoE~JM3_r`}S?si)fY|A_bzxc^ z=G17A2Y+TS?~#LPzFzxk4Qhr5rNliRmzw+NV`DXh+9}naW7z_0ED#QsJ7Es^N+v5@ zw7OEx`yeUDjeMgYNTw%V2Y)Z*-^j0pM3p#oXbXU4xKCTAw1d->0$<4KVq=d*>QwOt z#(K3&JvD5E`rlP0g>=B3RDANF7p;dwUz}fSt-^C~o#ao-r{^j#rBI3ULHqCnh3PQ} zGg{5jDRvjDj(|E&e)>)xAVk!&6|RNPZ3r_?5B3UQL@MR}k+u!klqt zb0bZtr*z60 zeOTv;FlPdqDYrFymK1CmU7d_awKf+Nb$N@Xvt^{ETC_s_#_=M({O7k~qbW5rZXDt( z5uN{YJV`D!a`W(dtJe*eH0rkK*lzCyaZKUeoj`ahV z@|n4Pg}`JRV-N|AOiUPDY+CE#F$lb?yBG0bUhk%+KG4EA=-GuWE|%`dMSdZdS0W=~ z#&vA-iO5o^82F8XXG?m7DJ!M`$Qq(F8we5!O~ZD@W3g}7LVj-bgMgB%BT?D@WsPU$ zb>qsUKgdr%%p?SW^S!rkE@cj(35Ou$^@MQUmeiZ$4S7rj>q9K;XlO|F?Q2MmX zl$hk4boG1&2{zeh<|C0_i&8&-S&g$mV;0nhFTbZoNCT5IVKdWjI)^Sv(HrTYAM`*G zuX0N{3r#4=g<&n~`_#6;ZT0!7HLEscKkP}?P_9`AxKV!N{yWFh?b|Mc3EFN-+~5YOdFX>@PbgaWrW_s4 zw+7ChuqvF1bdUny>B_UdYUUyKreQStSgW0L!P3ZKh@RTODMxD>?*OFYIX~qf-8}AL zYNg&1pTdRQ161qONAbN+p12XS_J$Du4N9lT;i*c-XQojst8*;nk6o(ugP#YtU%7oj z_2eGQ(rVSWYzy8PzNexbgEFT{Y!sa4%LE&Rc!MN9YjWX6V+>Bno!1s#uMws+CR1q8 z>t;9MeFMdxttK{&u@kl^H=)=^)ZFpIwjmW3OwMSkmu+3(O4LTKOMN6t3i!Y&^vto{ ztHc((WJ)HdsodB)RKWw&UAnECMb*ZrDV)^9NA+@ZNor!Hluj?KbLa~_(;r;_!uPL8 z1#wct@bTYEYx5*J9ntK>}7eNS6Gm#fQyfJZ15kUrqp1_^$?ssnn&i? z@oDDw9&`6Th2m5CHI{bR?}VVrS`lIGM;aV(Gl~rU7QN*XZd)c(G1z{ibkd*+XGS82 z7t7p^OTYqhMqZ`}0?KySo{sY^3fqATi9E=`3(X zlWvl!-*`PpmwT>lE?bk=(wj`s(s0qg+I`Nkpd@R6S>kI-=|C1u!g)dJ4Dc(zS(XT)n@dIS01g zcvSAgqsP*mn#i)q^tcdZqPwE6OWuw8OKWqg)@cfr)F?G#7GxQtcTdH%Nmyg)Yw`}_ zsXU_ex^4{97p2(!X)K_edL+KT&pek+WX_VbP?XgCaUWx`&D=H-%7vo7y&BC;fRmxQ zU^px&nvGN3m=}|8`{pd^$%NBs#1?&@qfK}DK-Cw_BV;^NtuUD)qFbjiT-IiQOAn2z z%WMCZvN_&_#AB@9dWx|nf<+|w_ZAW*muFDhhQy8oljd4++&A8iQ##UCPHZ91Em1S$ z#c>64CcH0y|AjO0{crGdncD2jwK-KP{yG^JTl$;oVXmL8zc*N{Oawvlzoi8$sTD@z z59OEaIo?#?PR}*)bi<6k;43+CPu!Dt-pr~ zL(3yVO)JF6U=|Kjnj5MBHyN^D26?>J<*rj3Q+%{zRf6;5pk{)on)<@NqUC9oiDEIB%pm!+l&~( zybdlX&0})B6kgdMA%(6q@Q59usCHaq046Do^e{5o;H*a2iFemrQ+C zP4>BHkS+Yi43&hF{iaUqKo5GM3Zue{Y=*C~#!VwG`qdltZMMK7aQVikkg~r36Fb#9 zSEFV$Q%*`-LF98rr24iY=`mB%2mzRrs3g?vdyKC15(?J7=%syZijQ!{IHN`)J-0?s zsch+SoiipaefWgO!U$h?TB1BiXNc(yMmE8I^Lz=7=tEnxk{}h(V)FHhK4_|{Lw3DzPWb?I| z&T=pQ)Kw+!;+we`nRG{PQ0T&|bDpH1q(9K-LavWVzt~Xha|NM^<3K-9lgOs!@FZsQ zQxnn}{Y0MVlV*PWi3r#tSM8=AxHM=@8zWdUS5FCWMcRl$`5lu#@p~F>L)AHKj|M~E zHhO-{H0Jbl3p}-_WHP_oo4$)C$ zBu|-Yk89i}gx8&tBSmviJ6b7~?An{KKTE)&=u5odYiC{emucU7Ev8dCudx(4@#>^JXxW~wDbJD41nNR-;sc-9( zoG{Qi$DAv3O8~KYQcNaU*E)7UO^mXzR%Xg+Iljse?rYc&{8`^K!sZJTRj&3$Jea8{ zPvI{k0$bw78!>%OJwhastEpd&ujZ)ZU79~_*0xM2nPIMm9;>I&?)zvzEiNFDdUz|` zJ}3t%$BQ~cJ+77MW`#YOcB2l4QBTjDv{lz3+zQ7x zUunZ+BE^|HA@M3Eb*IPJJM`o*|h<76p- z)9AydfSi}ch}E7&D0JcTVAKdk2&{Y)_u`r7aHiUf!KM6uAeoPsPqBB+rHyNkM2QM> zQkEgKPnjaV{p`Ur6{Tc89vt_ObwnR%%Rv&ubn-EmUl*-CjhS|%-^kDJ++U8+u=TCY zs#{y*6jKB_{$)-Bam~6L1q;^=?%bc`<^@@bMsvg&W19hUPEB8;2ha|mJIxAMSnh%f zEm3YOFT-G4N8_e^dysDQLQS6HI3|*sI9E1&&~h88W6j4P7jk0U`TPz)`SEv-$|c_9 z7%1FcfP2hd(|iI#`(>wtDUR%%?jduxkI^!errTl2CI^%^CE^}tIu{q!_NM(UdfHQT zyJtC?YQusB$^n@HSEomW5kcb_@&>Wm4KAyXj|)G;OL-<9mrHAUe3(t%Pxol|8Jvk< zzcDH$dJ_M-6Gvt|IBctZL0!?5W|dAtHbm+4e2Ry@-EZ9O_12}mv%A;D9fgtntM@%$ zT~Sdsjz1ImEM(!n*pUMd4*kzcw~{8EyfykA_6goC6AckuSd`B*eNsPIO{R z;LJj$sB4UEA2;U!?w75r5->j@*;5;AWUd!wIEmVxW{>EZ;-x^=O!kp%j=SZn4Hf&y z{Qkjz-1vX~oqUorsk>y~h@}m`(~Z_`bUrH=EmkOX%2*Zx)Va;Jsp(syhoO5kId}H$ zlTaLtRs3YS-6^;@=%WHtm^-? z|LH4cyv5wPw}51gB?8E!hVXraLm{>pJ%j^k>g>ncMLGSW64dghybea^ZUI$e0sd1C z2T9;E?VB#Pc@3!OLfNp=O6Hcj;g?m;XrUIm@>TiEPq%Kl(4cQs+@M2k)Jkqkf;u%b z8XZeY&H)&WCj8e2w_o_T|0FduuOQnCE_Gh2`IS9G+hh|Jr0NX}obCY`S)D{nG!~;445OOp!9G%qQip*wf}2bh?~l z*k>sdL{^H*>NO{%trQ2XP5a#c_rdMP_n+iWvgRQ(67`^ovvdsWVg+l9@tkIE-zg7z z^3gtxaYearYu5{@zUXz2V#u&3Zhj@2j72NDqOi1gOVS!InpP}b+!{x9^LUaaIB#*Q zx3mUmQ)h2h7&C}6)^L5uLgBW=Q$SsQqft1eO%DAgAc^4gnq8E(ocJx$uFU19@esCn zMf*~1Nu;Wk#LdKQ)hA{>_6fT?N5b?xB1~G;Rp{nZH&$`BbnhC7l|QYWO?qx0@tkZ- zBBzC*$do+9Q`LlLp?8m4ba^UV0fC$Q|CHBJZ8~y|E#st@NzC=d99W0%!!`cXGQTEr z<1c?8H4cpJ)3>kov}?V;2lB+NniGe(|6{fvXX4-g!vFh1PltRIb3$e=@#Ax5G)WjQ zQsKupzW+c9rwtIz?JnNujX_IX%7A>4TQt+%uiPG!uF+Q&XQPkNR@I0Lz-iFH;p;_Dkr$4xh?zs#3b1`WkiZ4gI2eE+~gs(C6*6UOybMeNWn0FT`ms4 zHxsl@?L#oDPvyTKwQ$+{NDG-7QP_gA#Th zu}^FhInLhtDBQpCm+zEBo!aa;q9%XR^Su+L^5{O=UmBRn*_Qafk=kY>p!t?+%oz5} ziw38{<()dgO{pywk!?kpxDRWCB4UFSUH$PCc-u+g)IsrG+o%Ek<P% zNl1}O(pYQux%h06j%u*dIa;1x1RFs%d)DjP6w1s~5sGq{8q`!`b*YO*NM{gf#P!v# z4rt*%3HF_(EPle@3;8EnH*bn843;rMG(Jiqm(wos(n%FfRMs7s69ay`bF18*Zg{l| zw+dJgs;oVFF6hC>L5av;7pMjqH$`@@BNGQ#TAa;2=)kPQz70?xfoogo?K|;VHtv;m zzNgXz?UWX<&QRKTzHMJD#2QROw)%m0m$tFji+G5w#302zB-O=#=D$JTmRWX?wS&(B z%J*kfedbac-k#d8U~tI!GS7*Km-v+vuD()=Wz%b@tXu+5gzs<8wP{wa$qAoXi;pbN zJHtXBPR2!gl26Lzq{oqIX#&nXy44iqSMws+i;A(P_~xpa`b1CmOy1WYiK1>0F`>1y zi1Dbhe0uDPeJH(iRnKM}0pS|)pkKm2gop6sdP@P~J$9u9uz!Ra)Z$OFx-MU0KD*Lt z6MuY=AT^3c8NJ;_Nw?e-Yv@~?sYKX4o;i?aCRb#DTSPm&{n*J&DjE@VAs(4fPR~+r ziz%%G$tyqR1>Y~yU|gYhl0_owoA%EpSCgMC8(v^;Y_qxv-LyApZo#s5KITBzxXmVp zdhVgSaKax4w~Jd4>>SkIV~ZRaS)waSe$D`W>k7}o_iOPoW-ljOdSYvvI8=RjYVkit zRusy(KQ44dLmV75awn!xjOQ8mD+1hyx zs8$cJ*;J6$8&{^h$V50mrza#kqmL~v(i(=>;BT3m!F=S+;lPAW&WxbB<1^!dZo|H9 z2W;@BGx5Ch?IJ5`rq$xc>bVcn0JF7DyZmB&%NK)|=wTc1xxRX)pvZC&B#ChHX{%5# znnwz+ZDS~Mx*^jB%C7RTw8n#a(oeU!Y22k#QM`)vL}SB{G~eq@przTB?lG-)An}Ou zEV)3)`Zrs2XiP#U>(f4p*Wjt#YB=m-7eUC4SM2(_tk zgsgYch`q{qVvvZ3NHEA|Hl1os1ACYTp@XXPB8T{=%v9t@`C+WQ9DdgR9sx8q^urt_ zX{V@Dok!ndB*$i`S1vQupYA!<kiVYNQQ6FP%g*1|jM!51*oyDjVXYU8M62_PA zSGp@WV$^8z5b2xcmpIhosA|Gb_|eFCA7}#jzA@2y4I%2PiG81VMcMN;xP{f&6lJm* zLhKrpL@G#eeT~Es?B|G5JGmu?N~h?bMt}-?=5^z71`dSf?O*=a@Uk=w^~E+v3PE%H z8Z%))$OGw4A6cmi6BesJ)qZ7i<$lJjDZ8-Va&sf_2uFlm+)m7rVeT+!ckwoq&RCuKj1MhL_ ztOmxWpBDFR!h|&}QFo2z5Xl*5%1)D~xbxNO4HH2%;_vF4)F+g--JXw7TbN+vxN|$m zffTSR$RfIIKxun`OUb7FoJz{EG`1RnXivBTm@dOPsw33ny|3$f%_KJzMePj3bxp8b z-zHC17-!NAxiJbY#OmJ14*z~FP(3>YZmU71br%qJ|a-@@^k|g@J?2BjBNKT&?7UkDFzkcI? z{NbLU7HWl&Jp*Ri5$)6|!h!D{z2UZpEUj&n4p);Wqcf!CUzvL2i9+&N^BxS)7-MTl zc89w7(XOCNIfZ-kz2?F@$NiSWVQgK2&%T24cV%+-P&n>Yb@{u~rW30_}y`bh4JgXjHwT9u5lZTOpi8J`6; zi_9#n6*^aN;AWwf2G7LbzVoA!FOvHAVP}uMX(Qb0Lm4@=uHluQplQQ$EC68j_*ZoK zP1#EPDHpd9=L_hhGa{^mVmtRrH7gVNzCiK2SdU!Xg?*l|X0W*1USc-iR${c?ZXl1{eTBtRJ%S4s3au5l-rq^|#!b_=2 zsZnII{%R)up)D&9TL^>kU9N*KxIO(~vSm&Ru7m~S_E5GPaNi_q)g17ZJWNthBR@G5 z%f1Iq?uWb#)?nc)f${0#k*E9Rn_6VGiYu|S`0U79u70C;#z{I!)xrO3jvjmgGgue} z+I5`5E0GH2;?@u$85*R&fuLt@m%?Y^=LbKY-p{3Q{ThD9#Ju+9N#1bQbC?j5+;z}) z7@UoMk{}ttIezBJDr=Ld6%z5=KrXk&&fJGCPVATj^H=BI88!Nc7CeFM)+(Jg&IxtW z(AO&G!D*HZD-@e=vd!+?BCp#w5`6`UI`B&!=02ltOr+%FyXG31l~NOrV@kBP`jeTm zV`HvqD6`$R?J-gy@m>iD(1BBUOrtw|z65d{mr*Pi^G>YVKo=Sev?XSbKm*s18yk_SGf*|81S!k}S88q#Y4J zW_2Hu(wOFIY~TOgc6T(AhCJO>nLxx|ga?4)tQjw4;?L=>$^_!a{c{dg24=hXad`_PGfePPacbtX&k$bY??vIK zE@f!ZWgwoH;fxR+0i;ipH z%CaO-3l!lhq(Td!@XQsCmbb$k8r_%T^@+!YI$*|>zL^R<26SxuwVXOo$&!HyLsl}P zWPJF_)JQ0P-T*;}=mVob!o++44PH5ZE*EEuGZ|@0-x$K#P!)3G{v=E#2LE9V3FCFW zw=LU*&dzlhI47Bvl_(^m5}+urw8Hsf8*}7c-rfPzNAe*$eO?ErTiJ{XsaJoX~KxM*5r2HTVvPOp5wx;jD!?uzddfBD`ppm+!K z&-jyFA8SiaEQ(gq@&)jOP=qQAIgg)$r=P#Q`@Z_L%Y9rq1=LcYoF#MIk?{<6|=oX``dxH`%U zDyYJ}N;jB74UbMq_DIAu5gV4VRGL#ef##Uo1f#KgkuS0vJTVO+5ubQD3BhTK&yh5- zGVLse=4b`liAS&sJD@lEi~begSU~$8bDG*P{p(IZiBz0eQ7MDRElY{Xou5L4$Ww|P zZoS*aV@lGcZ!+cx?cj7s2w6vFCrX7LkTb&%I|X+!;) zfoDE4d}`B^d^NmY6k4ynsjM~U3Kp18zc2bo{LjNtjh(JlUi2Q7?nYICuOK6&^wk9a z`b6#c?O(jR_gzo)6;U6y^canTuDDN#L%(x0G#}ps^1yMD232z;K;lTjQ1lN-h2Eqv zMO;XPgvNOERL(~3##`%jN^ZR3`UUt6`V;lV*rK>3OI|_hD@S^I=yXQh2~6;M00r%f zOnl$c*hR?&WIdKAX3#MN8#p8A--ACqz$MzHu!1&l+?$-#)>ROb&7j-LnIz9RUS(}F zmc3zf=U7RZS(Hh-rb(ls5^wE?kw&Iq81R+YTD zWHZ;3-v*R8^CD2q@{$dSQQ@#Zy3F{YuY%uCeD<`?Lb>m^xNChp7 z50T2TZ)vNgwr!C0{Mj9EbS1hpnsdZTKGLLrbUJ&evL9Qg5qI;sK<;}hS%;S3^gs<@{C zcV4rzmW%&KI)&n1(JP)O2GA;Sq24K1Hf9ZJ<+P1iU|=Ss=NtmrC|5^QR^2m);d!DM z{*s3GS*NW+x}i*~cLKU6KiE2~=MjdtwLrNGX5=)h`wayeu>;w!w8(&ESxp zxuPRYEo5jams9gUTAcQKNdf6D)xd7RQ=(q2ql8W{m5HR1gk>??*a3WfKq5&ym8xA9 zNPR~z#A&42Gqk(#wheF9$<|{WA_@oyyd=9}mh~nu0W6lO=Oh z>r0G49Tn)REI?HTA9xBPMhaG9+EcTJUTa|BE&y<(QuV>somy7b;5ys?6kLYlC~YLZKS zKcPSH0U*x8?3*R`tn$h{S+JIi*`l8)pEwmqgEtgM9~c9}5lOR=mOfGz5m7>Okr{w% z&WK{>Veo6&8bd`_D*Azz!k%htQpXGnMX$Ndh>*2ygBwS8V!k9WRDkhh4=4%*T9M#5R?98ccEZ7&YDI0o=D1=J(P;3WdbR8SklHSw!p+5rh zx^<{gCeD(YE5n?-UxB#E$!>fHo@zl$dhoD}efQNiWrPz{Q4h4poyMk^%`0LUNnWhl zXXG_tviQccAYSyYFhHg`_~!{NWU_|^o{R8}88{mi0#TGGgm56l(qry2Z(q=gP-k)G zIMMy5PJl+AtH5abm zDBr-7MQNngPJ1*etifX}Q&2j_6XS_?v%Z>RYeeX1LqDN|3PsVS?HPpvRUdEprz|NV zFa3Zwj2ku*kv}MZiZ$F^x|LMO*MYUH=7%2jmcAJdNX)IA-b8O2!|5^5qZV{jEZ}$u zgdV>G7t0mN?K*8iJ)eyHZw9D2bTTF1b>ECdo-wpCW6yl^xyRRk5DPc|tu@-p!qLWC z0Ndo6==LPVj}(=t&VBpHnQ!Q#k8R1?F@mv`6SKLYi%qlS|E|hN6`DvA2xpEP=mm!) z(`pOohHdd}WepsCgW9Vs&RJP{Z@4wZf$*OFOVxn&KQ6pur#L zzvcb^Lis}Z=DGtZM3V+Il!{wesQeTtpdBrIq`EOfVFemD9d7A8 zJfJ_hYlyfl8B|IRp{2cjOUaGXw&yDN3hsHXH^L03z=3ma!Amht z)GK2(lEDZ?2lR#d4fI7Pjs>JAJ%OXlu~f=29j`MOr);$Jgf)Z#*Ecr?fsHejZ7Lm7 zEEUwd z!$wffbvVv=*+~Lra`Opse120OS)C{Y$=rYdd1zk{Do>O95?2eVthAAGzflxCkz|&c z0A;E{H&Jj6d__r((VTx%D>AvT$l7bS|5nbSYa=_&8p~yxkz?f4fFs$wsY{E{uIDe1 z7vv|(7fRxmRQY%Llnmg8+)FOf3ogeomK;2??Bmf7u!rX>&f)R4lONGyD#USSrW$Wp zVBASEj4+6v+MdCicNK(XZN$wM#kwo-VAQtffTaRQp`f+&^=^-uh2zV*X^)xpU6<^*s=`o`XLJsm~n7-^kv8|c1W+_O_b=~fAu&6W+pwgb=IlPbJq@S<{ z?jJb5pf8lcsNnXE>fE806uU?0%QRB8V1R}kLsnc3FSi^FBaJKs>&<0;y8A=vUenSb z$=flkM2V@+ut|fg5QQEo;oPFtty8MNTWPy;!;coi=8`(fs2e?PgcE5@oN%gtBQ^1@ z+!xxB&9)k8Gjm!7AjBW4M!S{>`edF)4n=}(V%}Bqst?1EG^nRzB>%)opke$T_+wOH zR9In+?g?@eUo!@Z4>A!oyk@$2$N0PnT`y4B#j1}9xfO`G$etF{vS{I=sJND@DO}#u z5K|LOG9TPn&^94Fqu)tLw}mx^EaN;j{HkvmnkB!9X#m#)=L6c%jWJ;*b^r5W?FZ1% zGFIbhz!!e|2k~3T7GinO96HeAAhb7lN!YuB$YL`k+o{>IzUsY_ga0A8Z09{jX5 z83mf5ltVCValijG9D^)aWi{@tnsJ#ptEo_DF-|?GH$5gw(y(`tD^ zl>@0j6(IHT!M$3f|7k#WCYhG9iB7kqVqn8vr4`-FN*S9J2?!yF#{;#&1UFC$PNSZQ zqvDJlhVY$^PUGia(NFyH50s0$Gbn*}G!L%A_}{!*b`akyka*x>MrGIUFqSy^p2 zU&4m*0XVHWDuhc1@sm?aO-;3MHA}H~=k2`q5`{MTaXnHm zXM&!*Z_V5T@|KhpxhYCua|Smp6`Wn(f|~Xe->~Tu{^x1M6i_e{J|_gg9hAEb$7L7| z`VD-e478DtZwChYhPQE9qdCj>Z3x@n+fk#P%k2SE^vatW4Jk1SKZ%bO^ef6KpQYih zpBNQ(!e3Ng8F1%s6x=iwSVs>>m>ab6=_gEG36t0&zSDgyOE@{Z``E+(NufE%#w^H` zS8X&U8Zq`YVQ<13eK=l`a+N_^v8=^5O0&%2E5NJ4{tb_xs5dkZGfQmIRbdzE$Q^BN zzL?%Tp%vM{U>gvXZQ>bemRczsx;oky>Ye68XC8W#)WIi=WSTvUq>TJmwkSpZSP!&@ zj|a5nj5u1920tJ-^aZ?7ZwOEe&78E)Z!^~TSMD4e1bI^uvM@4^d!A4QYtrv|l#;$? zsKz&W?BVD0<~(sffDg1Mj(bV#kVSSR6h&nsX}DvaV!`VLc|r`A6F0x)(6W*UOK8Tx zB>GV)*$k0E6l~$jnEq)I^omi@^P`gsH&6u_s0QieSgNA73*I(G@hnv*Ik}{zEy>!; zT=%CikMiCNZV5J$EK>UJ1=Uc6g+#b&9BUSSYbLQ-5=2JY(9)TS+~)Rz=K~MTJ1$qJ zCg>G+M67xa@ApN)=44-RGT|HvgB@lq6zyqcp6N?rhH}yIIN|ekHpDqajg?5xP{7u4 z^zGG(ZIPfJI2vkMOw2fmdhDtiXUb4ww|(X>g`7koo@}3jq1lghQXZlN9h02wi-ca% zGCNav%M6!yg7POII&fW{(Ad#n2l|Qfg=4#fOM^7##F#P^t7Klp2u+uu3>*e`oQ@-q zk4E9s6g*E#O$?XDoHc$>o|68e4Jo)BFPXtgB16=U^3taH)KT%!;2}i9z zWwUCGzorrn=!((chV#y3ltyxaC?r0Ly>Tprf<=Ufr*20w>b+zp`7o;bhA^-vE=iv- zg+h_`U04yVgf&o&I}biD>x}TRK|g&>1uWeZJ^R|f7#dI&IN%3Hg;YkTP189iLJoJl z3d(`v@QT-k^NX-yPZl(k|Kt?iM7`GwUNzV1cW%m}B2`$RUpl%%93wvS3LL-}@ROtY z_JRylM^)jRr^q6@1l%gLF}z=Rk5VKY*U(HSUr4`_ATHt8Gh_+T7DmQ1S*R038LxFr z(2xTC@GH%4iB9(XCM@H!CDV{1Vj54_lj*ZX*9|t88#DF9w?@t1mn=S+={08q32R~S zqvGpVjD{co4Y^RuV%Rfo$llOhp=R+05u6XGLK0a+^<}4Q!P3nbUrk8fJ8&01od;+k z;@ue9yAA7t4K%V`qe5dHz!teA0ia9@SdM5_-v)Xm(TEky(dlKyJl?>lcs%eh1`}Ei z9^_8#V_8G636HseM}-!AA5g_Fe?aeCqDK*~7#aRPQ52zy?aI;qai`EDWJTe0HHuHo z())7I4D|7ZdcYqnN2~qDA;TBFK5EDcPEn+*Kx*-PW`uJo!Z`se< z^uJ>|niWORJCi!+%w$ax{Lj2qDpD(?kQrtLeqbCJA1L3@Zw|%xf$ZwEJjWsaRuj*^ zDo`7AvSs`YB^%Pf=L!D}A75xa!;I}sj>|DQc&8TyPLzU{p87-vqt8RvI4Go@UkSPj zD?JXbPBoW4GkR!}kasCOlKvZ#^3jN|nyiFU6Z4u=9r}~T8|PUDzjRNhm~9be4%m@Z zU(~4g`mJqjVP_lj-LiXx;_Cx&{P+Xy=B76OigPDInd0+gI$(h)?gKBNz92WBA{|V| zR^r%#!DF&c%4puB3yHmfztXR_Xwd(LKevX&xB0iS-S^B* zSP5BRcJC=D!hM|OmlnS%ZHsS_)%i0xB$Y@dPZ`Ms#bH~(rmhFOPApFpiqV<$jnq3g&LxTDgF$jA8%r-j z8_MbrEpZ37{bN3%=bqeEBY0v6zAF5I&yL4UrFsXO_^6+QJUjQh?l8f#q6TBj(%!k* zly%x`W3= zBAnk9!CmluGGb8-!xMVG9X#{oo&h)vOwMU6#&+OgjT&yjtKy$O@Z*K!`6lAf8iaXB zqkB4H1JM(gP;eAHfWu+^ZQx5NKJwcY48c{P0bX@dl~_|vV_hP}kgv)RG-o6y;=VUh2Bct;Q)MC^c2k)8(*-l=z$UGFDwfvn$A3o0}Bd#&fAjoc@Vm zSJAv9xEo#t`hxb{hHOX9P6qaEJYNgi3~*2L@syNUS$gJY#ovF$$BpAfQ(RM6gQoGk zD-5`heuK_aumNYVCq}N&b4^x~E5@N-T(1?q<})X2niQ@b+4fDb5g*h1=~?wj#+*1g zo6+_Z<98X3dsGa86+8u6a9Y|qHZ+DPszPe61$_gl|BtI_5|E~*Eqdh#Rwx$V(qzuf ztid=<;spp#Y>1A^c(dlsa7f=k53|>@RGY^#{w4V1z~c+G)4n(~(Pn9aGhfzt7u>}$ngY%#UOw#sbTZtbzu`y%R${qkiUgB2E_#cGbZLu9RhBq}M)XQ^r&b>T1U7YNl+# zw(HJw-dB6@oAS_#T2wI#o|RChxrhvoP&-g-+Nm=G({ctHDi0r90Fm%ETOu4mugto{ z_H@qCGu;<0OAf#tmvMVtrh;wz*J-Z$6NK-7EKE)D{fRHfzkQ(&g3QF%o=S4o8RO|F z?oH7P$`dZIG{n$&{fYJ)aH2Q#3~TJd7qy0xt~w(rrScMw%Y6tXO_o)cB*$13-m-Yj zO8{vN@hc}4(+*}Fhllh)3)C zLfTT54TCFn%RHPM)i4At55+hh!U7g%fGJO>uccCI;VHN76-6L7v{TDj_UCW&c5wwh z_sod~z^_WU7_EK>m@f z76hRP>Kwo@+#U4={R8q7xE7(T2p=zI!%YiSnx|W6oHTcQ1Kp__3MqBmjSi}^2_Vv} z%?|hj9)|ZqghcQa=NRp!_|L!L-+}tYUu`x^L7i%Yl(^`pM=%Gn2^2v)sISqoft(!@ zO%yN$)==+*>Ji+iK(idC<}VXl6(Z1-r)-ndBgE~gDXPJ0=6IHm%tzWUcjsg+NKZ1O z4YpNO$$FGw-M$EivA76raA0ExaNnpew441v9q{ysq2gI^bktP2jdcC%gyv2gwZRPC zF%C$@kFVSsR%l&(irAILygZ_N)M)4R{KV$+)%D~zDsJUE^BEH+Y`Ot7TT%W*&^2OI64){oRiz#G$xk3L%gLG6QT$Mwi z3~A;Cp7l?>Ig6uMPz7iNJq)4!RgRVVGcwK|9Z%q&zv7nyJhPy8E^0$M!N|w5U?+jM zXpTq4(a3W!-^>+G8Q84%Dk}WI{ekPk#}i_?R@ltfHb+1up{-HIgrhWj^Ra2iBlD|H z!?V^a`UO1Gj~m0yni$~1{2RH6W{Bfbk`vLLCA<2YxNX|&c&-h&qgANl znAkP2_ppE?b=-#U0iX(B^%Gj)*V{;~rh^63Oos(vl!8;xJWt-TK)FHt6Qvea1hqv3 z74R%L4aXO1PyF{L67(&S(vqiXo6{^PqLJbjDJh<$;yIZXMicX;pA&tL@yi8|$U!Vv zbU1_JNv#Il@R4#6rKpwkvVyy%hczCNN|jOg({E?NTF2_`O2&bitU&K@CfEV5`2FAU z^MB#vKXLva=r?r)aR;`N^S+!^PORdT(9+SH-+kFqWMY6ANXgP5C-f6`;A*&)sm8bo z(~dDn&liA)#aNX2*muUafJ|xV0>3HB7&GAki(^L)erC_uff0AYA9(y1+Te*BK5sXc z#CPSIA_iR5nMNG7>rf)y`QzD2BlnC0WXeX=T7%P$D9wl9Zg9isI6GzDcBCJmEPK0c zLV>9p4VR)$D+`#5yuOZnNy4>UHGS^)z*o2zJ5i(YgpJJ|AE*0T==%DBLSiA)mX%$R zBr%5-ZDp{<1d&Iy`UvshAcIXaGY8YfYbY0_FeD=CepB8jQyD*6)@hzzs?9ohPc%q! zVM~50DzJ*0z@iwl#D?g8;Q9}=zv1`^`5onn>ZlR)>2Hd_x#wScIAzxrrcKHRBvA;B z?xJ$SPxOX6|J(rg#Zps(p)eufg=dXtS2m+*;{l?M!!QgN(5_r8Y-+{b6z`e$5!LLd z`0wAKj{o?_y3?4-Gc#v}rqH;-Dwtpw0YtP27fLw@RY)nv>}XTi32h1ODTLKUadj8i6B<~_isI;#d4{*1 zA$BXFKwc6TTcWfPrBRBSbfo477&FbtII^58up6)kq(Lso3w~$R?(84z%>X6JH6$@g zb)|1ex}5xmSbEkBexvs-_AlZkLu;Mxun5GqsiUrNq+2>)MUHL<;JATTBxd{Ohs;hf zejYW9f~puwN{=i4@f&{W_}lNvZW-xaOdox(P+N^zw5qgg#bQ_%TA`#Mk3P=|wCoV_ z9xEFZdH`3&zdrEeh0hn;+;!C0!o$QN!cfi3PG9z;iFBBYT4b=00|Ql_tPUgB;M?)D zpmmnrQrQBI+*vGs=svF~3wW=#?Zun{>*0utXmd-uel(pj2a(EHn}v1XK9NiDT~J>{ zZj6i`A^xOOtYKxVzm1tLQ-x6qq;e%b4z4WZhC21CQIVRo6rt?EB^IB3y0ubCCxW^8`pXYW9j4dHGy?s!Hpi{rh)G4UMim1Jvf`! zFU3c}*&ze9qu0EfQp6Wq2CgKn|oAw-SGbPP(?ED=|c`bf=2cJy>Z+w$f| zA9f$OKbS2S(E*-kkJ}1#37zT6pPaJof?9D@=z&o)4$vSM^yX?JQ2m;Nzj#WxubFqC z;dZ8gAw_u6J(rw2>4AD;oUn#oDWG2*9uPD=4%`*eVK3mqxR;1%ZU(|KI`vd+bMuV% zP5U`#y9@lL=#B9AhJ~5XiguzT{b})9v)zhO$0hj3U+`~#5L%;3Jgw!Y(L2;OT6*L{ zq<=S}S6r%;dQ3FUh)dw!P3%(lkCTc>)n#4sd(G6peX;socF&PBYV5NEQhi)f;CGjf9 zq z;a%=N2@#=LqKPrZ6e2nEP2Hr;5SF<_N`P0a6mP-vfoB{jPm+IT?4;)7-t$123uE?X z7YlNp)HR(;zT}$~-|JwAvekvmma|i6K2wO}Ll4;Z6#N7)AQrTqz~@?Vexm(=7xWA5 z8%Q_coOZ|O80aP21TBj@l(LpsVaf*1kK~-L>=(Ur&xP#nV|p9P;VAJV>r<2#yC}Va zbopIihT~%Lz#NjS&!ocAcshW);92maESOiUv5VtS9F2>VGE)~~N;tN#w*;ZZCdeI7 zSfjhrZF#k-FvY&l@K#@1m!6%22II|Nq$ffThTaj3#e+rHq9O zu#{$vtUAIG%5PQ^mQ&t5$0e7BQ@pt2z{Xrz7-@|m`|AzYiT*&nNSzpta-&`e61Pn& zAxSbF7{;(#DbSYHazg$_xWnw3Z)f9b%?ElIc7zLj&0o?}uGj^7uZ$xOC_=tcp$(4@ zoS!HMdcml;3-k|e?8~mkLE_6tnrYHNTvDCOBd74b>jvpO0+BdK8ukbMkbF^{Qqx0G z6{n(N8%kufQ5Rf_*8?9nj*HprvrW{2TB#bEM?iPH1SY5;3^`s==BVyWfS5MsA!K90 zc_z4K)(OK`Y>X!myd@!+U2a(xN8hBBF=S-Kpe=QfW`EE7Bm?|xdm0#8>S6B_xbX2! zdK|Go3l|0x;DA@i;M#8Hqs4kY{;C0AuX9Y10eD?;9ng^GI%mB;H?M}P;K*k#oO{%G zC|biuMRklDD7YP$LQm+RWpRaymaV083VtGYHq-%xA{ix6BO-XGD?dBJ7^+Bs4D#Kw z-2b(LGcBYu3fl`4enyUBfB(QS@G!`WLMD1FBAM98n?RznhN2ib3$zhSeh0p(Af5Ll zsdacWrtJw1adC~D+#vy`(w74Zn}yA{xgPtgTr$LmKz@;}KQ7`^ZHxQ%u?-34Po?>< zPm)F1LfActi?)PYL>0|azPuHaur)pkEQn{nA?ZG6noH$lD(P()V6!0!=#Ek8Re=+a zBw}yX z8*j)VXcQS|HwN4d?shVzMNsr*D z@$-x{)NMiV;p&oHN8ANHavgzs=UmTGv!#Zuz=fh5%+(Cuu_=p4IMlA*@eP>n8;f_= z8