init
This commit is contained in:
1
minecraft/shaderpacks/ComplementaryReimagined_r5.7.1 + EuphoriaPatches_1.8.6/.gitignore
vendored
Normal file
1
minecraft/shaderpacks/ComplementaryReimagined_r5.7.1 + EuphoriaPatches_1.8.6/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
*.zip
|
||||
@@ -0,0 +1,103 @@
|
||||
Complementary License Agreement 1.6
|
||||
===================================
|
||||
|
||||
0. Terminology
|
||||
--------------
|
||||
0.1. "The Pack" and/or "This Pack" means the software package that this
|
||||
specific license file you are reading from is found in.
|
||||
|
||||
0.2. "Normal Usage" means usage of The Pack as intended for the general
|
||||
public. This includes most usage, but the following usages are
|
||||
definitely NOT considered Normal Usage:
|
||||
a. Redistributing (parts of) The Pack
|
||||
b. Modifying code of The Pack
|
||||
|
||||
0.3. "User" and/or "Users" means people that are using The Pack under our
|
||||
definition of Normal Usage.
|
||||
|
||||
0.4. "Modpack" means a modification package made for the video
|
||||
game "Minecraft: Java Edition".
|
||||
|
||||
0.5. "Modified Pack" means a software package that consists of The Pack but
|
||||
with the code intentionally being changed to differ from The Pack.
|
||||
|
||||
0.6. "Original Pack" means one of two things:
|
||||
a. If "This Pack" is an original Complementary Development product,
|
||||
meaning that this specific license file you are reading from is
|
||||
found inside an original Complementary Development product, then
|
||||
"Original Pack" directly means the same thing as "This Pack".
|
||||
b. But if "This Pack" is not an original Complementary Development
|
||||
product, meaning that this specific license file you are reading
|
||||
from is found inside a pack that was created using the grant
|
||||
detailed at section "1.3", then "Original Pack" refers to the
|
||||
pack created by Complementary Development that must be mentioned
|
||||
in the description page(s) of This Pack.
|
||||
|
||||
1. Grants
|
||||
---------
|
||||
1.1. All Users are free to use This Pack for Normal Usage. This isn't
|
||||
limited to, but includes:
|
||||
a. Using The Pack for gameplay
|
||||
b. Using The Pack for content creation
|
||||
|
||||
1.2. This Pack is allowed to be added to a Modpack as long as the following
|
||||
conditions are met:
|
||||
a. This Pack must be visibly credited in the Modpack's description
|
||||
page(s) if This Pack is enabled by default for new users of the
|
||||
Modpack.
|
||||
b. The author of the Modpack must acknowledge that any problems that
|
||||
may arise from using This Pack in their Modpack is entirely under
|
||||
the responsibility of the author of the Modpack.
|
||||
c. The contents of This Pack must not be modified in any way,
|
||||
including simple variable changes or block property additions.
|
||||
d. This Pack must be added to the Modpack by using Modrinth or
|
||||
CurseForge's existing systems, similar to how Modpack developers
|
||||
add any other mods to their Modpacks. It is not allowed to
|
||||
redistribute This Pack using a direct file upload.
|
||||
|
||||
1.3. This Pack is allowed to be redistributed as a Modified Pack as long as
|
||||
the following conditions are met:
|
||||
a. The Original Pack must be visibly credited in the description
|
||||
page(s) of the Modified Pack, with a link to the official
|
||||
Complementary Development website.
|
||||
b. This license file must still be left inside the Modified Pack
|
||||
without any changes being made to it, and it must be updated to
|
||||
the latest one found in the latest version of the Original Pack
|
||||
every time the Modified Pack gets updated to make more use of the
|
||||
code from the Original Pack.
|
||||
c. The Modified Pack must not have the word "Complementary" in its
|
||||
name, and there should be at least 3 character difference between
|
||||
the name of the Modified Pack and the Original Pack. Adding or
|
||||
removing non-alphabetic characters or the removal of
|
||||
"Complementary" does not count as a character difference.
|
||||
d. The Modified Pack must look noticeably different from the
|
||||
Original Pack in multiple common gameplay scenarios that must
|
||||
include daytime overworld visuals, regardless of the setting or
|
||||
variable changes in the Modified Pack and/or the Original Pack.
|
||||
e. The Modified Pack must not have any other license agreements
|
||||
or terms other than this agreement, regardless of how much new
|
||||
code has been added to the Modified Pack.
|
||||
|
||||
2. Denied Cases
|
||||
---------------
|
||||
2.1. Any usage or redistribution of any part of This Pack that isn't
|
||||
explicitly covered in the "Grants" section of this license should be
|
||||
treated as "All Rights Reserved". Only exceptions are the files that
|
||||
contain a notice that they are covered by a different license.
|
||||
|
||||
2.2. This agreement only applies to the version of This Pack that this exact
|
||||
file can be found in. This agreement is not valid for future or past
|
||||
versions of The Pack unless they contain the exact same agreement.
|
||||
|
||||
3. License Infringement
|
||||
-----------------------
|
||||
3.1. By using This Pack for any purpose, you agree that Complementary
|
||||
Development has the right to take action against you in the case of a
|
||||
license infringement, regardless of This Pack being the Original Pack
|
||||
or not.
|
||||
|
||||
3.2. Complementary Development reserves its rights to not take action
|
||||
against cases that it deems harmless or not harmful enough to matter.
|
||||
For this reason, cases that Complementary Development did not take
|
||||
action against in the past cannot be used as an excuse to ignore this
|
||||
agreement.
|
||||
@@ -0,0 +1 @@
|
||||
https://www.euphoriapatches.com/credits
|
||||
@@ -0,0 +1,82 @@
|
||||
Euphoria Patches License Agreement v1.1
|
||||
=======================================
|
||||
|
||||
0. Definitions
|
||||
--------------
|
||||
Capitalized terms not defined below have the meanings given in the
|
||||
Complementary License Agreement (“CLA”) v1.5. In addition:
|
||||
|
||||
a. “Patcher Mod” means the EuphoriaPatcher mod used to generate Euphoria Patches.
|
||||
|
||||
b. “Dev Version” means any development build published on the Euphoria
|
||||
Patches Support Pages by SpacEagle17.
|
||||
|
||||
c. “Complementary Installer” means the official installer available at
|
||||
https://complementary.dev used to generate official, unmodified builds
|
||||
of This Pack.
|
||||
|
||||
1. Scope & Inheritance
|
||||
----------------------
|
||||
1.1. This License extends and supplements the CLA v1.5. Except as explicitly
|
||||
modified herein, all terms, definitions, and conditions of the CLA v1.5 apply.
|
||||
Where any conflicts exist between this License and the CLA, this License takes precedence.
|
||||
|
||||
2. Grants
|
||||
---------
|
||||
2.1. Generation Requirement
|
||||
Except for Dev Versions, You may only obtain unmodified copies of This Pack by:
|
||||
a. Running the Patcher Mod on the corresponding source, or
|
||||
b. Using the Complementary Installer (for official, unmodified builds only).
|
||||
Any other form of direct redistribution is prohibited.
|
||||
|
||||
2.2. Redistribution in Modpacks
|
||||
You may include This Pack in a Modpack only if:
|
||||
a. The Modpack includes the required Patcher mod to generate this Pack.
|
||||
|
||||
2.3. Redistribution as a Modified Pack
|
||||
You may distribute This Pack as part of a Modified Pack only if:
|
||||
a. It is distributed exclusively through a patching mechanism
|
||||
functionally similar to the Patcher Mod.
|
||||
b. All requirements in CLA §1.3 must be followed, including:
|
||||
- Clear credit to the Original Pack and Euphoria Patches with a link to euphoriapatches.com
|
||||
- Inclusion of the unmodified latest version of this license
|
||||
- Proper name differentiation
|
||||
Exception: Big visual differences are not a requirement unlike the CLA
|
||||
c. The Modified Pack must not include “Euphoria” in its name, and there
|
||||
must be at least a three-character difference between the name of
|
||||
the Modified Pack and This Pack. Adding/removing non-alphabetic
|
||||
characters does not count.
|
||||
|
||||
3. Denied Uses & Termination
|
||||
----------------------------
|
||||
3.1. Any use, distribution, or modification not explicitly permitted in
|
||||
Section 2 or the CLA should be considered “All Rights Reserved.”
|
||||
Only exceptions are files that are separately marked with different
|
||||
licenses.
|
||||
|
||||
3.2. This license and all associated rights terminate automatically if You
|
||||
violate any of its terms.
|
||||
|
||||
4. Disclaimer of Warranty
|
||||
-------------------------
|
||||
This software is provided “as is,” without warranty of any kind,
|
||||
express or implied, including but not limited to the warranties of
|
||||
merchantability, fitness for a particular purpose, or non-infringement.
|
||||
|
||||
5. Limitation of Liability
|
||||
--------------------------
|
||||
In no event shall Euphoria Patches, its authors, or contributors be liable
|
||||
for any direct, indirect, incidental, special, exemplary, or consequential
|
||||
damages (including, but not limited to, procurement of substitute goods or
|
||||
services; loss of use, data, or profits; or business interruption) arising
|
||||
in any way out of the use of This Pack, even if advised of the possibility
|
||||
of such damage.
|
||||
|
||||
6. License Infringement
|
||||
-----------------------
|
||||
6.1. All provisions from CLA §3 (“License Infringement”) apply equally here,
|
||||
with “Complementary Development” replaced by “Euphoria Patches.”
|
||||
|
||||
6.2. Euphoria Patches reserves the right to take action against any
|
||||
infringement, but may also choose not to in cases deemed harmless.
|
||||
Lack of enforcement in specific cases does not constitute a waiver.
|
||||
@@ -0,0 +1,30 @@
|
||||
```
|
||||
██╗███╗ ██╗███████╗ ██████╗ ██████╗ ███╗ ███╗ █████╗ ████████╗██╗ ██████╗ ███╗ ██╗
|
||||
██║████╗ ██║██╔════╝██╔═══██╗██╔══██╗████╗ ████║██╔══██╗╚══██╔══╝██║██╔═══██╗████╗ ██║
|
||||
██║██╔██╗ ██║█████╗ ██║ ██║██████╔╝██╔████╔██║███████║ ██║ ██║██║ ██║██╔██╗ ██║
|
||||
██║██║╚██╗██║██╔══╝ ██║ ██║██╔══██╗██║╚██╔╝██║██╔══██║ ██║ ██║██║ ██║██║╚██╗██║
|
||||
██║██║ ╚████║██║ ╚██████╔╝██║ ██║██║ ╚═╝ ██║██║ ██║ ██║ ██║╚██████╔╝██║ ╚████║
|
||||
╚═╝╚═╝ ╚═══╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝
|
||||
```
|
||||
|
||||
# What is Euphoria Patches?
|
||||
|
||||
Euphoria Patches is an add-on for Complementary Shaders, developed by SpacEagle17. It aims to extend Complementary with more optional handcrafted features and settings.
|
||||
|
||||
Check the [official website](https://www.euphoriapatches.com/) and all its sub pages for more info or contact SpacEagle17
|
||||
|
||||
**Please don't report any issues encountered using this add-on to EminGT.**
|
||||
|
||||
# [Contact:](https://www.euphoriapatches.com/contact/) https://www.euphoriapatches.com/contact/
|
||||
|
||||
# When does Euphoria Patches update?
|
||||
|
||||
Euphoria Patches Updates Immediately after a new Complementary Version is out. This includes dev versions. Euphoria Patches dev versions are available on **[Ko-Fi](https://ko-fi.com/spaceagle17)** or **[Patreon](https://www.patreon.com/SpacEagle17)**!
|
||||
|
||||
# Contribute
|
||||
|
||||
Add **[Modded Blocks](https://github.com/EuphoriaPatches/propertiesFiles)** or **[Translation Files](https://github.com/EuphoriaPatches/langFiles)** to Euphoria Patches!
|
||||
|
||||
# How to support Euphoria Patches
|
||||
|
||||
Support the development on [Patreon](https://www.patreon.com/SpacEagle17) or [Ko-Fi](https://ko-fi.com/spaceagle17) and get early Updates.
|
||||
@@ -0,0 +1 @@
|
||||
This version of Euphoria Patches is an add-on for Complementary Shaders r5.7.1 by EminGT
|
||||
@@ -0,0 +1,469 @@
|
||||
### Last updated: February 01, 2026, 10:31 UTC
|
||||
[# Copyright (c) 2026 SpacEagle17 – Licensed under the MIT License: https://opensource.org/licenses/MIT]: #
|
||||
# CURRENTLY ADDED MODS
|
||||
### WHERE TO CONTRIBUTE:
|
||||
If you want to contribute to the Euphoria Patches modded support library, please only edit the files from GitHub. https://euphoriapatches.com/properties
|
||||
|
||||
---
|
||||
### What is this file?
|
||||
Here we can keep track of what mods have been added and what version a contributor used to add said mod. Whenever a new mod is added, _please_ include it here for future reference!!
|
||||
|
||||
---
|
||||
## Mod List
|
||||
| Mod Name | Version | Status |
|
||||
|----------|---------|--------|
|
||||
| [\[Let's Do\] Bakery](https://modrinth.com/mod/lets-do-bakery) | | Partial Support |
|
||||
| [\[Let's Do\] Beachparty](https://modrinth.com/mod/lets-do-beachparty) | | Partial Support |
|
||||
| [\[Let's Do\] BloomingNature](https://modrinth.com/mod/lets-do-bloomingnature) | | Partial Support |
|
||||
| [\[Let's Do\] Candlelight](https://modrinth.com/mod/lets-do-candlelight) | | Partial Support |
|
||||
| [\[Let's Do\] Farm & Charm](https://modrinth.com/mod/lets-do-farm-charm) | | Partial Support |
|
||||
| [\[Let's Do\] HerbalBrews](https://modrinth.com/mod/lets-do-herbalbrews) | | Partial Support |
|
||||
| [\[Let's Do\] Meadow](https://modrinth.com/mod/lets-do-meadow) | | Partial Support |
|
||||
| [\[Let's Do\] Vinery](https://modrinth.com/mod/lets-do-vinery) | | Foliage Only |
|
||||
| [\[Let's Do\] WilderNature](https://modrinth.com/mod/lets-do-wildernature) | | Miniscule |
|
||||
| [Absent by Design](https://modrinth.com/mod/absent-by-design) | | Partial Support |
|
||||
| [Ad Astra](https://modrinth.com/mod/ad-astra) | 1.15.18 | Fully Added |
|
||||
| [Additional Additions](https://modrinth.com/mod/addadd) | 6.0.1 | Fully Added |
|
||||
| [Additional Lanterns](https://modrinth.com/mod/additional-lanterns) | 1.1.1a | Fully Added |
|
||||
| [Additional Ores](https://modrinth.com/mod/additional-ores-world) | 0.3 | Partial Support |
|
||||
| [Additional Placements](https://modrinth.com/mod/additional-placements) | 2.3.1 | Autogenerated Content | # Any slabs, stairs, pressure plates, and carpets are autogenerated.
|
||||
| [Advanced Netherite](https://modrinth.com/mod/advanced-netherite) | | Partial Support |
|
||||
| [AdventureZ](https://modrinth.com/mod/adventurez) | 1.4.20 | Fully Added |
|
||||
| [The Aether](https://modrinth.com/mod/aether) | 1.5.8 | Fully Added |
|
||||
| [Aether: Lost Content Addon](https://modrinth.com/mod/aether-lost-content) | | Miniscule |
|
||||
| [The Aether: Redux](https://modrinth.com/mod/the-aether-redux) | | Partial Support |
|
||||
| [Alex's Caves](https://modrinth.com/mod/alexs-caves) | | Fully Added |
|
||||
| [All The Tweaks](https://www.curseforge.com/minecraft/mc-mods/all-the-tweaks) | | Fully Added |
|
||||
| [Alloy Forgery](https://www.curseforge.com/minecraft/mc-mods/alloy-forgery) | 2.1.2 | Fully Added | #ADreadedKing
|
||||
| [AllTheCompressed](https://www.curseforge.com/minecraft/mc-mods/allthecompressed) | | Fully Added |
|
||||
| [Allthemodium](https://www.curseforge.com/minecraft/mc-mods/allthemodium) | | Fully Added |
|
||||
| [Amendments](https://modrinth.com/mod/amendments) | 1.2.19 | Fully Added |
|
||||
| [Ancient Aether](https://modrinth.com/mod/ancient-aether) | 3.0.1 | Partial Support |
|
||||
| [Another Furniture](https://modrinth.com/mod/another-furniture) | 3.0.1 | Fully Added |
|
||||
| [AntiBlocksReChiseled](https://modrinth.com/mod/antiblocksrechiseled) | 0.10.4 | Fully Added |
|
||||
| [Applied Energistics 2](https://modrinth.com/mod/ae2) | 19.2.9 | Fully Added |
|
||||
| [Aqua Acrobatics](https://www.curseforge.com/minecraft/mc-mods/aqua-acrobatics) | 1.15.3 | Fully Added |
|
||||
| [Aquaculture 2](https://www.curseforge.com/minecraft/mc-mods/aquaculture) | 2.5.2 | Fully Added |
|
||||
| [Aquaculture Delight](https://www.curseforge.com/minecraft/mc-mods/aquaculture-delight) | 1.0.0 | Fully Added |
|
||||
| [Aquamirae](https://www.curseforge.com/minecraft/mc-mods/aquamirae-fabric) | 6 API16 | Fully Added | # Added missing blocks and items and adjusted equipment materials. Also added Astral Dust from Obscure API
|
||||
| [Aquatic Torches](https://modrinth.com/mod/aquatic-torches) | 1.0.1 | Fully Added |
|
||||
| [Architect's Palette](https://modrinth.com/mod/architects-palette) | | Partial Support |
|
||||
| [Ars Creo](https://www.curseforge.com/minecraft/mc-mods/ars-creo) | 5.1.0 | Fully Added |
|
||||
| [Ars Elemental](https://www.curseforge.com/minecraft/mc-mods/ars-elemental) | 0.7.6.2 | Fully Added | # Set LabPBR > Integrated for better emission on source vines.
|
||||
| [Ars Nouveau](https://www.curseforge.com/minecraft/mc-mods/ars-nouveau) | 5.10.2 | Fully Added |
|
||||
| [Ars Nouveau's Flavors & Delight](https://modrinth.com/mod/arsdelight) | 2.1.7 | Fully Added |
|
||||
| [Ars Énergistique](https://modrinth.com/mod/ars-energistique) | 2.1.1-beta | Fully Added |
|
||||
| [Artifacts](https://modrinth.com/mod/artifacts) | 9.5.12 | Fully Added |
|
||||
| [Artifality](https://modrinth.com/mod/artifality) | 0.6.1 | Fully Added |
|
||||
| [Arts & Crafts](https://modrinth.com/mod/artsandcrafts) | 1.5.1 | Foliage Only |
|
||||
| [Astrological (End Terrain & Biomes)](https://modrinth.com/mod/astrological) | | Partial Support | # Was formally called Inversia, mod ID must have changed at some point. We should keep both
|
||||
| [Atmospheric](https://modrinth.com/mod/atmospheric) | | Foliage Only |
|
||||
| [ATO - All the Ores](https://www.curseforge.com/minecraft/mc-mods/ato) | | Fully Added |
|
||||
| [Automobility](https://www.curseforge.com/minecraft/mc-mods/automobility) | 0.4.2 | Miniscule |
|
||||
| [Autumnity](https://modrinth.com/mod/autumnity) | | Partial Support |
|
||||
| [Bamboo Everything](https://www.curseforge.com/minecraft/mc-mods/bamboo-everything) | 3.0.3 | Fully Added |
|
||||
| [Beast Slayer](https://www.curseforge.com/minecraft/mc-mods/beast-slayer) | 2.0_test1 | Blocks Only | # Think this mod used to be called Ancient Beasts, at least that's what the mod namespace has
|
||||
| [Beautify!](https://modrinth.com/mod/beautify) | 2.0.2 | Partial Support | # Hanging flower pots still needs work to make it look good
|
||||
| [Bedrockify](https://modrinth.com/mod/bedrockify) | 1.9.1 | Fully Added | # This mod only adds 2 types of cauldrons
|
||||
| [Better End Ore](https://modrinth.com/mod/better-end-ore) | 1.0.3 | Fully Added |
|
||||
| [Better Tridents](https://modrinth.com/mod/better-tridents) | 8.0.1 | Fully Added | # This mod only adds a single item
|
||||
| [BetterArcheology](https://www.curseforge.com/minecraft/mc-mods/better-archeology) | 1.2.1 | Blocks Only |
|
||||
| [BetterEnd](https://modrinth.com/mod/betterend) | 4.0.11 | Fully Added |
|
||||
| [BetterNether](https://modrinth.com/mod/betternether) | 9.0.10 | Fully Added |
|
||||
| [BiblioCraft](https://www.curseforge.com/minecraft/mc-mods/bibliocraft) | 2.4.6 | Partial Support | # Lots of block entities in this mod
|
||||
| [Bigger Reactors](https://www.curseforge.com/minecraft/mc-mods/biggerreactors) | | Fully Added |
|
||||
| [Biome Makeover](https://modrinth.com/mod/biome-makeover) | | Fully Added |
|
||||
| [Biomes O' Plenty](https://modrinth.com/mod/biomes-o-plenty) | 21.1.0.7 | Fully Added |
|
||||
| [The Block Box](https://modrinth.com/mod/the-block-box) | 0.1.1 | Fully Added |
|
||||
| [Blockcraftery](https://www.curseforge.com/minecraft/mc-mods/blockcraftery) | 1.2.0 | Fully Added | # Another copycat mod. Can't do much but put ID's in no properties
|
||||
| [Blockus](https://modrinth.com/mod/blockus) | 2.9.9 | Fully Added |
|
||||
| [Blood Magic](https://modrinth.com/mod/blood-magic) | | Partial Support |
|
||||
| [Blossom](https://modrinth.com/mod/blossom) | 1.0.7 | Fully Added |
|
||||
| [Blue Skies](https://modrinth.com/mod/blue-skies) | | Partial Support |
|
||||
| [Born in Chaos](https://www.curseforge.com/minecraft/mc-mods/born-in-chaos) | 1.3.1 | Fully Added |
|
||||
| [Bosses Of Mass Destruction](https://www.curseforge.com/minecraft/mc-mods/bosses-of-mass-destruction) | 1.7.5 | Fully Added | # Added all blocks, almost all items, and some of the entities. I unfortunately couldn't find any good IDs for the Void Blossom or Obsidilith.
|
||||
| [Botania](https://modrinth.com/mod/botania) | | Partial Support |
|
||||
| [Bountiful](https://modrinth.com/mod/bountiful) | 6.0.4 | Fully Added | # Changed Bounty Board to have no properties as the paper had a metalic shine
|
||||
| [Bountiful Fares](https://modrinth.com/mod/bountiful-fares) | | Fully Added |
|
||||
| [The Box Of Horrors](https://modrinth.com/mod/the-box-of-horrors) | | Partial Support |
|
||||
| [Brazilian Delight](https://modrinth.com/mod/braziliandelight) | 1.1.0 | Foliage Only |
|
||||
| [Brewin' And Chewin'](https://modrinth.com/mod/brewin-and-chewin) | 4.3.0 | Fully Added |
|
||||
| [The Broken Content](https://modrinth.com/mod/thebrokencontent) | 1.5.1 | Blocks Only | #Only added Corrupted bedrock for now as it is the only block that glows.
|
||||
| [The Broken Script](https://modrinth.com/mod/the-broken-script) | 1.9.7 | Fully Added | #Only added err.integrity block as mod dev said that should be the only colored block that glows
|
||||
| [Bronze](https://modrinth.com/mod/bronze) | 2.0.1 | Ores Only |
|
||||
| [Burnt](https://modrinth.com/mod/burnt) | | Fully Added |
|
||||
| [Bushier Flowers](https://modrinth.com/mod/bushier-flowers) | | Partial Support |
|
||||
| [Butchery](https://modrinth.com/mod/butchery) | 3.5.5 | Fully Added |
|
||||
| [Buzzier Bees](https://modrinth.com/mod/buzzier-bees) | | Partial Support |
|
||||
| [Capsule](https://www.curseforge.com/minecraft/mc-mods/capsule) | 3.4.76 | Miniscule |
|
||||
| [Caupona](https://modrinth.com/mod/caupona) | | Partial Support |
|
||||
| [Caverns & Chasms](https://modrinth.com/mod/caverns-and-chasms) | 2.0.0 | Partial Support |
|
||||
| [CC: Tweaked](https://modrinth.com/mod/cc-tweaked) | 1.115.1 | Fully Added |
|
||||
| [Chalk](https://modrinth.com/mod/chalk-mod) | | Fully Added |
|
||||
| [Charm](https://modrinth.com/mod/charm) | 6.0.24 | Fully Added | # Added all missing blocks and items in this version, available as Charm Forked here: https://modrinth.com/mod/charm-forked . v7.0.0+ has new, unadded blocks from my knowledge
|
||||
| [ChemLib](https://www.curseforge.com/minecraft/mc-mods/chemlib) | | Partial Support |
|
||||
| [Chipped](https://modrinth.com/mod/chipped) | 3.0.7 | Fully Added |
|
||||
| [Chisel](https://www.curseforge.com/minecraft/mc-mods/chisel) | 1.0.2.45 | Blocks Only |
|
||||
| [Chisel Reborn](https://www.curseforge.com/minecraft/mc-mods/chisel-reborn) | 2.0.0 | Blocks Only |
|
||||
| [Chisels & Bits](https://www.curseforge.com/minecraft/mc-mods/chisels-bits) | 14.33 | Blocks Only | # Support kinda sucks, but what else can you do with a chiseling out rocks mod.
|
||||
| [ChocoCraft Plus](https://modrinth.com/mod/chococraft-plus) | 4.5.8 | Fully Added |
|
||||
| [Chocolate Quest Repoured](https://www.curseforge.com/minecraft/mc-mods/cqrepoured)| 2.6.15B | Blocks Only |
|
||||
| [Chunk Loaders](https://modrinth.com/mod/chunk-loaders) | 1.2.8 | Fully Added | # Why doesn't these loaders get effect by any ID??
|
||||
| [Cinderscapes](https://modrinth.com/mod/cinderscapes) | 5.2.0 | Fully Added |
|
||||
| [Clockwork](https://modrinth.com/mod/create-clockwork) | | Miniscule |
|
||||
| [Cobblemon](https://modrinth.com/mod/cobblemon) | | Partial Support | # Someone should see if the entities look good
|
||||
| Colight | | Fully Added |
|
||||
| [Comforts](https://www.curseforge.com/minecraft/mc-mods/comforts) | 1.4.1.3 | Fully Added |
|
||||
| [Condiments](https://modrinth.com/mod/condiments) | 1.3.0 | Fully Added / Autogenerated Content | # Generates block variants for detected wood types
|
||||
| [Construct's Armory](https://www.curseforge.com/minecraft/mc-mods/constructs-armory) | 1.3.4 | Miniscule |
|
||||
| [Cooking For Blockheads](https://www.curseforge.com/minecraft/mc-mods/cooking-for-blockheads) | 21.1.17 | Fully Added |
|
||||
| [Corn Delight](https://modrinth.com/mod/corn-delight) | | In Testing | # Corn plants are 2 blocks tall, current blocks.properties only has one entry!
|
||||
| [Countered's Terrain Slabs](https://modrinth.com/mod/countereds-terrain-slabs) | 1.3.0 | Fully Added |
|
||||
| [Crate Delight](https://modrinth.com/mod/crate-delight/versions) | 24.11.22 | Fully Added |
|
||||
| [Create](https://modrinth.com/mod/create) | 6.0.4 | In Testing |
|
||||
| [Create Big Cannons](https://modrinth.com/mod/create-big-cannons) | 5.8.2 | Fully Added |
|
||||
| [Create Crafts & Additions](https://modrinth.com/mod/createaddition) | 1.4.2 | Fully Added |
|
||||
| [Create Deco](https://modrinth.com/mod/create-deco) | 2.0.2 | Fully Added |
|
||||
| [Create Enchantment Industry](https://modrinth.com/mod/create-enchantment-industry) | 2.0.12 | Fully Added |
|
||||
| [Create Goggles](https://modrinth.com/mod/create-goggles) | 0.5.6 | Fully Added |
|
||||
| [Create Slice & Dice](https://modrinth.com/mod/slice-and-dice) | 3.3.1 | Miniscule |
|
||||
| [Create Utilities](https://modrinth.com/mod/create-utilities) | 0.3.0 | Fully Added | # Parts of blocks that use the end portal shader doesn't render at all
|
||||
| [Create: Bitterballen](https://modrinth.com/mod/create-bitterballen) | | Miniscule |
|
||||
| [Create: DDCL](https://modrinth.com/mod/create-ddcl) | 1.0.0 | Blocks Only |
|
||||
| [Create: Dragons Plus](https://modrinth.com/mod/create-dragons-plus) | 1.3.5 | Fully Added |
|
||||
| [Create: Estrogen](https://modrinth.com/mod/estrogen) | | Partial Support |
|
||||
| [Create: Framed](https://modrinth.com/mod/create-framed) | 1.6.6 | Fully Added |
|
||||
| [Create: Garnished](https://modrinth.com/mod/create-garnished) | | Foliage Only |
|
||||
| [Create: New Age](https://modrinth.com/mod/create-new-age) | | Miniscule |
|
||||
| [Create: Steam 'n' Rails](https://modrinth.com/mod/create-steam-n-rails) | 1.6.9 | Fully Added |
|
||||
| [Create: The Factory Must Grow](https://www.curseforge.com/minecraft/mc-mods/create-industry) | 0.9.3-1.20.1 | Partial Support | #Only touched block.properties here; most blocks besides the concrete, cinderblocks, bauxit, and galena were added
|
||||
| [Created Metallurgy](https://www.curseforge.com/minecraft/mc-mods/create-metallurgy) | 0.0.6-1.20.1 | Partial Support | #The lightbulbs should have their respected color
|
||||
| [Croptopia](https://www.curseforge.com/minecraft/mc-mods/croptopia) | 3.0.4 | Fully Added |
|
||||
| [Crystalcraft Unlimited](https://modrinth.com/mod/crystalcraft-unlimited) | 1.0.0 | Partial Support |
|
||||
| [Cuisine Delight](https://www.curseforge.com/minecraft/mc-mods/cuisine-delight) | 1.1.14 | Fully Added |
|
||||
| [Culinary Construct](https://www.curseforge.com/minecraft/mc-mods/culinary-construct) | 1.3.4 | Miniscule |
|
||||
| [Cultural Delights](https://modrinth.com/mod/cultural-delights) | 0.16.3 | Partial Support |
|
||||
| [Darker Depths](https://www.curseforge.com/minecraft/mc-mods/darker-depths) | | Partial Support |
|
||||
| [Debark](https://www.curseforge.com/minecraft/mc-mods/debark) | 0.1.3 | Autogenerated Content |
|
||||
| [Decorative Blocks](https://modrinth.com/mod/decorative-blocks) | | Miniscule |
|
||||
| [Deep Aether](https://modrinth.com/mod/deep-aether) | | Foliage Only |
|
||||
| [Deeper and Darker](https://modrinth.com/mod/deeperdarker) | | Partial | #added emissive color to gloomy sculk
|
||||
| [Delightful](https://www.curseforge.com/minecraft/mc-mods/delightful) | 1.3 | Blocks Only |
|
||||
| [Dense Ores - Abundant!](https://www.curseforge.com/minecraft/mc-mods/dense-ores-abundant) | 1.2.2 | Fully Added |
|
||||
| [Diagonal Fences](https://modrinth.com/mod/diagonal-fences) | v21.1.1 | Autogenerated Content | # Autogenerates diagonal fences.
|
||||
| [Diagonal Walls](https://modrinth.com/mod/diagonal-walls) | v21.1.2 | Autogenerated Content | # Autogenerates diagonal walls.
|
||||
| [Diagonal Windows](https://modrinth.com/mod/diagonal-windows) | v21.1.2 | Autogenerated Content | # Autogenerates diagonal glass panes.
|
||||
| [Diamond In The Rough](https://modrinth.com/mod/diamond-in-the-rough) | 1.2.1 | Fully Added |
|
||||
| [Dimensional Doors](https://modrinth.com/mod/dimensionaldoors) | 5.3.4 | Fully Added / Autogenerated Content | # Dimensional doors are auto-generated, most doors are now tagged with ag_door. Any stragglers should still be added
|
||||
| [Dis-Enchanting Table](https://modrinth.com/mod/dis-enchanting-table) | 4.0.2 | Fully Added |
|
||||
| [Doctor Who: Weeping Angels](https://modrinth.com/mod/weeping-angels) | | Miniscule |
|
||||
| [Draconic Evolution](https://modrinth.com/mod/draconic-evolution) | | Miniscule |
|
||||
| [DRG Flares](https://www.curseforge.com/minecraft/mc-mods/drg-flares) | 1.2.8 | Fully Added | # Emissives added to the flare entity and all flare items
|
||||
| [Durability Overhaul](https://modrinth.com/mod/durability-overhaul) | 1.11.0 | Fully Added |
|
||||
| [Dynamic Trees](https://modrinth.com/mod/dynamictrees) | 1.5.0-BETA07 | Fully Added |
|
||||
| [Dynamic Trees +](https://modrinth.com/mod/dynamictreesplus) | 1.3.0-BETA2 | Fully Added |
|
||||
| [Dynamic Trees - Alex's Mobs](https://www.curseforge.com/minecraft/mc-mods/dynamic-trees-alexs-mobs) | | Foliage Only |
|
||||
| [Dynamic Trees - Arts and Crafts](https://modrinth.com/mod/dynamic-trees-arts-and-crafts) | | Fully Added |
|
||||
| [Dynamic Trees - Autumnity](https://www.curseforge.com/minecraft/mc-mods/dynamic-trees-autumnity) | | Foliage Only |
|
||||
| [Dynamic Trees - Beachparty](https://www.curseforge.com/minecraft/mc-mods/dynamic-trees-for-beachparty) | | Foliage Only |
|
||||
| [Dynamic Trees - Biomes O' Plenty](https://modrinth.com/mod/dynamic-trees-biomes-o-plenty) | | Fully Added |
|
||||
| [Dynamic Trees - BloomingNature](https://www.curseforge.com/minecraft/mc-mods/dynamic-trees-for-bloomingnature) | | Foliage Only |
|
||||
| [Dynamic Trees - Cobblemon](https://modrinth.com/mod/dynamic-trees-cobblemon) | | Fully Added |
|
||||
| [Dynamic Trees - Croptopia](https://modrinth.com/mod/dynamic-trees-croptopia) | | Fully Added |
|
||||
| [Dynamic Trees - Ecologics](https://modrinth.com/mod/dynamic-trees-ecologics) | | Fully Added |
|
||||
| [Dynamic Trees - Fish of Thieves](https://modrinth.com/mod/dynamic-trees-fish-of-thieves) | | Fully Added |
|
||||
| [Dynamic Trees - Hexcasting](https://modrinth.com/mod/dynamic-trees-hexcasting) | | Fully Added |
|
||||
| [Dynamic Trees - Hexerei](https://www.curseforge.com/minecraft/mc-mods/dynamic-trees-hexerei) | | Foliage Only |
|
||||
| [Dynamic Trees - Meadow](https://www.curseforge.com/minecraft/mc-mods/dynamic-trees-for-meadow) | | Foliage Only |
|
||||
| [Dynamic Trees - More Apple Trees](https://modrinth.com/mod/dynamic-trees-more-apple-trees) | | Fully Added |
|
||||
| [Dynamic Trees - Nature's Spirit](https://modrinth.com/mod/dynamic-trees-for-natures-spirit) | | Fully Added |
|
||||
| [Dynamic Trees - Neapolitan](https://www.curseforge.com/minecraft/mc-mods/dynamic-trees-neapolitan) | | Foliage Only |
|
||||
| [Dynamic Trees - Quark](https://modrinth.com/mod/dynamic-trees-quark) | | Fully Added |
|
||||
| [Dynamic Trees - Regions Unexplored](https://modrinth.com/mod/dynamic-trees-ru) | | Foliage Only |
|
||||
| [Dynamic Trees - Slayers Beasts](https://modrinth.com/mod/dynamictrees-slayersbeasts) | | Fully Added |
|
||||
| [Dynamic Trees - Sonicraft](https://modrinth.com/mod/dynamic-trees-sonicraft) | | Fully Added |
|
||||
| [Dynamic Trees - Super Block World](https://modrinth.com/mod/dynamic-trees-super-block-world) | | Fully Added |
|
||||
| [Dynamic Trees - Terralith](https://modrinth.com/mod/dynamic-trees-terralith) | | Fully Added |
|
||||
| [Dynamic Trees - TFC](https://modrinth.com/mod/dynamictreestfc) | | Fully Added |
|
||||
| [Dynamic Trees - The Aether](https://modrinth.com/mod/dynamic-trees-aether) | | Fully Added |
|
||||
| [Dynamic Trees - Upgrade Aquatic](https://www.curseforge.com/minecraft/mc-mods/dynamic-trees-upgrade-aquatic) | | Foliage Only |
|
||||
| [Dynamic Trees - Vinery](https://www.curseforge.com/minecraft/mc-mods/dynamic-trees-for-vinery) | | Foliage Only |
|
||||
| [Easy Anvils](https://modrinth.com/mod/easy-anvils) | 21.1.0 | Fully Added |
|
||||
| [Easy Anvils](https://modrinth.com/mod/easy-anvils) | v21.1.0 | Fully Added |
|
||||
| [Easy Magic](https://modrinth.com/mod/easy-magic) | 21.1.0 | Fully Added |
|
||||
| [Ecologics](https://modrinth.com/mod/ecologics) | 2.2.0 | Fully Added |
|
||||
| eidolon | | Miniscule / Unknown | # Unsure of which fork was used to add support
|
||||
| [Eidolon Repraised](https://modrinth.com/mod/eidolonrepraised) | 0.3.8.15 | Partial Support |
|
||||
| [EldritchEnd](https://www.curseforge.com/minecraft/mc-mods/eldritch-end) | 0.3.2 | Miniscule | #added ore emissive to etyr ore
|
||||
| [Ember's Kiln](https://modrinth.com/mod/embers-kiln) | 1.1.2 | Fully Added |
|
||||
| [Enchanting Plus](https://www.curseforge.com/minecraft/mc-mods/enchanting-plus) | 5.0.0 | Fully Added |
|
||||
| [End Remastered](https://modrinth.com/mod/endrem) | 5.2.4 | Fully Added | # Added Undead Soul
|
||||
| [Ender IO](https://modrinth.com/mod/enderio) | 7.1.8-alpha | In Testing | # Lots of jank here, did the best I could but lets see what people think before we call it "done". Glass render layers can't be changed so placing this stuff in the only other ID possible, being glazed terracotta. Machinery blocks don't give off any light what-so-ever but have flame and soul flame animations, limiting us to blocks with "fake" ACL lighting.
|
||||
| [Ender Zoology](https://modrinth.com/mod/ender-zoology) | 8.0.3 | Fully Added |
|
||||
| [Enhanced Celestials](https://modrinth.com/mod/enhanced-celestials) | 5.0.2.3 | Fully Added |
|
||||
| [Environmental](https://modrinth.com/mod/environmental) | | Foliage Only |
|
||||
| [Et Futurum Requiem](https://modrinth.com/mod/etfuturum) | | Partial Support | # For GTNH/1.7.10, about half added
|
||||
| [Etcetera](https://modrinth.com/mod/etcetera/versions) | | Miniscule |
|
||||
| [Eternal Starlight](https://www.curseforge.com/minecraft/mc-mods/eternal-starlight) | 0.2.0 | Partial Support |
|
||||
| [Eternal Starlight Vanilla Ores](https://modrinth.com/mod/eternal-starlight-vo) | 1.0.0 | Fully Added |
|
||||
| [Every Compat \(Wood Good\)](https://modrinth.com/mod/every-compat) | 2.11.19 | Autogenerated Content | # This mod now includes tags to better support blocks. You can already see a list within block.properties and how to add more wood types. Maybe need to do /reload for all tags to appear.
|
||||
| [EvilCraft](https://modrinth.com/mod/evilcraft) | | Foliage Only |
|
||||
| [Ex Deorum](https://modrinth.com/mod/ex-deorum) | | Fully Added |
|
||||
| [Excavated Variants](https://modrinth.com/mod/excavated_variants) | | Autogenerated Content |
|
||||
| [Expanded Delight](https://modrinth.com/mod/expanded-delight) | 0.1.3.1 | Fully Added |
|
||||
| [Extended Block Shapes](https://modrinth.com/mod/extshape) | 3.1.1 | Fully Added | # Total fucking anguish trying to add this.
|
||||
| [Extended Block Shapes - Blockus](https://modrinth.com/mod/extshape_blockus) | 3.1.0 | Fully Added | # Same with you
|
||||
| [ExtendedAE](https://www.curseforge.com/minecraft/mc-mods/ex-pattern-provider) | 2.1.8 | Fully Added | #AdreadedKing
|
||||
| [Extractinator](https://modrinth.com/mod/extractinator) | 2.3.0 | Fully Added |
|
||||
| [Eyes in the Darkness](https://www.curseforge.com/minecraft/mc-mods/eyes-in-the-darkness) | 0.1.0 | Fully Added |
|
||||
| [Fabric Seasons: Extras](https://modrinth.com/mod/fabric-seasons-extras) | 1.2-BETA | Fully Added |
|
||||
| [Fairy Lights](https://www.curseforge.com/minecraft/mc-mods/fairy-lights)| 5.0.0 | Fully Added / Unknown | # Supposidly the mod will be fixed to allow ACL on the lights, someone should check on this after some time has passed.
|
||||
| [The Farlanders](https://modrinth.com/mod/the-farlanders) | | Miniscule |
|
||||
| [Farmer's Delight](https://modrinth.com/mod/farmers-delight) | | Fully Added | # Added an older ID for Rice Panicles
|
||||
| [Farmer's Knives](https://modrinth.com/mod/farmers-knives) | 3.0.2 | Miniscule | # Only added Additional Additions knives
|
||||
| [Farmer's Respite](https://www.curseforge.com/minecraft/mc-mods/farmers-respite) | | Partial Support |
|
||||
| [Farming for Blockheads](https://modrinth.com/mod/farming-for-blockheads) | 3.1.28 | Fully Added |
|
||||
| [Fast Paintings](https://modrinth.com/mod/fast-paintings) | 1.2.15 | Fully Added |
|
||||
| [Fish's Undead Rising](https://www.curseforge.com/minecraft/mc-mods/fishs-undead-rising) | 1.4.0 | Blocks Only |
|
||||
| [Fixed](https://modrinth.com/mod/fixed) | 1.6.0 | Fully Added |
|
||||
| [Flower Patch](https://modrinth.com/mod/flower-patch) | | Foliage Only | # Someone should confirm if the flowers can be placed in flower pots
|
||||
| [Forbidden and Arcanus](https://modrinth.com/mod/forbidden-arcanus) | | Miniscule |
|
||||
| [Fossils and Archaeology: Legacy](https://modrinth.com/mod/fossils-and-archaeology-legacy) | 1.4.9 | Fully Added |
|
||||
| [Frame Changer](https://modrinth.com/mod/frame-changer) | | Miniscule |
|
||||
| [Framed Blocks](https://www.curseforge.com/minecraft/mc-mods/framedblocks) | 10.2.0 | Partial Support |
|
||||
| [Friends&Foes](https://modrinth.com/mod/friends-and-foes) | 3.0.9 | Partial Support | # Entities needs done
|
||||
| [Frights and Foliage](https://modrinth.com/mod/frights-and-foliage) | 1.0.1 | Fully Added |
|
||||
| [Frostiful](https://modrinth.com/mod/frostiful) | 1.0.11 | Partial Support |
|
||||
| [Fruits Delight](https://modrinth.com/mod/fruits-delight) | 1.0.11 | Partial Support |
|
||||
| [FTB Materials](https://www.curseforge.com/minecraft/mc-mods/ftb-materials) | 21.1.3 | Ores Added |
|
||||
| [Functional Storage](https://modrinth.com/mod/functional-storage) | 1.4.2 | Fully Added |
|
||||
| [Galosphere](https://modrinth.com/mod/galosphere) | | Partial Support |
|
||||
| [Gardens of the Dead](https://modrinth.com/mod/gardens-of-the-dead) |4.0.1 | Fully Added |
|
||||
| [Gauges & Switches](https://www.curseforge.com/minecraft/mc-mods/redstone-gauges-and-switches) | 1.2.22 | Miniscule | #Only did the alarm lamp
|
||||
| [Geode+](https://modrinth.com/mod/geode-plus) | | Partial Support |
|
||||
| [Good Ending](https://modrinth.com/mod/good-ending) | 1.0.1 | Miniscule |
|
||||
| [Grappling Hook Mod: Restitched](https://modrinth.com/mod/grappling-hook-mod-fabric) | 1.99.0 | Fully Added |
|
||||
| [Gravestones](https://modrinth.com/mod/gravestones) | v1.15 | Fully Added |
|
||||
| [Gravestones - Pneumono_](https://modrinth.com/mod/pneumono_gravestones) | 1.0.9 | Fully Added |
|
||||
| [GregTech CE Unofficial](https://www.curseforge.com/minecraft/mc-mods/gregtech-ce-unofficial) | | Miniscule / Unknown | # Mod ID is gtceu, Unknown if this mod was the one used.
|
||||
| [GregTechCEu Modern](https://www.curseforge.com/minecraft/mc-mods/gregtechceu-modern) | 1.6.3 | Partial support | # Add support for lamps and coil blocks
|
||||
| [Growthcraft Community Edition](https://www.curseforge.com/minecraft/mc-mods/growthcraft-community-edition) | 4.2.3 | Fully Added | # Seems like this is a collection of smaller Growthcraft mods, all mod namespace starts with "growthcraft"
|
||||
| GTOcore | 1.0.1 | Partial support | # Add support for coil blocks
|
||||
| [Hamsters](https://modrinth.com/mod/hamsters) | 1.0.3 | Fully Added |
|
||||
| [Handcrafted](https://modrinth.com/mod/handcrafted/gallery) | | Miniscule |
|
||||
| [Handcrafted](https://modrinth.com/mod/handcrafted) | 4.0.3 | Fully Added |
|
||||
| [Haunted Harvest](https://modrinth.com/mod/haunted-harvest) | | Fully Added |
|
||||
| [Hearth & Home](https://modrinth.com/mod/hearth-and-home) | 2.0.3 | Fully Added |
|
||||
| [Hephaestus](https://modrinth.com/mod/hephaestus) | 3.6.4.287 | Fully Added |
|
||||
| [Hexxit Gear](https://www.curseforge.com/minecraft/mc-mods/hexxit-gear) | 2.8.3 | Foliage Only |
|
||||
| [Hexxit World](https://www.technicpack.net/modpack/hexxit-ii.896745/mods) | 1.1.0-33 | Foliage Only | # Seems like this is the only place that even lists Hexxit World.
|
||||
| [HT's TreeChop](https://www.curseforge.com/minecraft/mc-mods/treechop) | 0.14.7 | Fully Added |
|
||||
| [Hybrid Aquatic](https://modrinth.com/mod/hybrid-aquatic) | 1.5.4 | Partial Support | # Added the 3 water based foliage
|
||||
| [Hydrological](https://modrinth.com/mod/hydrological) | | Unknown | # Not even sure if this is the correct mod, ID is hydrol
|
||||
| [Ice and Fire](https://modrinth.com/mod/iceandfire-ce) | 1.0.2 | Fully Added | # Tested using the Community Edition, but IDs should match the original. Dread Portals are still invisible but no ID seems to fix them. Added some food items and changed handling of Pixie Jars.
|
||||
| [iChunUtil](https://www.curseforge.com/minecraft/mc-mods/ichunutil) | 7.2.2 | Fully Added | # There's just a single block??
|
||||
| [Illager Invasion](https://modrinth.com/mod/illager-invasion) | 8.0.7 | Fully Added |
|
||||
| [Illuminations Legacy 🔥](https://www.curseforge.com/minecraft/mc-mods/illuminations-legacy) | 0.4.4-hexxit | Entities Only | # Can only find this specific edit here?? https://www.technicpack.net/modpack/hexxit-ii.896745/mods
|
||||
| [Immersive Aircraft](https://modrinth.com/mod/immersive-aircraft) | | Fully Added |
|
||||
| [Immersive Engineering](https://modrinth.com/mod/immersiveengineering) | 12.4.2-194 | Blocks Only |
|
||||
| [Immersive Weathering](https://modrinth.com/mod/immersive-weathering) | 2.0.5 | Fully Added / Autogenerated Content | # Added Ice and Fire autogen and fixed Snowy Stone blocks being too reflective
|
||||
| [Industrial Foregoing](https://modrinth.com/mod/industrial-foregoing) | 3.6.33 | Blocks Only |
|
||||
| [Industrial Revolution](https://www.curseforge.com/minecraft/mc-mods/industrial-revolution) | 1.16.7BETA | Planned | #ADreadedKing
|
||||
| [Industrial Upgrade](https://www.curseforge.com/minecraft/mc-mods/industrial-upgrade) | 3.3.0.5 | Fully Added |
|
||||
| [Infinite Abyss](https://modrinth.com/mod/infinite-abyss/gallery) | | Partial Support |
|
||||
| [Infinity Buttons](https://modrinth.com/mod/infinitybuttons) | | Partial Support |
|
||||
| [Infusion Table](https://modrinth.com/mod/infusion-table) | 1.2.0 | Fully Added |
|
||||
| [Iron Chests](https://www.curseforge.com/minecraft/mc-mods/iron-chests) | 7.0.67.844 | Fully Added | # Originally part of IC2, became it's own mod. Original owner cpw let ProgWML6 maintain and update it.
|
||||
| [Iron Chests: Restocked](https://modrinth.com/mod/ironchests) | 5.0.2 | Fully Added |
|
||||
| Iron Furnaces | | Unknown | # Not sure what version of this mod was used
|
||||
| [Jaden's Nether Expansion](https://modrinth.com/mod/jadens-nether-expansion) | 2.3.2 | Partial Support |
|
||||
| [JDK's Mob Grinding Utilities](https://modrinth.com/mod/jdk-mgu) | | Miniscule |
|
||||
| [Just a Greenhouse](https://modrinth.com/mod/just-a-greenhouse) | 1.1.3 | Fully Added | # Items still have to be added but as a wise person once said "I cannot be arsed"
|
||||
| [L_Ender 's Cataclysm](https://www.curseforge.com/minecraft/mc-mods/lendercataclysm) | 2.66 | Only weapons |
|
||||
| [Legendary Survival Overhaul](https://www.curseforge.com/minecraft/mc-mods/legendary-survival-overhaul) | 2.3.11.3 | Foliage only |
|
||||
| [LevelZ](https://modrinth.com/mod/levelz) | 1.4.13 | Fully Added |
|
||||
| [Little Tiles](https://modrinth.com/mod/littletiles) | 1.6.0-pre159 | Fully Added | # Has issues with ACL
|
||||
| [Lootr](https://modrinth.com/mod/lootr) | 0.7.35.85 | Fully Added |
|
||||
| [The Lord of the Rings Mod: Legacy](https://www.curseforge.com/minecraft/mc-mods/the-lord-of-the-rings-mod-legacy) | beta 36.15 | Blocks & Dimensions Only
|
||||
| [Lucky TNT Mod (Too Much TNT)](https://www.curseforge.com/minecraft/mc-mods/luckytnt) | | Unknown | # Wait we don't have an ID for TNT??
|
||||
| [Luminax](https://www.curseforge.com/minecraft/mc-mods/luminax) | 1.3.0 | Blocks Only |
|
||||
| [Macaw's Bridges](https://modrinth.com/mod/macaws-bridges) | 3.0.0 | Fully Added |
|
||||
| [Macaw's Doors](https://modrinth.com/mod/macaws-doors) | 1.1.3 | Fully Added |
|
||||
| [Macaw's Fences and Walls](https://modrinth.com/mod/macaws-fences-and-walls) | 1.2.0 | Fully Added |
|
||||
| [Macaw's Furniture](https://modrinth.com/mod/macaws-furniture) | 3.3.0 | Fully Added |
|
||||
| [Macaw's Lights and Lamps](https://modrinth.com/mod/macaws-lights-and-lamps) | 1.1.2 | Fully Added |
|
||||
| [Macaw's Paths and Pavings](https://modrinth.com/mod/macaws-paths-and-pavings) | 1.1.0 | Fully Added |
|
||||
| [Macaw's Roofs](https://modrinth.com/mod/macaws-roofs) | 2.3.2 | Fully Added |
|
||||
| [Macaw's Trapdoors](https://modrinth.com/mod/macaws-trapdoors) | 1.1.4 | Fully Added |
|
||||
| [Macaw's Windows](https://modrinth.com/mod/macaws-windows) | 2.3.2 | Fully Added |
|
||||
| [Macaws Stairs](https://modrinth.com/mod/macaws-stairs) | 1.0.1 | Fully Added |
|
||||
| [Magnum Torch](https://modrinth.com/mod/magnum-torch) | v21.1.0 | Fully Added |
|
||||
| [Malum](https://modrinth.com/mod/malum) | | Partial Support |
|
||||
| [Man of Many Planes](https://modrinth.com/mod/man-of-many-planes) | 0.1.0 | Fully Added |
|
||||
| [MCA Reborn](https://modrinth.com/mod/minecraft-comes-alive-reborn) | 7.6.3 | Fully Added |
|
||||
| [MEGA Cells](https://www.curseforge.com/minecraft/mc-mods/mega-cells) | 4.3.0 | Fully Added |
|
||||
| [Mekanism](https://www.curseforge.com/minecraft/mc-mods/mekanism) | 10.7.7.64 | Partial Support |
|
||||
| [Midnight Madness](https://modrinth.com/mod/midnight-madness) | | Partial Support |
|
||||
| [Milk Lib](https://github.com/TropheusJ/milk-lib) | 1.2.60 | Fully Added | # Part of Create, Milk Lib is a submod
|
||||
| [MineCells](https://www.curseforge.com/minecraft/mc-mods/minecells) | 1.9.1 | Miniscule | #added emissive torches
|
||||
| [Miner's Delight +](https://www.curseforge.com/minecraft/mc-mods/miners-delight-plus) | 1.2.3 | Partial Support |
|
||||
| [Missing Wilds](https://modrinth.com/mod/missing-wilds) | 1.4.0+beta | Fully Added |
|
||||
| [Mo' Creatures Extended](https://www.curseforge.com/minecraft/mc-mods/mo-creatures-extended) | 12.3.2 | Ores Only |
|
||||
| [Modern Industrialization](https://www.curseforge.com/minecraft/mc-mods/modern-industrialization) | 2.3.11 | Ores Only |
|
||||
| [More Buckets](https://modrinth.com/mod/more-buckets) | | Partial Support | # Someone Should return to this
|
||||
| [More Chests Variants \(MCV\)](https://modrinth.com/mod/more-chest-variants-lieonlion) | 1.5.9 | Fully Added |
|
||||
| [More Concrete](https://www.curseforge.com/minecraft/mc-mods/more-concrete) | 1.6.0 | Fully Added |
|
||||
| [More Crafting Tables \(MCT\)](https://modrinth.com/mod/more-crafting-tables-lieonlion) | 1.2.9 | Fully Added |
|
||||
| [More Ores More Gems](https://modrinth.com/mod/more-ores-more-gem) | 1.1.6 | Partial Support |
|
||||
| [More Slabs Stairs & Walls](https://modrinth.com/mod/more-slabs-stairs-and-walls) | | In Testing | # A lot of these blocks were added before the partial block ID's were added and needs to be fixed.
|
||||
| [MoreOres+](https://modrinth.com/mod/moreores+) | | Partial Support |
|
||||
| [Mowzie's Mobs](https://www.curseforge.com/minecraft/mc-mods/mowzies-mobs) | 1.5.8 | Blocks Only |
|
||||
| [MrCrayfish's Furniture Mod](https://www.curseforge.com/minecraft/mc-mods/mrcrayfish-furniture-mod) | 7.0.0 | Blocks Only | Block Entities are needing to be done
|
||||
| [Mutant Monsters](https://modrinth.com/mod/mutant-monsters) | v21.1.0 | Fully Added |
|
||||
| [Mystical Agradditions](https://modrinth.com/mod/mystical-agradditions) | | Partial Support |
|
||||
| [Mystical Agriculture](https://modrinth.com/mod/mystical-agriculture) | | Miniscule |
|
||||
| [Mythic Metals](https://modrinth.com/mod/mythicmetals) | | Miniscule |
|
||||
| [Mythic Upgrades](https://modrinth.com/mod/mythic-upgrades) | | Partial Support |
|
||||
| [Natura](https://www.curseforge.com/minecraft/mc-mods/natura) | 4.3.2.69 | Fully Added |
|
||||
| [Naturalist](https://modrinth.com/mod/naturalist) | 4.0.3 | Fully Added |
|
||||
| [Nature's Spirit](https://modrinth.com/mod/natures-spirit) | 2.2.4 | Partial Support|
|
||||
| [Neapolitan](https://www.curseforge.com/minecraft/mc-mods/neapolitan) | 5.0.0 | Foliage Only |
|
||||
| [Nekomas Fixed](https://modrinth.com/mod/nekomas-fixed) | 0.2.0 | Fully Added |
|
||||
| [Neon Lamps](https://curseforge.com/minecraft/mc-mods/neon-lamps) | 1.0.0 | Fully Added |
|
||||
| [Nether Archives](https://modrinth.com/mod/nether-archives) | 0.3.6 | Fully Added |
|
||||
| [Nether's Delight](https://modrinth.com/mod/nethers-delight) | | In Testing | # Why is soil in the Deepslate Diamond Ore ID??
|
||||
| [Netherending Ores](https://www.curseforge.com/minecraft/mc-mods/netherending-ores) | 1.4.2 | Fully Added |
|
||||
| [Nyx](https://www.curseforge.com/minecraft/mc-mods/nyx) | 1.4.2 | Fully Added |
|
||||
| [Occultism](https://modrinth.com/mod/occultism) | | Miniscule |
|
||||
| [Ocean's Delight](https://modrinth.com/mod/oceans-delight) | 1.0.2 | Miniscule |
|
||||
| [Ocean's Enhancements](https://modrinth.com/mod/oceans-enhancements) | 1.1.0 | Miniscule |
|
||||
| [Oh The Biomes We've Gone](https://modrinth.com/mod/oh-the-biomes-weve-gone) | 2.3.13 | Fully Added |
|
||||
| [Oh The Biomes You'll Go](https://modrinth.com/mod/biomesyougo) | | Partial Support |
|
||||
| [Opcraft](https://modrinth.com/mod/opcraftdimensions) | 1.0.0 | Partial Support |
|
||||
| [OpenBlocks](https://www.curseforge.com/minecraft/mc-mods/openblocks) | 1.8.1 | Fully Added |
|
||||
| [OpenBlocks Elevator](https://www.curseforge.com/minecraft/mc-mods/openblocks-elevator) | 1.11.3 | Fully Added |
|
||||
| [Ore Creeper](https://modrinth.com/mod/ore-creeper) | | Fully Added |
|
||||
| [Oreberries](https://www.curseforge.com/minecraft/mc-mods/oreberries) | 0.5.0 | Fully Added |
|
||||
| [Oreganized](https://modrinth.com/mod/oreganized) | | Miniscule |
|
||||
| [Organics](https://www.curseforge.com/minecraft/mc-mods/organics) | | Miniscule |
|
||||
| [Origins](https://modrinth.com/mod/origins) | 1.10.0 | Miniscule |
|
||||
| [Oritech](https://modrinth.com/mod/oritech) | 0.19.4 | Fully Added |
|
||||
| [Outer End](https://modrinth.com/mod/the-outer-end) | | Miniscule | # Only outer_end:rose_crystal_lamp because a user needed that one
|
||||
| [Pam's HarvestCraft 2 - Crops](https://www.curseforge.com/minecraft/mc-mods/pams-harvestcraft-2-crops) | | Partial Support |
|
||||
| [Pam's HarvestCraft 2 - Trees](https://www.curseforge.com/minecraft/mc-mods/pams-harvestcraft-2-trees) | | Fully Added |
|
||||
| [Philip's Ruins](https://modrinth.com/mod/philips-ruins) | | Miniscule | # Light sources only
|
||||
| [Placeable Items](https://www.curseforge.com/minecraft/mc-mods/placeable-items) | 3.3 | Fully Added |
|
||||
| [Player Plates \(Obsidian Plates\)](https://www.curseforge.com/minecraft/mc-mods/player-plates) | 1.3.1.1 | Fully Added |
|
||||
| [PlusTiC](https://www.curseforge.com/minecraft/mc-mods/plusticminusbad) | 8.0.1.0 | Fully Added | # Rich history with this one, will not link original but it's uploaded safe counterpart made by someone else.
|
||||
| [Productive Bees](https://www.curseforge.com/minecraft/mc-mods/productivebees) | 13.6.6 | Miniscule |
|
||||
| [Productive Trees](https://modrinth.com/mod/productivetrees) | | Foliage Only |
|
||||
| [Profile Blocks](https://modrinth.com/mod/profile-blocks) | | Miniscule |
|
||||
| [Project: Vibrant Journeys](https://modrinth.com/mod/project-vibrant-journeys) | 1.6.4 | Fully Added |
|
||||
| [ProjectE](https://www.curseforge.com/minecraft/mc-mods/projecte) | 1.0.1 | Miniscule | #Only the interdiction_torch
|
||||
| [Prominent](https://www.curseforge.com/minecraft/mc-mods/prominent) | | Miniscule |
|
||||
| [Pure Ores](https://modrinth.com/mod/pureores) | | Partial Support |
|
||||
| [Quark](https://modrinth.com/mod/quark) | r1.6-180| Fully Added | # Some stuff from 1.12.2 has to be added in addition to modern versions
|
||||
| [Railcraft Reborn](https://www.curseforge.com/minecraft/mc-mods/railcraft-reborn) | 1.2.4 | Partial Support |
|
||||
| raitherts | | Miniscule / Unknown | # I legit have no idea what mod this is or why it was added
|
||||
| [Randomium Ore](https://modrinth.com/mod/randomium-ore) | | Partial Support |
|
||||
| [Rare Ice](https://modrinth.com/mod/rare-ice) | 0.1.1 | Fully Added |
|
||||
| [Rechiseled](https://modrinth.com/mod/rechiseled) | 1.1.6a | Fully Added |
|
||||
| [Rechiseled: Create](https://modrinth.com/mod/rechiseled-create) | | Miniscule |
|
||||
| [Recurrent Complex](https://www.curseforge.com/minecraft/mc-mods/recurrent-complex) | 1.4.8.5 | Fully Added |
|
||||
| [Red Bits (redstone)](https://modrinth.com/mod/red-bits) | | Partial Support |
|
||||
| [Redstone Lamps Plus](https://www.curseforge.com/minecraft/mc-mods/redstone-lamps-plus) | 1.5.4 | Fully Added |
|
||||
| [Regions Unexplored](https://modrinth.com/mod/regions-unexplored) | 0.5.6 | Partial Support |
|
||||
| [Reliquary Reincarnations](https://www.curseforge.com/minecraft/mc-mods/reliquary-reincarnations) | 1.3.4.796 | Blocks Only |
|
||||
| [Reliquary Reincarnations](https://www.curseforge.com/minecraft/mc-mods/reliquary-reincarnations) | 2.052.1299 | Miniscule | #Only the interdiction_torch
|
||||
| [Resource Cracker](https://modrinth.com/mod/resource-cracker) | 2.5.0 | Blocks Only |
|
||||
| [Ribbits](https://modrinth.com/mod/ribbits) | | Foliage Only |
|
||||
| [Rounded](https://modrinth.com/mod/rounded_mod) | | Miniscule | # Light sources only
|
||||
| [Rubinated Nether](https://modrinth.com/mod/rubinated-nether) | 2.0.1 | Partial Support |
|
||||
| [Rustic Delight](https://www.curseforge.com/minecraft/mc-mods/rustic-delight) | 1.4.1 | Partial Support |
|
||||
| [Sandwichable](https://modrinth.com/mod/sandwichable) | | Foliage Only |
|
||||
| [Scorched Guns 2](https://www.curseforge.com/minecraft/mc-mods/scorched-guns) | 0.3.2.5 | Miniscule | #Only the Plasma lantern was added
|
||||
| [Scorchful](https://modrinth.com/mod/scorchful) | 0.6.5 | Fully Added |
|
||||
| [SCP: Overtime](https://modrinth.com/mod/scp-overtime) | | Miniscule |
|
||||
| [Seafarer](https://www.curseforge.com/minecraft/mc-mods/seafarer-forge) | 1.0.1 | Partial Support |
|
||||
| [Searchlight (& Wall Lights)](https://www.curseforge.com/minecraft/mc-mods/searchlight-forge) | 1.1.11 | Fully Added |
|
||||
| [Seared Ladder \(Backport\)](https://www.curseforge.com/minecraft/mc-mods/seared-ladder-backport) | 1.1.2 | Fully Added |
|
||||
| [SecretRoomsMod](https://www.curseforge.com/minecraft/mc-mods/secretroomsmod) | 5.6.4 | Fully Added | # Optifine shits the bed with this one on 1.12.2, made it so those using shaders could actually be fooled.
|
||||
| [SecurityCraft](https://modrinth.com/mod/security-craft) | 1.9.10 | Fully Added |
|
||||
| [Serene Seasons](https://modrinth.com/mod/serene-seasons) | 10.1.0.3 | Fully Added |
|
||||
| [Serene Shrubbery](https://modrinth.com/mod/serene-shrubbery) | 1.5.1 | Fully Added |
|
||||
| [Silent Gear](https://modrinth.com/mod/silent-gear) | | Miniscule |
|
||||
| [Silent's Gems](https://modrinth.com/mod/silents-gems) | | Miniscule |
|
||||
| [Simple Gravel Ores](https://modrinth.com/mod/simple-gravel-ores) | 1.8 | Fully Added |
|
||||
| [Simply Light](https://www.curseforge.com/minecraft/mc-mods/simply-light) | 1.5.3 | Fully Added |
|
||||
| [Simply Swords](https://modrinth.com/mod/simply-swords) | 1.56.0 | Partial Support | # All base weapon tiers are added, along with some of the unique weapons. Many of the unique items have very dramatic animated textures and are pretty much impossible to support.
|
||||
| [Sky Arena](https://www.curseforge.com/minecraft/mc-mods/sky-arena) | 1.0.0 | Fully Added |
|
||||
| [Snowy Spirit](https://modrinth.com/mod/snowy-spirit) | | Foliage Only |
|
||||
| [Soul Shards Respawn](https://www.curseforge.com/minecraft/mc-mods/soul-shards-respawn) | 1.1.2 | Miniscule |
|
||||
| [SoulsWeapons](https://modrinth.com/mod/mariums-soulslike-weaponry) | 1.2 | Partial Support | #Added Ore Glowing
|
||||
| [Spectrum](https://modrinth.com/mod/spectrum) | 1.8.9 | In Testing |
|
||||
| [Spelunker's Charm II](https://modrinth.com/mod/spelunkers-charm-ii) | 3.6.0 | Partial Support |
|
||||
| [Spelunkery](https://modrinth.com/mod/spelunkery) | 0.3.16 | Fully Added | # Added everything besides 2 unused blocks and adjusted handling of ores and glowsticks
|
||||
| [Spring to Life Backport](https://modrinth.com/mod/spring-to-life-backport) | 1.3.0 | Fully Added |
|
||||
| Star | 1.5.2 | Fully Added | # Part of Tinkers' Construct's Fabric port Hephaestus
|
||||
| [Statues: Rechiseled](https://www.curseforge.com/minecraft/mc-mods/statues-rechiseled) | 1.0.1 | Fully Added | # Can't predict what block this could be, placed in no properties
|
||||
| [Storage Drawers](https://www.curseforge.com/minecraft/mc-mods/storage-drawers) | 5.5.0 | Fully Added |
|
||||
| [Streams](https://www.curseforge.com/minecraft/mc-mods/streams) | 0.4.9 | Fullly Added |
|
||||
| [Supplementaries](https://modrinth.com/mod/supplementaries) | 3.1.7 | Fully Added |
|
||||
| [Supplementaries Squared](https://modrinth.com/mod/supplementaries-squared) | 1.2.8 | Fully Added / Autogenerated Content | # Item shelves seems to detect woodtypes and makes new variants based on it
|
||||
| [Sushi Go Crafting](https://modrinth.com/mod/sushigocrafting) | | Foliage Only |
|
||||
| [T.O Magic 'n Extras - Iron's Spells Addon](https://www.curseforge.com/minecraft/mc-mods/to-tweaks-irons-spells) | 4.4.0 | All Melee |
|
||||
| [TechReborn](https://www.curseforge.com/minecraft/mc-mods/techreborn) | 5.8.7 | Fully Added | #basically added full support, only thing missing is items glowing and what not, but is not rly needed
|
||||
| [TerraFirmaCraft](https://modrinth.com/mod/terrafirmacraft) | 4.0.11-beta | Fully Added | # The server day counter does not increment and thus, seasons and other related time features do not currently work properly. Neither does trims due to hardcoded code within Iris
|
||||
| [Terrestria](https://modrinth.com/mod/terrestria) | | Foliage Only |
|
||||
| [THE UNDEAD REVAMPED](https://www.curseforge.com/minecraft/mc-mods/theundead) | | Miniscule |
|
||||
| [Theabyss](https://www.curseforge.com/minecraft/mc-mods/the-abyss-chapter-ii) | | Partial Support |
|
||||
| [Thermal Expansion](https://modrinth.com/mod/thermal-expansion) | | Miniscule |
|
||||
| [Thermal Foundation](https://www.curseforge.com/minecraft/mc-mods/thermal-foundation) | 2.6.7.1 | Blocks Only |
|
||||
| [Thermal: Extra](https://modrinth.com/mod/thermal-extra) | | Miniscule |
|
||||
| [Theurgy](https://www.curseforge.com/minecraft/mc-mods/theurgy) | | Fully Added |
|
||||
| [Thin Air](https://www.curseforge.com/minecraft/mc-mods/new-thin-air) | | Fullly Added | #It was only one lantern
|
||||
| [Things](https://www.curseforge.com/minecraft/mc-mods/things-fabric) | 0.3.3 | Partial | #Ores are glowing now
|
||||
| [Tide](https://www.curseforge.com/minecraft/mc-mods/tide) | 1.3.3 | Fully Added |
|
||||
| [Tinkers' Construct](https://modrinth.com/mod/tinkers-construct) | 2.13.0.183 | Blocks Only |
|
||||
| [Tinted Campfires](https://www.curseforge.com/minecraft/mc-mods/tinted-campfires) | | Fully Added |
|
||||
| [Tom's Simple Storage Mod](https://modrinth.com/mod/toms-storage) | 2.5.1 | Fully Added |
|
||||
| [Tomb Many Graves 2](https://www.curseforge.com/minecraft/mc-mods/tomb-many-graves-2) | 4.2.0 | Fully Added |
|
||||
| [Torchmaster](https://www.curseforge.com/minecraft/mc-mods/torchmaster) | 1.8.5.0 | Fully Added |
|
||||
| [Translocators 1.8.+](https://www.curseforge.com/minecraft/mc-mods/translocators-1-8) | 2.5.2.81 | Fully Added |
|
||||
| [Traveler's Backpack](https://modrinth.com/mod/travelersbackpack) | 9.1.28 | Fully Added | # Could improve this by placing various backpacks into their respective block ID's, unsure if this will actually work though
|
||||
| [Traverse](https://modrinth.com/mod/traverse) | 1.6.0-69 | Fully Added |
|
||||
| [Twigs](https://modrinth.com/mod/twigs) | 3.1.0 | Fully Added |
|
||||
| [The Twilight Forest](https://www.curseforge.com/minecraft/mc-mods/the-twilight-forest) | 4.7.3196 | Fully Added | # Now contains 1.12.2 and 1.21.1 content.
|
||||
| [The Undergarden](https://modrinth.com/mod/the-undergarden) | | Miniscule |
|
||||
| [Universal Ores](https://modrinth.com/mod/universal_ores) | | Autogenerated Content |
|
||||
| [Upgrade Aquatic](https://modrinth.com/mod/upgrade-aquatic) | | Foliage Only |
|
||||
| [Vanilla Backport](https://modrinth.com/mod/vanillabackport) | 1.1.4.3 | Fully Added |
|
||||
| [VerdantVibes](https://modrinth.com/mod/verdantvibes) | | Foliage Only |
|
||||
| [Vintage Delight](https://www.curseforge.com/minecraft/mc-mods/vintage-delight) | 0.1.4 | Partial Support |
|
||||
| [Waystones](https://modrinth.com/mod/waystones) | 21.1.13 | Fully Added |
|
||||
| [Wetland Whimsy](https://modrinth.com/mod/wetland-whimsy) | | Foliage Only |
|
||||
| [Whisperwoods](https://modrinth.com/mod/whisperwoods) | 2.1.2 | Fully Added |
|
||||
| [Wilder Wild](https://modrinth.com/mod/wilder-wild) | 3.0.11 | Fully Added | # Added potted plants. The new v4.0.0+ content has not been added yet
|
||||
| [Wondrous Wilds](https://modrinth.com/mod/wondrous-wilds) | | Foliage Only |
|
||||
| [Wraith Waystones](https://www.curseforge.com/minecraft/mc-mods/fabric-waystones) | 3.3.2 | Planned | #ADreadedKing
|
||||
| [XK's Deco](https://www.curseforge.com/minecraft/mc-mods/xks-decoration) | 0.8.5+forge | Miniscule | #Only the factory lamps were added
|
||||
| [YUNG's Cave Biomes](https://www.curseforge.com/minecraft/mc-mods/yungs-cave-biomes) | 2.0.5 | Fully Added | # Added Suspicious Ancient Sand and the Ice Cube entity, completing this mod
|
||||
| [Ztones](https://www.curseforge.com/minecraft/mc-mods/ztones) | | Partial Support | # Some additionsfor GTNH / 1.7.10
|
||||
---
|
||||
|
||||
## Status Definitions
|
||||
- **Autogenerated Content**: This mod contains content that is auto-generated and the blocks that exist will change per modlist. Typically we'll try and support as many of said blocks as possible or use tags where applicable (Iris exclusive feature), however it is most likely you'll need to add blocks yourself. If you're going to use this tag, please explain what is being autogenerated and why in a comment.
|
||||
- **Blocks Only**: All blocks have been added but nothing else.
|
||||
- **Entities Only**: Only includes entity.properties entries.
|
||||
- **Foliage Only**: Self-explanatory, only plants, flowers, vines, and other various plantlife has been added.
|
||||
- **Fully Added**: All blocks, items, entities, and dimensions (if applicable) has been reviewed and added to its most appropriate ID.
|
||||
- **In Testing**: This mod either needs to be re-reviewed, or simply is still in the process of being added.
|
||||
- **Items Only**: Only includes item.properties entries.
|
||||
- **Miniscule**: A very small portion of the mod's content has been added or reviewed.
|
||||
- **Ores Only**: Only Ores have been added to block.properties.
|
||||
- **Partial Support**: Only parts of a mod was added / reviewed. For example, only block.properties and dimension.properties were updated to include mod ID's, or a good amount of blocks were added, but not all.
|
||||
- **Planned**: Support for this mod is planned but not yet implemented. Please leave your username if you are the one adding this status so we don't have multiple people working on the same thing.
|
||||
- **Unknown**: Unable to make a determination of how well a mod has been added due to various factors. Please leave a comment if you're gonna use this status!
|
||||
|
||||
## Template
|
||||
`| [modName1](modLink) | Mod's Version | Mod's Added Status | #Optional Comment`
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,532 @@
|
||||
### Last updated: February 10, 2026, 11:05 UTC
|
||||
# Copyright (c) 2026 SpacEagle17 – Licensed under the MIT License: https://opensource.org/licenses/MIT
|
||||
|
||||
# Soul Soil
|
||||
block.10746 = soul_soil \
|
||||
\
|
||||
allthecompressed:soul_soil_1x allthecompressed:soul_soil_2x allthecompressed:soul_soil_3x allthecompressed:soul_soil_4x allthecompressed:soul_soil_5x allthecompressed:soul_soil_6x allthecompressed:soul_soil_7x allthecompressed:soul_soil_8x allthecompressed:soul_soil_9x \
|
||||
\
|
||||
dynamictrees:rooty_soul_soil \
|
||||
\
|
||||
securitycraft:reinforced_soul_soil \
|
||||
\
|
||||
terrainslabs:soul_soil_slab
|
||||
|
||||
# Dried Kelp Blocks
|
||||
block.10748 = dried_kelp_block \
|
||||
\
|
||||
chipped:bamboo_dried_kelp_block chipped:blue_dried_kelp_block chipped:brown_dried_kelp_block chipped:compact_dried_kelp_block chipped:crimson_dried_kelp_block chipped:leafy_dried_kelp_block chipped:mossy_dried_kelp_block chipped:netherwart_dried_kelp_block chipped:rough_crimson_dried_kelp_block chipped:shroomy_dried_kelp_block chipped:sugarcane_dried_kelp_block chipped:wart_dried_kelp_block
|
||||
|
||||
# Dried Kelp Non-Full Blocks (Modded Only)
|
||||
block.10749 = create:belt_connector
|
||||
|
||||
# Bamboo
|
||||
block.10753 = bamboo \
|
||||
\
|
||||
betterend:end_lotus_stem:leaf=false \
|
||||
\
|
||||
betternether:stalagnate_trunk betternether:willow_trunk \
|
||||
\
|
||||
tconstruct:punji \
|
||||
\
|
||||
tfc:plant/golden_bamboo
|
||||
|
||||
# Bamboo Full Blocks
|
||||
block.10756 = bamboo_block stripped_bamboo_block bamboo_planks bamboo_mosaic \
|
||||
tags_bamboo_blocks \
|
||||
\
|
||||
bambooeverything:bamboo_bundle bambooeverything:dry_bamboo_bundle \
|
||||
\
|
||||
betterend:lacugrove_bark betterend:lacugrove_barrel betterend:lacugrove_bookshelf betterend:lacugrove_crafting_table betterend:lacugrove_log betterend:lacugrove_planks betterend:lacugrove_stripped_bark betterend:lacugrove_stripped_log \
|
||||
\
|
||||
biomesoplenty:jacaranda_log biomesoplenty:jacaranda_planks biomesoplenty:jacaranda_wood biomesoplenty:pine_log biomesoplenty:pine_planks biomesoplenty:pine_wood biomesoplenty:stripped_jacaranda_log biomesoplenty:stripped_jacaranda_wood biomesoplenty:stripped_pine_log biomesoplenty:stripped_pine_wood \
|
||||
\
|
||||
biomeswevegone:florus_bookshelf biomeswevegone:florus_crafting_table biomeswevegone:florus_planks biomeswevegone:florus_stem biomeswevegone:florus_wood biomeswevegone:green_enchanted_bookshelf biomeswevegone:green_enchanted_crafting_table biomeswevegone:green_enchanted_planks biomeswevegone:palo_verde_log biomeswevegone:palo_verde_wood biomeswevegone:stripped_florus_stem biomeswevegone:stripped_florus_wood biomeswevegone:stripped_green_enchanted_log biomeswevegone:stripped_green_enchanted_wood \
|
||||
\
|
||||
blockus:bamboo_cross_timber_frame blockus:bamboo_diagonal_timber_frame blockus:bamboo_grate blockus:bamboo_timber_frame blockus:herringbone_bamboo_planks blockus:herringbone_raw_bamboo_planks blockus:mossy_bamboo_planks blockus:mossy_raw_bamboo_planks blockus:raw_bamboo_cross_timber_frame blockus:raw_bamboo_diagonal_timber_frame blockus:raw_bamboo_grate blockus:raw_bamboo_mosaic blockus:raw_bamboo_planks blockus:raw_bamboo_timber_frame \
|
||||
\
|
||||
charm:bamboo_barrel charm:bamboo_bookshelf charm:chiseled_bamboo_bookshelf \
|
||||
\
|
||||
chipped:bamboo_barrel chipped:bamboo_planks_fine_mosaic chipped:bamboo_planks_panel chipped:bamboo_planks_shavings chipped:basket_woven_bamboo_planks chipped:boxed_bamboo_planks chipped:brick_bond_bamboo_planks chipped:bricky_bamboo_planks chipped:cornered_bamboo_planks chipped:crated_bamboo_planks chipped:cross_laced_bamboo_planks chipped:crossed_bamboo_planks chipped:detailed_bamboo_planks chipped:diagonal_bamboo_planks chipped:diamond_bamboo_planks chipped:double_herringbone_bamboo_planks chipped:enclosed_bamboo_planks chipped:fine_bamboo_planks chipped:fine_vertical_bamboo_planks chipped:framed_bamboo_planks chipped:herringbone_bamboo_planks chipped:hewn_bamboo_planks chipped:laced_bamboo_planks chipped:natural_bamboo_planks chipped:pegged_bamboo_planks chipped:polished_bamboo_planks chipped:railed_bamboo_planks chipped:reinforced_bamboo_planks chipped:shifted_bamboo_planks chipped:slanted_bamboo_planks chipped:smooth_bamboo_planks chipped:stacked_bamboo_planks chipped:thin_bamboo_planks chipped:tied_bamboo_planks chipped:tiled_bamboo_planks chipped:versailles_bamboo_planks chipped:vertical_bamboo_planks chipped:vertically_railed_bamboo_planks chipped:whirlwind_bamboo_planks chipped:wickered_bamboo_planks \
|
||||
\
|
||||
farmersdelight:bamboo_cabinet \
|
||||
\
|
||||
fossilslegacy:calamites_log fossilslegacy:calamites_planks fossilslegacy:calamites_wood fossilslegacy:lepidodendron_log fossilslegacy:lepidodendron_planks fossilslegacy:lepidodendron_wood fossilslegacy:stripped_calamites_log fossilslegacy:stripped_calamites_wood fossilslegacy:stripped_lepidodendron_log fossilslegacy:stripped_lepidodendron_wood \
|
||||
\
|
||||
friendsandfoes:bamboo_beehive \
|
||||
\
|
||||
growthcraft_bamboo:bamboo_plank growthcraft_bamboo:bamboo_slab_double \
|
||||
\
|
||||
hearth_and_home:bamboo_parquet hearth_and_home:bamboo_sanded_wood hearth_and_home:bamboo_trim hearth_and_home:bamboo_vertical_trim hearth_and_home:woven_bamboo \
|
||||
\
|
||||
lolmct:bamboo_crafting_table \
|
||||
\
|
||||
quark:reed_block quark:reed_block_slab_double \
|
||||
\
|
||||
rechiseled:bamboo_planks_beams rechiseled:bamboo_planks_beams_connecting rechiseled:bamboo_planks_brick_pattern rechiseled:bamboo_planks_brick_pattern_connecting rechiseled:bamboo_planks_brick_paving rechiseled:bamboo_planks_brick_paving_connecting rechiseled:bamboo_planks_bricks rechiseled:bamboo_planks_bricks_connecting rechiseled:bamboo_planks_crate rechiseled:bamboo_planks_crate_connecting rechiseled:bamboo_planks_diagonal_stripes rechiseled:bamboo_planks_diagonal_stripes_connecting rechiseled:bamboo_planks_diagonal_tiles rechiseled:bamboo_planks_diagonal_tiles_connecting rechiseled:bamboo_planks_dotted rechiseled:bamboo_planks_dotted_connecting rechiseled:bamboo_planks_flooring rechiseled:bamboo_planks_flooring_connecting rechiseled:bamboo_planks_large_tiles rechiseled:bamboo_planks_large_tiles_connecting rechiseled:bamboo_planks_pattern rechiseled:bamboo_planks_pattern_connecting rechiseled:bamboo_planks_rotated_bricks rechiseled:bamboo_planks_rotated_bricks_connecting rechiseled:bamboo_planks_small_bricks rechiseled:bamboo_planks_small_bricks_connecting rechiseled:bamboo_planks_small_tiles rechiseled:bamboo_planks_small_tiles_connecting rechiseled:bamboo_planks_squares rechiseled:bamboo_planks_squares_connecting rechiseled:bamboo_planks_tiles rechiseled:bamboo_planks_tiles_connecting rechiseled:bamboo_planks_wavy rechiseled:bamboo_planks_wavy_connecting rechiseled:bamboo_planks_woven rechiseled:bamboo_planks_woven_connecting \
|
||||
\
|
||||
securitycraft:reinforced_bamboo_block securitycraft:reinforced_bamboo_mosaic securitycraft:reinforced_bamboo_planks securitycraft:reinforced_stripped_bamboo_block \
|
||||
\
|
||||
twilightforest:huge_stalk twilightforest:liveroot_block twilightforest:root
|
||||
|
||||
# Bamboo Non-Full Blocks
|
||||
block.10757 = bamboo_fence bamboo_fence_gate bamboo_pressure_plate bamboo_button scaffolding bamboo_trapdoor bamboo_shelf \
|
||||
\
|
||||
additionalplacements:blockus.mossy_bamboo_slab additionalplacements:blockus.mossy_bamboo_stairs additionalplacements:blockus.mossy_raw_bamboo_slab additionalplacements:blockus.mossy_raw_bamboo_stairs additionalplacements:blockus.raw_bamboo_mosaic_slab additionalplacements:blockus.raw_bamboo_mosaic_stairs additionalplacements:blockus.raw_bamboo_pressure_plate additionalplacements:blockus.raw_bamboo_slab additionalplacements:blockus.raw_bamboo_stairs additionalplacements:extshape.bamboo_block_pressure_plate additionalplacements:extshape.bamboo_block_slab additionalplacements:extshape.bamboo_block_stairs additionalplacements:extshape.bamboo_mosaic_pressure_plate additionalplacements:extshape.stripped_bamboo_block_pressure_plate additionalplacements:extshape.stripped_bamboo_block_slab additionalplacements:extshape.stripped_bamboo_block_stairs additionalplacements:extshape_blockus.herringbone_bamboo_slab additionalplacements:extshape_blockus.herringbone_bamboo_stairs additionalplacements:extshape_blockus.herringbone_raw_bamboo_slab additionalplacements:extshape_blockus.herringbone_raw_bamboo_stairs additionalplacements:fossilslegacy.calamites_pressure_plate additionalplacements:fossilslegacy.calamites_slab additionalplacements:fossilslegacy.calamites_stairs additionalplacements:fossilslegacy.lepidodendron_pressure_plate additionalplacements:fossilslegacy.lepidodendron_slab additionalplacements:fossilslegacy.lepidodendron_stairs additionalplacements:minecraft.bamboo_mosaic_slab additionalplacements:minecraft.bamboo_mosaic_stairs additionalplacements:minecraft.bamboo_pressure_plate additionalplacements:minecraft.bamboo_slab additionalplacements:minecraft.bamboo_stairs \
|
||||
\
|
||||
another_furniture:bamboo_bench another_furniture:bamboo_chair another_furniture:bamboo_drawer another_furniture:bamboo_flower_box another_furniture:bamboo_shelf another_furniture:bamboo_shutter another_furniture:bamboo_table \
|
||||
\
|
||||
bambooeverything:bamboo_door bambooeverything:bamboo_fence bambooeverything:bamboo_fence_gate bambooeverything:bamboo_torch:lit=false bambooeverything:bamboo_trapdoor bambooeverything:bamboo_wall_torch:lit=false bambooeverything:dry_bamboo_door bambooeverything:dry_bamboo_fence bambooeverything:dry_bamboo_fence_gate bambooeverything:dry_bamboo_torch:lit=false bambooeverything:dry_bamboo_trapdoor bambooeverything:dry_bamboo_wall_torch:lit=false \
|
||||
\
|
||||
beautify:lamp_bamboo:on=false \
|
||||
\
|
||||
betterend:lacugrove_bar_stool betterend:lacugrove_button betterend:lacugrove_chair betterend:lacugrove_chest betterend:lacugrove_composter betterend:lacugrove_door betterend:lacugrove_fence betterend:lacugrove_gate betterend:lacugrove_ladder betterend:lacugrove_plate betterend:lacugrove_slab betterend:lacugrove_stairs betterend:lacugrove_taburet betterend:lacugrove_trapdoor betterend:lacugrove_wall \
|
||||
\
|
||||
betternether:bamboo_bar_stool betternether:bamboo_chair betternether:bamboo_taburet \
|
||||
\
|
||||
biomesoplenty:jacaranda_button biomesoplenty:jacaranda_door biomesoplenty:jacaranda_fence biomesoplenty:jacaranda_fence_gate biomesoplenty:jacaranda_pressure_plate biomesoplenty:jacaranda_slab biomesoplenty:jacaranda_stairs biomesoplenty:jacaranda_trapdoor biomesoplenty:pine_button biomesoplenty:pine_door biomesoplenty:pine_fence biomesoplenty:pine_fence_gate biomesoplenty:pine_pressure_plate biomesoplenty:pine_slab biomesoplenty:pine_stairs biomesoplenty:pine_trapdoor \
|
||||
\
|
||||
biomeswevegone:florus_button biomeswevegone:florus_door biomeswevegone:florus_fence biomeswevegone:florus_fence_gate biomeswevegone:florus_pressure_plate biomeswevegone:florus_slab biomeswevegone:florus_stairs biomeswevegone:florus_trapdoor \
|
||||
\
|
||||
blockbox:bamboo_seat \
|
||||
\
|
||||
blockus:bamboo_lattice blockus:mossy_bamboo_slab blockus:mossy_bamboo_stairs blockus:mossy_raw_bamboo_slab blockus:mossy_raw_bamboo_stairs blockus:raw_bamboo_button blockus:raw_bamboo_door blockus:raw_bamboo_fence blockus:raw_bamboo_fence_gate blockus:raw_bamboo_lattice blockus:raw_bamboo_mosaic_slab blockus:raw_bamboo_mosaic_stairs blockus:raw_bamboo_pressure_plate blockus:raw_bamboo_slab blockus:raw_bamboo_stairs blockus:raw_bamboo_trapdoor \
|
||||
\
|
||||
diagonalfences:betterend/lacugrove_fence diagonalfences:blockus/raw_bamboo_fence diagonalfences:extshape/bamboo_block_fence diagonalfences:extshape/bamboo_mosaic_fence diagonalfences:extshape/stripped_bamboo_block_fence diagonalfences:fossilslegacy/calamites_fence diagonalfences:fossilslegacy/lepidodendron_fence diagonalfences:mcwfences/bamboo_fence diagonalfences:mcwfences/bamboo_horse_fence diagonalfences:mcwfences/bamboo_picket_fence diagonalfences:mcwfences/bamboo_stockade_fence diagonalfences:mcwfences/bamboo_wired_fence diagonalfences:minecraft/bamboo_fence diagonalfences:securitycraft/reinforced_bamboo_fence \
|
||||
\
|
||||
diagonalwalls:extshape/bamboo_block_wall diagonalwalls:extshape/bamboo_mosaic_wall diagonalwalls:extshape/bamboo_wall diagonalwalls:extshape/stripped_bamboo_block_wall diagonalwalls:extshape_blockus/herringbone_bamboo_wall diagonalwalls:extshape_blockus/herringbone_raw_bamboo_wall diagonalwalls:extshape_blockus/mossy_bamboo_wall diagonalwalls:extshape_blockus/mossy_raw_bamboo_wall diagonalwalls:extshape_blockus/raw_bamboo_mosaic_wall diagonalwalls:extshape_blockus/raw_bamboo_wall \
|
||||
\
|
||||
diagonalwindows:blockus/bamboo_lattice diagonalwindows:blockus/raw_bamboo_lattice \
|
||||
\
|
||||
exdeorum:bamboo_barrel exdeorum:bamboo_compressed_sieve exdeorum:bamboo_crucible exdeorum:bamboo_sieve \
|
||||
\
|
||||
extshape:bamboo_block_button extshape:bamboo_block_fence extshape:bamboo_block_fence_gate extshape:bamboo_block_pressure_plate extshape:bamboo_block_quarter_piece extshape:bamboo_block_slab extshape:bamboo_block_stairs extshape:bamboo_block_vertical_quarter_piece extshape:bamboo_block_vertical_slab extshape:bamboo_block_vertical_stairs extshape:bamboo_block_wall extshape:bamboo_mosaic_button extshape:bamboo_mosaic_fence extshape:bamboo_mosaic_fence_gate extshape:bamboo_mosaic_pressure_plate extshape:bamboo_mosaic_quarter_piece extshape:bamboo_mosaic_vertical_quarter_piece extshape:bamboo_mosaic_vertical_slab extshape:bamboo_mosaic_vertical_stairs extshape:bamboo_mosaic_wall extshape:bamboo_quarter_piece extshape:bamboo_vertical_quarter_piece extshape:bamboo_vertical_slab extshape:bamboo_vertical_stairs extshape:bamboo_wall extshape:stripped_bamboo_block_button extshape:stripped_bamboo_block_fence extshape:stripped_bamboo_block_fence_gate extshape:stripped_bamboo_block_pressure_plate extshape:stripped_bamboo_block_quarter_piece extshape:stripped_bamboo_block_slab extshape:stripped_bamboo_block_stairs extshape:stripped_bamboo_block_vertical_quarter_piece extshape:stripped_bamboo_block_vertical_slab extshape:stripped_bamboo_block_vertical_stairs extshape:stripped_bamboo_block_wall \
|
||||
\
|
||||
extshape_blockus:herringbone_bamboo_quarter_piece extshape_blockus:herringbone_bamboo_slab extshape_blockus:herringbone_bamboo_stairs extshape_blockus:herringbone_bamboo_vertical_quarter_piece extshape_blockus:herringbone_bamboo_vertical_slab extshape_blockus:herringbone_bamboo_vertical_stairs extshape_blockus:herringbone_bamboo_wall extshape_blockus:herringbone_raw_bamboo_quarter_piece extshape_blockus:herringbone_raw_bamboo_slab extshape_blockus:herringbone_raw_bamboo_stairs extshape_blockus:herringbone_raw_bamboo_vertical_quarter_piece extshape_blockus:herringbone_raw_bamboo_vertical_slab extshape_blockus:herringbone_raw_bamboo_vertical_stairs extshape_blockus:herringbone_raw_bamboo_wall extshape_blockus:mossy_bamboo_quarter_piece extshape_blockus:mossy_bamboo_vertical_quarter_piece extshape_blockus:mossy_bamboo_vertical_slab extshape_blockus:mossy_bamboo_vertical_stairs extshape_blockus:mossy_bamboo_wall extshape_blockus:mossy_raw_bamboo_quarter_piece extshape_blockus:mossy_raw_bamboo_vertical_quarter_piece extshape_blockus:mossy_raw_bamboo_vertical_slab extshape_blockus:mossy_raw_bamboo_vertical_stairs extshape_blockus:mossy_raw_bamboo_wall extshape_blockus:raw_bamboo_mosaic_quarter_piece extshape_blockus:raw_bamboo_mosaic_vertical_quarter_piece extshape_blockus:raw_bamboo_mosaic_vertical_slab extshape_blockus:raw_bamboo_mosaic_vertical_stairs extshape_blockus:raw_bamboo_mosaic_wall extshape_blockus:raw_bamboo_quarter_piece extshape_blockus:raw_bamboo_vertical_quarter_piece extshape_blockus:raw_bamboo_vertical_slab extshape_blockus:raw_bamboo_vertical_stairs extshape_blockus:raw_bamboo_wall \
|
||||
\
|
||||
farmersdelight:basket \
|
||||
\
|
||||
fossilslegacy:calamites_button fossilslegacy:calamites_door fossilslegacy:calamites_fence fossilslegacy:calamites_fence_gate fossilslegacy:calamites_pressure_plate fossilslegacy:calamites_slab fossilslegacy:calamites_stairs fossilslegacy:calamites_trapdoor fossilslegacy:lepidodendron_button fossilslegacy:lepidodendron_door fossilslegacy:lepidodendron_fence fossilslegacy:lepidodendron_fence_gate fossilslegacy:lepidodendron_pressure_plate fossilslegacy:lepidodendron_slab fossilslegacy:lepidodendron_stairs fossilslegacy:lepidodendron_trapdoor \
|
||||
\
|
||||
growthcraft_bamboo:bamboo_door growthcraft_bamboo:bamboo_fence growthcraft_bamboo:bamboo_fence_gate growthcraft_bamboo:bamboo_slab_half growthcraft_bamboo:bamboo_stairs growthcraft_bamboo:bamboo_stalk growthcraft_bamboo:rope_knot_bamboo \
|
||||
\
|
||||
growthcraft_fishtrap:fishtrap_bamboo \
|
||||
\
|
||||
handcrafted:bamboo_bench handcrafted:bamboo_chair handcrafted:bamboo_corner_trim handcrafted:bamboo_couch handcrafted:bamboo_counter handcrafted:bamboo_cupboard handcrafted:bamboo_desk handcrafted:bamboo_dining_bench handcrafted:bamboo_drawer handcrafted:bamboo_fancy_bed handcrafted:bamboo_nightstand handcrafted:bamboo_pillar_trim handcrafted:bamboo_shelf handcrafted:bamboo_side_table handcrafted:bamboo_table \
|
||||
\
|
||||
hearth_and_home:bamboo_lattice hearth_and_home:bamboo_mat \
|
||||
\
|
||||
mcwbridges:bamboo_bridge mcwbridges:bamboo_bridge_pier mcwbridges:bamboo_bridge_stair mcwbridges:dry_bamboo_bridge mcwbridges:dry_bamboo_bridge_pier mcwbridges:dry_bamboo_bridge_stair \
|
||||
\
|
||||
mcwdoors:bamboo_bark_glass_door mcwdoors:bamboo_barn_door mcwdoors:bamboo_barn_glass_door mcwdoors:bamboo_beach_door mcwdoors:bamboo_classic_door mcwdoors:bamboo_cottage_door mcwdoors:bamboo_four_panel_door mcwdoors:bamboo_glass_door mcwdoors:bamboo_japanese2_door mcwdoors:bamboo_japanese_door mcwdoors:bamboo_modern_door mcwdoors:bamboo_mystic_door mcwdoors:bamboo_nether_door mcwdoors:bamboo_paper_door mcwdoors:bamboo_stable_door mcwdoors:bamboo_stable_head_door mcwdoors:bamboo_swamp_door mcwdoors:bamboo_tropical_door mcwdoors:bamboo_waffle_door mcwdoors:bamboo_western_door mcwdoors:bamboo_whispering_door \
|
||||
\
|
||||
mcwfences:bamboo_curved_gate mcwfences:bamboo_fence mcwfences:bamboo_highley_gate mcwfences:bamboo_horse_fence mcwfences:bamboo_picket_fence mcwfences:bamboo_pyramid_gate mcwfences:bamboo_stockade_fence mcwfences:bamboo_wired_fence \
|
||||
\
|
||||
mcwlights:bamboo_tiki_torch:lit=false mcwlights:soul_bamboo_tiki_torch:lit=false \
|
||||
\
|
||||
mcwpaths:bamboo_planks_path \
|
||||
\
|
||||
mcwroofs:bamboo_attic_roof mcwroofs:bamboo_lower_roof mcwroofs:bamboo_mosaic_attic_roof mcwroofs:bamboo_mosaic_lower_roof mcwroofs:bamboo_mosaic_roof mcwroofs:bamboo_mosaic_steep_roof mcwroofs:bamboo_mosaic_top_roof mcwroofs:bamboo_mosaic_upper_lower_roof mcwroofs:bamboo_mosaic_upper_steep_roof mcwroofs:bamboo_planks_attic_roof mcwroofs:bamboo_planks_lower_roof mcwroofs:bamboo_planks_roof mcwroofs:bamboo_planks_steep_roof mcwroofs:bamboo_planks_top_roof mcwroofs:bamboo_planks_upper_lower_roof mcwroofs:bamboo_planks_upper_steep_roof mcwroofs:bamboo_roof mcwroofs:bamboo_steep_roof mcwroofs:bamboo_top_roof mcwroofs:bamboo_upper_lower_roof mcwroofs:bamboo_upper_steep_roof \
|
||||
\
|
||||
mcwtrpdoors:bamboo_bark_trapdoor mcwtrpdoors:bamboo_barn_trapdoor mcwtrpdoors:bamboo_barred_trapdoor mcwtrpdoors:bamboo_barrel_trapdoor mcwtrpdoors:bamboo_beach_trapdoor mcwtrpdoors:bamboo_blossom_trapdoor mcwtrpdoors:bamboo_classic_trapdoor mcwtrpdoors:bamboo_cottage_trapdoor mcwtrpdoors:bamboo_four_panel_trapdoor mcwtrpdoors:bamboo_glass_trapdoor mcwtrpdoors:bamboo_mystic_trapdoor mcwtrpdoors:bamboo_paper_trapdoor mcwtrpdoors:bamboo_swamp_trapdoor mcwtrpdoors:bamboo_trapdoor mcwtrpdoors:bamboo_tropical_trapdoor mcwtrpdoors:bamboo_whispering_trapdoor \
|
||||
\
|
||||
mcwwindows:bamboo_shutter \
|
||||
\
|
||||
quark:reed_block_slab quark:reed_block_stairs quark:reed_block_wall \
|
||||
\
|
||||
securitycraft:reinforced_bamboo_button securitycraft:reinforced_bamboo_fence securitycraft:reinforced_bamboo_fence_gate securitycraft:reinforced_bamboo_mosaic_slab securitycraft:reinforced_bamboo_mosaic_stairs securitycraft:reinforced_bamboo_pressure_plate securitycraft:reinforced_bamboo_slab securitycraft:reinforced_bamboo_stairs \
|
||||
\
|
||||
supplementaries:bamboo_spikes \
|
||||
\
|
||||
suppsquared:betterend/item_shelf_lacugrove suppsquared:fossilslegacy/item_shelf_calamites suppsquared:fossilslegacy/item_shelf_lepidodendron suppsquared:item_shelf_bamboo \
|
||||
\
|
||||
twigs:bamboo_mat twigs:bamboo_table \
|
||||
\
|
||||
twilightforest:bamboo_banister
|
||||
|
||||
# Bamboo Stairs and Slabs
|
||||
block.10759 = bamboo_slab bamboo_mosaic_slab bamboo_stairs bamboo_mosaic_stairs \
|
||||
\
|
||||
bambooeverything:bamboo_slab bambooeverything:bamboo_stairs bambooeverything:dry_bamboo_slab bambooeverything:dry_bamboo_stairs
|
||||
|
||||
# Cherry Wood Full Blocks
|
||||
block.10760 = cherry_planks stripped_cherry_log stripped_cherry_wood \
|
||||
\
|
||||
ad_astra:glacian_planks ad_astra:stripped_glacian_log \
|
||||
\
|
||||
betterend:amaranita_hymenophore \
|
||||
\
|
||||
biomesoplenty:fir_planks biomesoplenty:mahogany_planks biomesoplenty:stripped_fir_log biomesoplenty:stripped_fir_wood biomesoplenty:stripped_mahogany_log biomesoplenty:stripped_mahogany_wood \
|
||||
\
|
||||
biomeswevegone:jacaranda_bookshelf biomeswevegone:jacaranda_crafting_table biomeswevegone:jacaranda_planks biomeswevegone:stripped_jacaranda_log biomeswevegone:stripped_jacaranda_wood \
|
||||
\
|
||||
blockus:cherry_cross_timber_frame blockus:cherry_diagonal_timber_frame blockus:cherry_grate blockus:cherry_mosaic blockus:cherry_small_logs blockus:cherry_timber_frame blockus:herringbone_cherry_planks blockus:mossy_cherry_planks \
|
||||
\
|
||||
charm:cherry_barrel charm:cherry_bookshelf charm:chiseled_cherry_bookshelf \
|
||||
\
|
||||
ched:double_herringbone_cherry_planks \
|
||||
\
|
||||
chipped:basket_woven_cherry_planks chipped:boxed_cherry_planks chipped:brick_bond_cherry_planks chipped:bricky_cherry_planks chipped:carved_stripped_cherry_log chipped:cherry_planks_mosaic chipped:cherry_planks_panel chipped:cherry_planks_shavings chipped:chipped_stripped_cherry_log chipped:cornered_cherry_planks chipped:crated_cherry_planks chipped:cross_laced_cherry_planks chipped:crossed_cherry_planks chipped:d_sign_stripped_cherry_log chipped:detailed_cherry_planks chipped:diagonal_cherry_planks chipped:diamond_cherry_planks chipped:double_herringbone_cherry_planks chipped:edged_stripped_cherry_log chipped:enclosed_cherry_planks chipped:f_sign_stripped_cherry_log chipped:fine_cherry_planks chipped:fine_vertical_cherry_planks chipped:framed_cherry_planks chipped:herringbone_cherry_planks chipped:hewn_cherry_planks chipped:i_sign_stripped_cherry_log chipped:k_sign_stripped_cherry_log chipped:knotted_stripped_cherry_log chipped:l_sign_stripped_cherry_log chipped:laced_cherry_planks chipped:layered_stripped_cherry_log chipped:lumpy_stripped_cherry_log chipped:m_sign_stripped_cherry_log chipped:nailed_cherry_planks chipped:natural_cherry_planks chipped:patient_stripped_cherry_log chipped:pegged_cherry_planks chipped:polished_cherry_planks chipped:railed_cherry_planks chipped:reinforced_stripped_cherry_log chipped:shifted_cherry_planks chipped:sign_stripped_cherry_log chipped:slanted_cherry_planks chipped:smooth_cherry_planks chipped:stacked_cherry_planks chipped:stern_stripped_cherry_log chipped:thin_cherry_planks chipped:tiled_cherry_planks chipped:varnished_barrel chipped:versailles_cherry_planks chipped:vertical_cherry_planks chipped:vertically_railed_cherry_planks chipped:whirlwind_cherry_planks chipped:wickered_cherry_planks chipped:wise_stripped_cherry_log \
|
||||
\
|
||||
dynamictrees:stripped_cherry_branch:radius=8 \
|
||||
\
|
||||
ecologics:azalea_planks ecologics:flowering_azalea_planks ecologics:stripped_azalea_log ecologics:stripped_azalea_wood \
|
||||
\
|
||||
farmersdelight:cherry_cabinet \
|
||||
\
|
||||
fixedminecraft:azalea_planks fixedminecraft:stripped_azalea_log fixedminecraft:stripped_azalea_wood \
|
||||
\
|
||||
friendsandfoes:cherry_beehive \
|
||||
\
|
||||
functionalstorage:cherry_1 functionalstorage:cherry_2 functionalstorage:cherry_4 \
|
||||
\
|
||||
hearth_and_home:cherry_parquet hearth_and_home:cherry_sanded_wood hearth_and_home:cherry_trim hearth_and_home:cherry_vertical_trim \
|
||||
\
|
||||
lolmct:cherry_crafting_table \
|
||||
\
|
||||
natura:overworld_bookshelves:type=eucalyptus natura:overworld_planks:type=eucalyptus natura:overworld_workbenches:type=eucalyptus \
|
||||
\
|
||||
rechiseled:cherry_planks_beams rechiseled:cherry_planks_beams_connecting rechiseled:cherry_planks_brick_pattern rechiseled:cherry_planks_brick_pattern_connecting rechiseled:cherry_planks_brick_paving rechiseled:cherry_planks_brick_paving_connecting rechiseled:cherry_planks_bricks rechiseled:cherry_planks_bricks_connecting rechiseled:cherry_planks_crate rechiseled:cherry_planks_crate_connecting rechiseled:cherry_planks_diagonal_stripes rechiseled:cherry_planks_diagonal_stripes_connecting rechiseled:cherry_planks_diagonal_tiles rechiseled:cherry_planks_diagonal_tiles_connecting rechiseled:cherry_planks_dotted rechiseled:cherry_planks_dotted_connecting rechiseled:cherry_planks_flooring rechiseled:cherry_planks_flooring_connecting rechiseled:cherry_planks_large_tiles rechiseled:cherry_planks_large_tiles_connecting rechiseled:cherry_planks_mosaic rechiseled:cherry_planks_pattern rechiseled:cherry_planks_pattern_connecting rechiseled:cherry_planks_rotated_bricks rechiseled:cherry_planks_rotated_bricks_connecting rechiseled:cherry_planks_small_bricks rechiseled:cherry_planks_small_bricks_connecting rechiseled:cherry_planks_small_tiles rechiseled:cherry_planks_small_tiles_connecting rechiseled:cherry_planks_squares rechiseled:cherry_planks_squares_connecting rechiseled:cherry_planks_tiles rechiseled:cherry_planks_tiles_connecting rechiseled:cherry_planks_wavy rechiseled:cherry_planks_wavy_connecting rechiseled:cherry_planks_woven rechiseled:cherry_planks_woven_connecting \
|
||||
\
|
||||
securitycraft:reinforced_cherry_planks securitycraft:reinforced_stripped_cherry_log securitycraft:reinforced_stripped_cherry_wood
|
||||
|
||||
# Cherry Wood Non-Full Blocks
|
||||
block.10761 = cherry_fence cherry_fence_gate cherry_pressure_plate cherry_button cherry_trapdoor cherry_shelf \
|
||||
\
|
||||
ad_astra:glacian_button ad_astra:glacian_door ad_astra:glacian_fence ad_astra:glacian_fence_gate ad_astra:glacian_pressure_plate ad_astra:glacian_slab ad_astra:glacian_stairs ad_astra:glacian_trapdoor \
|
||||
\
|
||||
additionalplacements:blockus.cherry_mosaic_slab additionalplacements:blockus.cherry_mosaic_stairs additionalplacements:blockus.mossy_cherry_slab additionalplacements:blockus.mossy_cherry_stairs additionalplacements:extshape.stripped_cherry_log_slab additionalplacements:extshape.stripped_cherry_log_stairs additionalplacements:extshape.stripped_cherry_wood_pressure_plate additionalplacements:extshape.stripped_cherry_wood_slab additionalplacements:extshape.stripped_cherry_wood_stairs additionalplacements:extshape_blockus.herringbone_cherry_slab additionalplacements:extshape_blockus.herringbone_cherry_stairs additionalplacements:minecraft.cherry_pressure_plate additionalplacements:minecraft.cherry_slab additionalplacements:minecraft.cherry_stairs \
|
||||
\
|
||||
another_furniture:cherry_bench another_furniture:cherry_chair another_furniture:cherry_drawer another_furniture:cherry_flower_box another_furniture:cherry_shelf another_furniture:cherry_shutter another_furniture:cherry_table \
|
||||
\
|
||||
betternether:cherry_bar_stool betternether:cherry_chair betternether:cherry_taburet \
|
||||
\
|
||||
biomesoplenty:fir_button biomesoplenty:fir_door biomesoplenty:fir_fence biomesoplenty:fir_fence_gate biomesoplenty:fir_pressure_plate biomesoplenty:fir_slab biomesoplenty:fir_stairs biomesoplenty:fir_trapdoor biomesoplenty:mahogany_button biomesoplenty:mahogany_door biomesoplenty:mahogany_fence biomesoplenty:mahogany_fence_gate biomesoplenty:mahogany_pressure_plate biomesoplenty:mahogany_slab biomesoplenty:mahogany_stairs biomesoplenty:mahogany_trapdoor \
|
||||
\
|
||||
biomeswevegone:jacaranda_button biomeswevegone:jacaranda_door biomeswevegone:jacaranda_fence biomeswevegone:jacaranda_fence_gate biomeswevegone:jacaranda_pressure_plate biomeswevegone:jacaranda_slab biomeswevegone:jacaranda_stairs biomeswevegone:jacaranda_trapdoor \
|
||||
\
|
||||
blockbox:cherry_seat blockbox:stripped_cherry_palisade blockbox:stripped_spiked_cherry_palisade \
|
||||
\
|
||||
blockus:cherry_lattice blockus:cherry_mosaic_slab blockus:cherry_mosaic_stairs blockus:mossy_cherry_slab blockus:mossy_cherry_stairs blockus:stripped_cherry_post \
|
||||
\
|
||||
condiments:cherry_accent condiments:cherry_wall:up=false \
|
||||
\
|
||||
diagonalfences:ad_astra/glacian_fence diagonalfences:ecologics/azalea_fence diagonalfences:ecologics/flowering_azalea_fence diagonalfences:extshape/stripped_cherry_wood_fence diagonalfences:minecraft/cherry_fence diagonalfences:securitycraft/reinforced_cherry_fence \
|
||||
\
|
||||
diagonalwalls:extshape/cherry_wall diagonalwalls:extshape/stripped_cherry_wood_wall diagonalwalls:extshape_blockus/cherry_mosaic_wall diagonalwalls:extshape_blockus/herringbone_cherry_wall diagonalwalls:extshape_blockus/mossy_cherry_wall \
|
||||
\
|
||||
diagonalwindows:blockus/cherry_lattice \
|
||||
\
|
||||
dynamictrees:stripped_cherry_branch:radius=1 dynamictrees:stripped_cherry_branch:radius=2 dynamictrees:stripped_cherry_branch:radius=3 dynamictrees:stripped_cherry_branch:radius=4 dynamictrees:stripped_cherry_branch:radius=5 dynamictrees:stripped_cherry_branch:radius=6 dynamictrees:stripped_cherry_branch:radius=7 \
|
||||
\
|
||||
ecologics:azalea_button ecologics:azalea_door ecologics:azalea_fence ecologics:azalea_fence_gate ecologics:azalea_pressure_plate ecologics:azalea_slab ecologics:azalea_stairs ecologics:azalea_trapdoor ecologics:flowering_azalea_door ecologics:flowering_azalea_fence ecologics:flowering_azalea_fence_gate ecologics:flowering_azalea_slab ecologics:flowering_azalea_stairs ecologics:flowering_azalea_trapdoor \
|
||||
\
|
||||
exdeorum:cherry_barrel exdeorum:cherry_compressed_sieve exdeorum:cherry_crucible exdeorum:cherry_sieve \
|
||||
\
|
||||
extshape:cherry_quarter_piece extshape:cherry_vertical_quarter_piece extshape:cherry_vertical_slab extshape:cherry_vertical_stairs extshape:cherry_wall extshape:stripped_cherry_log_quarter_piece extshape:stripped_cherry_log_slab extshape:stripped_cherry_log_stairs extshape:stripped_cherry_log_vertical_quarter_piece extshape:stripped_cherry_log_vertical_slab extshape:stripped_cherry_log_vertical_stairs extshape:stripped_cherry_wood_button extshape:stripped_cherry_wood_fence extshape:stripped_cherry_wood_fence_gate extshape:stripped_cherry_wood_pressure_plate extshape:stripped_cherry_wood_quarter_piece extshape:stripped_cherry_wood_slab extshape:stripped_cherry_wood_stairs extshape:stripped_cherry_wood_vertical_quarter_piece extshape:stripped_cherry_wood_vertical_slab extshape:stripped_cherry_wood_vertical_stairs extshape:stripped_cherry_wood_wall \
|
||||
\
|
||||
extshape_blockus:cherry_mosaic_quarter_piece extshape_blockus:cherry_mosaic_vertical_quarter_piece extshape_blockus:cherry_mosaic_vertical_slab extshape_blockus:cherry_mosaic_vertical_stairs extshape_blockus:cherry_mosaic_wall extshape_blockus:herringbone_cherry_quarter_piece extshape_blockus:herringbone_cherry_slab extshape_blockus:herringbone_cherry_stairs extshape_blockus:herringbone_cherry_vertical_quarter_piece extshape_blockus:herringbone_cherry_vertical_slab extshape_blockus:herringbone_cherry_vertical_stairs extshape_blockus:herringbone_cherry_wall extshape_blockus:mossy_cherry_quarter_piece extshape_blockus:mossy_cherry_vertical_quarter_piece extshape_blockus:mossy_cherry_vertical_slab extshape_blockus:mossy_cherry_vertical_stairs extshape_blockus:mossy_cherry_wall \
|
||||
\
|
||||
handcrafted:cherry_bench handcrafted:cherry_chair handcrafted:cherry_corner_trim handcrafted:cherry_couch handcrafted:cherry_counter handcrafted:cherry_cupboard handcrafted:cherry_desk handcrafted:cherry_dining_bench handcrafted:cherry_drawer handcrafted:cherry_fancy_bed handcrafted:cherry_nightstand handcrafted:cherry_pillar_trim handcrafted:cherry_shelf handcrafted:cherry_side_table handcrafted:cherry_table \
|
||||
\
|
||||
hearth_and_home:cherry_lattice \
|
||||
\
|
||||
hydrol:cherry_wood_wall \
|
||||
\
|
||||
mcwdoors:cherry_bamboo_door mcwdoors:cherry_barn_door mcwdoors:cherry_barn_glass_door mcwdoors:cherry_beach_door mcwdoors:cherry_classic_door mcwdoors:cherry_cottage_door mcwdoors:cherry_four_panel_door mcwdoors:cherry_glass_door mcwdoors:cherry_japanese2_door mcwdoors:cherry_japanese_door mcwdoors:cherry_modern_door mcwdoors:cherry_mystic_door mcwdoors:cherry_nether_door mcwdoors:cherry_paper_door mcwdoors:cherry_stable_door mcwdoors:cherry_stable_head_door mcwdoors:cherry_swamp_door mcwdoors:cherry_tropical_door mcwdoors:cherry_western_door mcwdoors:cherry_whispering_door \
|
||||
\
|
||||
mcwlights:cherry_ceiling_fan_light:lit=false \
|
||||
\
|
||||
mcwpaths:cherry_planks_path \
|
||||
\
|
||||
mcwroofs:cherry_planks_attic_roof mcwroofs:cherry_planks_lower_roof mcwroofs:cherry_planks_roof mcwroofs:cherry_planks_steep_roof mcwroofs:cherry_planks_top_roof mcwroofs:cherry_planks_upper_lower_roof mcwroofs:cherry_planks_upper_steep_roof \
|
||||
\
|
||||
mcwtrpdoors:cherry_bamboo_trapdoor mcwtrpdoors:cherry_barn_trapdoor mcwtrpdoors:cherry_barred_trapdoor mcwtrpdoors:cherry_barrel_trapdoor mcwtrpdoors:cherry_beach_trapdoor mcwtrpdoors:cherry_classic_trapdoor mcwtrpdoors:cherry_cottage_trapdoor mcwtrpdoors:cherry_four_panel_trapdoor mcwtrpdoors:cherry_glass_trapdoor mcwtrpdoors:cherry_mystic_trapdoor mcwtrpdoors:cherry_paper_trapdoor mcwtrpdoors:cherry_ranch_trapdoor mcwtrpdoors:cherry_swamp_trapdoor mcwtrpdoors:cherry_tropical_trapdoor mcwtrpdoors:cherry_whispering_trapdoor \
|
||||
\
|
||||
mcwwindows:cherry_blinds mcwwindows:cherry_curtain_rod mcwwindows:cherry_louvered_shutter mcwwindows:cherry_plank_four_window mcwwindows:cherry_plank_pane_window mcwwindows:cherry_plank_parapet mcwwindows:cherry_plank_window mcwwindows:cherry_plank_window2 mcwwindows:cherry_shutter mcwwindows:stripped_cherry_log_four_window mcwwindows:stripped_cherry_log_window mcwwindows:stripped_cherry_log_window2 mcwwindows:stripped_cherry_pane_window \
|
||||
\
|
||||
natura:eucalyptus_button natura:eucalyptus_fence natura:eucalyptus_fence_gate natura:eucalyptus_pressure_plate natura:eucalyptus_trap_door natura:overworld_door_eucalyptus natura:overworld_slab2:type=eucalyptus natura:overworld_stairs_eucalyptus \
|
||||
\
|
||||
securitycraft:reinforced_cherry_button securitycraft:reinforced_cherry_fence securitycraft:reinforced_cherry_fence_gate securitycraft:reinforced_cherry_pressure_plate securitycraft:reinforced_cherry_slab securitycraft:reinforced_cherry_stairs \
|
||||
\
|
||||
suppsquared:ecologics/item_shelf_azalea suppsquared:ecologics/item_shelf_flowering_azalea suppsquared:item_shelf_cherry \
|
||||
\
|
||||
twigs:cherry_table \
|
||||
\
|
||||
twilightforest:cherry_banister \
|
||||
\
|
||||
wilderwild:stripped_hollowed_cherry_log
|
||||
|
||||
# Cherry Wood Stairs and Slabs
|
||||
block.10763 = cherry_slab cherry_stairs
|
||||
|
||||
# Cherry Logs
|
||||
block.10764 = cherry_log cherry_wood \
|
||||
tags_cherry_logs \
|
||||
\
|
||||
ad_astra:glacian_log \
|
||||
\
|
||||
betterend:tenanea_bark betterend:tenanea_log \
|
||||
\
|
||||
biomesoplenty:mahogany_log biomesoplenty:mahogany_wood \
|
||||
\
|
||||
biomeswevegone:mahogany_log biomeswevegone:mahogany_wood \
|
||||
\
|
||||
chipped:bundled_cherry_log chipped:center_cut_cherry_log chipped:damaged_cherry_log chipped:edge_cut_cherry_log chipped:firewood_cherry_log chipped:flowering_cherry_log chipped:mixed_cherry_log chipped:nailed_cherry_log chipped:overgrown_cherry_log chipped:planked_cherry_log chipped:reinforced_cherry_log \
|
||||
\
|
||||
dynamictrees:cherry_branch:radius=8 \
|
||||
\
|
||||
ecologics:azalea_log ecologics:azalea_wood ecologics:flowering_azalea_log ecologics:flowering_azalea_wood \
|
||||
\
|
||||
fixedminecraft:azalea_log fixedminecraft:azalea_wood \
|
||||
\
|
||||
securitycraft:reinforced_cherry_log securitycraft:reinforced_cherry_wood
|
||||
|
||||
# Cherry Non-Full Logs (Modded Only)
|
||||
block.10765 = extshape:cherry_log_stairs extshape:cherry_wood_stairs extshape:cherry_wood_slab extshape:cherry_wood_vertical_slab extshape:cherry_wood_vertical_stairs extshape:cherry_wood_quarter_piece extshape:cherry_wood_vertical_quarter_piece extshape:cherry_wood_fence extshape:cherry_wood_fence_gate extshape:cherry_wood_wall extshape:cherry_wood_button extshape:cherry_wood_pressure_plate extshape:cherry_log_slab extshape:cherry_log_vertical_slab extshape:cherry_log_vertical_stairs extshape:cherry_log_quarter_piece extshape:cherry_log_vertical_quarter_piece \
|
||||
\
|
||||
additionalplacements:extshape.cherry_log_slab additionalplacements:extshape.cherry_log_stairs additionalplacements:extshape.cherry_wood_pressure_plate additionalplacements:extshape.cherry_wood_slab additionalplacements:extshape.cherry_wood_stairs additionalplacements:extshape_blockus.cherry_small_logs_slab additionalplacements:extshape_blockus.cherry_small_logs_stairs \
|
||||
\
|
||||
blockbox:cherry_palisade blockbox:spiked_cherry_palisade \
|
||||
\
|
||||
blockus:cherry_post \
|
||||
\
|
||||
condiments:cherry_wall:up=true \
|
||||
\
|
||||
diagonalfences:extshape/cherry_log_fence diagonalfences:extshape/cherry_wood_fence diagonalfences:mcwfences/cherry_horse_fence diagonalfences:mcwfences/cherry_picket_fence diagonalfences:mcwfences/cherry_stockade_fence diagonalfences:mcwfences/cherry_wired_fence \
|
||||
\
|
||||
diagonalwalls:extshape/cherry_wood_wall \
|
||||
\
|
||||
dynamictrees:cherry_branch:radius=1 dynamictrees:cherry_branch:radius=2 dynamictrees:cherry_branch:radius=3 dynamictrees:cherry_branch:radius=4 dynamictrees:cherry_branch:radius=5 dynamictrees:cherry_branch:radius=6 dynamictrees:cherry_branch:radius=7 dynamictrees:cherry_sapling \
|
||||
\
|
||||
extshape_blockus:cherry_small_logs_quarter_piece extshape_blockus:cherry_small_logs_slab extshape_blockus:cherry_small_logs_stairs extshape_blockus:cherry_small_logs_vertical_quarter_piece extshape_blockus:cherry_small_logs_vertical_slab extshape_blockus:cherry_small_logs_vertical_stairs \
|
||||
\
|
||||
mcwbridges:cherry_bridge_pier mcwbridges:cherry_log_bridge_middle mcwbridges:cherry_log_bridge_stair mcwbridges:cherry_rail_bridge mcwbridges:cherry_rope_bridge_stair mcwbridges:rope_cherry_bridge \
|
||||
\
|
||||
mcwdoors:cherry_bark_glass_door \
|
||||
\
|
||||
mcwfences:cherry_curved_gate mcwfences:cherry_highley_gate mcwfences:cherry_horse_fence mcwfences:cherry_picket_fence mcwfences:cherry_pyramid_gate mcwfences:cherry_stockade_fence mcwfences:cherry_wired_fence \
|
||||
\
|
||||
mcwfurnitures:cherry_bookshelf mcwfurnitures:cherry_bookshelf_cupboard mcwfurnitures:cherry_bookshelf_drawer mcwfurnitures:cherry_chair mcwfurnitures:cherry_coffee_table mcwfurnitures:cherry_counter mcwfurnitures:cherry_covered_desk mcwfurnitures:cherry_cupboard_counter mcwfurnitures:cherry_desk mcwfurnitures:cherry_double_drawer mcwfurnitures:cherry_double_drawer_counter mcwfurnitures:cherry_double_kitchen_cabinet mcwfurnitures:cherry_double_wardrobe mcwfurnitures:cherry_drawer mcwfurnitures:cherry_drawer_counter mcwfurnitures:cherry_end_table mcwfurnitures:cherry_glass_kitchen_cabinet mcwfurnitures:cherry_glass_table mcwfurnitures:cherry_kitchen_cabinet mcwfurnitures:cherry_large_drawer mcwfurnitures:cherry_lower_bookshelf_drawer mcwfurnitures:cherry_lower_triple_drawer mcwfurnitures:cherry_modern_chair mcwfurnitures:cherry_modern_desk mcwfurnitures:cherry_modern_wardrobe mcwfurnitures:cherry_stool_chair mcwfurnitures:cherry_striped_chair mcwfurnitures:cherry_table mcwfurnitures:cherry_triple_drawer mcwfurnitures:cherry_wardrobe mcwfurnitures:stripped_cherry_bookshelf mcwfurnitures:stripped_cherry_bookshelf_cupboard mcwfurnitures:stripped_cherry_bookshelf_drawer mcwfurnitures:stripped_cherry_chair mcwfurnitures:stripped_cherry_coffee_table mcwfurnitures:stripped_cherry_counter mcwfurnitures:stripped_cherry_covered_desk mcwfurnitures:stripped_cherry_cupboard_counter mcwfurnitures:stripped_cherry_desk mcwfurnitures:stripped_cherry_double_drawer mcwfurnitures:stripped_cherry_double_drawer_counter mcwfurnitures:stripped_cherry_double_kitchen_cabinet mcwfurnitures:stripped_cherry_double_wardrobe mcwfurnitures:stripped_cherry_drawer mcwfurnitures:stripped_cherry_drawer_counter mcwfurnitures:stripped_cherry_end_table mcwfurnitures:stripped_cherry_glass_kitchen_cabinet mcwfurnitures:stripped_cherry_glass_table mcwfurnitures:stripped_cherry_kitchen_cabinet mcwfurnitures:stripped_cherry_large_drawer mcwfurnitures:stripped_cherry_lower_bookshelf_drawer mcwfurnitures:stripped_cherry_lower_triple_drawer mcwfurnitures:stripped_cherry_modern_chair mcwfurnitures:stripped_cherry_modern_desk mcwfurnitures:stripped_cherry_modern_wardrobe mcwfurnitures:stripped_cherry_stool_chair mcwfurnitures:stripped_cherry_striped_chair mcwfurnitures:stripped_cherry_table mcwfurnitures:stripped_cherry_triple_drawer mcwfurnitures:stripped_cherry_wardrobe \
|
||||
\
|
||||
mcwlights:cherry_tiki_torch:lit=false mcwlights:soul_cherry_tiki_torch:lit=false \
|
||||
\
|
||||
mcwroofs:cherry_attic_roof mcwroofs:cherry_lower_roof mcwroofs:cherry_roof mcwroofs:cherry_steep_roof mcwroofs:cherry_top_roof mcwroofs:cherry_upper_lower_roof mcwroofs:cherry_upper_steep_roof \
|
||||
\
|
||||
mcwstairs:cherry_balcony mcwstairs:cherry_bulk_stairs mcwstairs:cherry_compact_stairs mcwstairs:cherry_loft_stairs mcwstairs:cherry_platform mcwstairs:cherry_railing mcwstairs:cherry_skyline_stairs mcwstairs:cherry_terrace_stairs \
|
||||
\
|
||||
mcwtrpdoors:cherry_bark_trapdoor \
|
||||
\
|
||||
mcwwindows:cherry_four_window mcwwindows:cherry_log_parapet mcwwindows:cherry_pane_window mcwwindows:cherry_window mcwwindows:cherry_window2 \
|
||||
\
|
||||
missingwilds:fallen_cherry_log \
|
||||
\
|
||||
tfc:plant/cherry_branch tfc:plant/cherry_growing_branch \
|
||||
\
|
||||
twilightforest:hollow_cherry_log_climbable twilightforest:hollow_cherry_log_horizontal twilightforest:hollow_cherry_log_vertical \
|
||||
\
|
||||
wilderwild:hollowed_cherry_log
|
||||
|
||||
# Torchflower
|
||||
block.10769 = torchflower \
|
||||
\
|
||||
ars_elemental:sparkflower \
|
||||
\
|
||||
biomeswevegone:guzmania \
|
||||
\
|
||||
cinderscapes:pyracinth \
|
||||
\
|
||||
flowerpatch:torchflower
|
||||
|
||||
# Potted Torchflower
|
||||
block.10773 = potted_torchflower \
|
||||
\
|
||||
biomeswevegone:potted_guzmania \
|
||||
\
|
||||
cinderscapes:potted_pyracinth
|
||||
|
||||
# Nether Fungus - Euphoria Patches Disable Interactive Foliage
|
||||
block.10776 = warped_fungus crimson_fungus \
|
||||
\
|
||||
ad_astra:aeronos_mushroom ad_astra:strophar_mushroom \
|
||||
\
|
||||
chipped:bulbed_crimson_fungus chipped:bulbed_warped_fungus chipped:button_crimson_fungus chipped:button_warped_fungus chipped:clustered_crimson_fungus chipped:crimson_fungus_bulb chipped:crimson_fungus_bushel chipped:crimson_fungus_cluster chipped:crimson_fungus_trio chipped:double_crimson_fungus chipped:double_warped_fungus chipped:franken_crimson_fungus chipped:franken_warped_fungus chipped:hooded_crimson_fungus chipped:hooded_warped_fungus chipped:micro_crimson_fungus chipped:micro_warped_fungus chipped:mini_crimson_fungus chipped:mini_warped_fungus chipped:umbrella_crimson_fungus chipped:umbrella_warped_fungus chipped:warped_fungus_bulb chipped:warped_fungus_bushel chipped:warped_fungus_cluster chipped:warped_fungus_trio chipped:wicked_crimson_fungus chipped:wicked_warped_fungus \
|
||||
\
|
||||
cinderscapes:scorched_tendrils \
|
||||
\
|
||||
dynamictrees:crimson_sapling dynamictrees:warped_sapling \
|
||||
\
|
||||
tconstruct:blood_slime_sapling \
|
||||
\
|
||||
wilderwild:crimson_shelf_fungi wilderwild:warped_shelf_fungi
|
||||
|
||||
# Potted nether fungus
|
||||
block.10780 = potted_crimson_fungus potted_warped_fungus \
|
||||
\
|
||||
cinderscapes:potted_scorched_tendrils
|
||||
|
||||
# Calibrated Sculk Sensor Not Active
|
||||
block.10784 = calibrated_sculk_sensor:sculk_sensor_phase=inactive calibrated_sculk_sensor:sculk_sensor_phase=cooldown
|
||||
|
||||
# Calibrated Sculk Sensor Active
|
||||
block.10788 = calibrated_sculk_sensor:sculk_sensor_phase=active
|
||||
|
||||
# Oak Door Unpowered - Euphoria Patches Redstone IPBR
|
||||
block.10793 = oak_door:powered=false \
|
||||
\
|
||||
chipped:airy_oak_trapdoor:powered=false chipped:barred_oak_door:powered=false chipped:barred_oak_trapdoor:powered=false chipped:beach_oak_door:powered=false chipped:boarded_oak_door:powered=false chipped:checkered_oak_trapdoor:powered=false chipped:classic_windowed_oak_trapdoor:powered=false chipped:cobweb_oak_trapdoor:powered=false chipped:distorted_oak_trapdoor:powered=false chipped:dual_paneled_oak_door:powered=false chipped:fancy_oak_trapdoor:powered=false chipped:fortified_oak_door:powered=false chipped:gated_oak_door:powered=false chipped:glass_oak_door:powered=false chipped:golden_barred_oak_trapdoor:powered=false chipped:heavy_oak_door:powered=false chipped:heavy_oak_trapdoor:powered=false chipped:iron_barred_oak_trapdoor:powered=false chipped:leafy_oak_trapdoor:powered=false chipped:meshed_oak_trapdoor:powered=false chipped:overgrown_oak_door:powered=false chipped:overgrown_oak_trapdoor:powered=false chipped:paneled_oak_door:powered=false chipped:paper_oak_door:powered=false chipped:pointless_oak_trapdoor:powered=false chipped:pressed_oak_door:powered=false chipped:screen_oak_door:powered=false chipped:secret_oak_door:powered=false chipped:shack_oak_door:powered=false chipped:sliding_oak_door:powered=false chipped:slotted_oak_trapdoor:powered=false chipped:solid_oak_trapdoor:powered=false chipped:supported_oak_door:powered=false chipped:suspicious_oak_trapdoor:powered=false chipped:tile_windowed_oak_door:powered=false chipped:tiled_oak_door:powered=false chipped:twisted_oak_trapdoor:powered=false chipped:vined_oak_trapdoor:powered=false chipped:warted_oak_trapdoor:powered=false chipped:windowed_oak_door:powered=false chipped:windowed_oak_trapdoor:powered=false chipped:woven_oak_trapdoor:powered=false
|
||||
|
||||
# Oak Door Powered - Euphoria Patches Redstone IPBR
|
||||
block.10795 = oak_door:powered=true \
|
||||
\
|
||||
chipped:airy_oak_trapdoor:powered=true chipped:barred_oak_door:powered=true chipped:barred_oak_trapdoor:powered=true chipped:beach_oak_door:powered=true chipped:boarded_oak_door:powered=true chipped:checkered_oak_trapdoor:powered=true chipped:classic_windowed_oak_trapdoor:powered=true chipped:cobweb_oak_trapdoor:powered=true chipped:distorted_oak_trapdoor:powered=true chipped:dual_paneled_oak_door:powered=true chipped:fancy_oak_trapdoor:powered=true chipped:fortified_oak_door:powered=true chipped:gated_oak_door:powered=true chipped:glass_oak_door:powered=true chipped:golden_barred_oak_trapdoor:powered=true chipped:heavy_oak_door:powered=true chipped:heavy_oak_trapdoor:powered=true chipped:iron_barred_oak_trapdoor:powered=true chipped:leafy_oak_trapdoor:powered=true chipped:meshed_oak_trapdoor:powered=true chipped:overgrown_oak_door:powered=true chipped:overgrown_oak_trapdoor:powered=true chipped:paneled_oak_door:powered=true chipped:paper_oak_door:powered=true chipped:pointless_oak_trapdoor:powered=true chipped:pressed_oak_door:powered=true chipped:screen_oak_door:powered=true chipped:secret_oak_door:powered=true chipped:shack_oak_door:powered=true chipped:sliding_oak_door:powered=true chipped:slotted_oak_trapdoor:powered=true chipped:solid_oak_trapdoor:powered=true chipped:supported_oak_door:powered=true chipped:suspicious_oak_trapdoor:powered=true chipped:tile_windowed_oak_door:powered=true chipped:tiled_oak_door:powered=true chipped:twisted_oak_trapdoor:powered=true chipped:vined_oak_trapdoor:powered=true chipped:warted_oak_trapdoor:powered=true chipped:windowed_oak_door:powered=true chipped:windowed_oak_trapdoor:powered=true chipped:woven_oak_trapdoor:powered=true
|
||||
|
||||
# Spruce Door Unpowered - Euphoria Patches Redstone IPBR
|
||||
block.10797 = spruce_door:powered=false \
|
||||
\
|
||||
charm:azalea_door \
|
||||
\
|
||||
chipped:airy_spruce_trapdoor:powered=false chipped:barred_spruce_door:powered=false chipped:barred_spruce_trapdoor:powered=false chipped:beach_spruce_door:powered=false chipped:checkered_spruce_trapdoor:powered=false chipped:classic_spruce_trapdoor:powered=false chipped:classic_windowed_spruce_trapdoor:powered=false chipped:cobweb_spruce_trapdoor:powered=false chipped:distorted_spruce_trapdoor:powered=false chipped:dual_paneled_spruce_door:powered=false chipped:fancy_spruce_trapdoor:powered=false chipped:fortified_spruce_door:powered=false chipped:gated_spruce_door:powered=false chipped:glass_spruce_door:powered=false chipped:golden_barred_spruce_trapdoor:powered=false chipped:heavy_spruce_door:powered=false chipped:iron_barred_spruce_trapdoor:powered=false chipped:leafy_spruce_trapdoor:powered=false chipped:meshed_spruce_trapdoor:powered=false chipped:overgrown_spruce_door:powered=false chipped:overgrown_spruce_trapdoor:powered=false chipped:paneled_spruce_door:powered=false chipped:paper_spruce_door:powered=false chipped:pointless_spruce_trapdoor:powered=false chipped:pressed_spruce_door:powered=false chipped:screen_spruce_door:powered=false chipped:secret_spruce_door:powered=false chipped:shack_spruce_door:powered=false chipped:sliding_spruce_door:powered=false chipped:slotted_spruce_trapdoor:powered=false chipped:solid_spruce_trapdoor:powered=false chipped:supported_spruce_door:powered=false chipped:suspicious_spruce_trapdoor:powered=false chipped:tile_windowed_spruce_door:powered=false chipped:tiled_spruce_door:powered=false chipped:twisted_spruce_trapdoor:powered=false chipped:vined_spruce_trapdoor:powered=false chipped:warted_spruce_trapdoor:powered=false chipped:windowed_spruce_door:powered=false chipped:windowed_spruce_trapdoor:powered=false chipped:woven_spruce_trapdoor:powered=false
|
||||
|
||||
# Spruce Door Powered - Euphoria Patches Redstone IPBR
|
||||
block.10799 = spruce_door:powered=true \
|
||||
\
|
||||
chipped:airy_spruce_trapdoor:powered=true chipped:barred_spruce_door:powered=true chipped:barred_spruce_trapdoor:powered=true chipped:beach_spruce_door:powered=true chipped:checkered_spruce_trapdoor:powered=true chipped:classic_spruce_trapdoor:powered=true chipped:classic_windowed_spruce_trapdoor:powered=true chipped:cobweb_spruce_trapdoor:powered=true chipped:distorted_spruce_trapdoor:powered=true chipped:dual_paneled_spruce_door:powered=true chipped:fancy_spruce_trapdoor:powered=true chipped:fortified_spruce_door:powered=true chipped:gated_spruce_door:powered=true chipped:glass_spruce_door:powered=true chipped:golden_barred_spruce_trapdoor:powered=true chipped:heavy_spruce_door:powered=true chipped:iron_barred_spruce_trapdoor:powered=true chipped:leafy_spruce_trapdoor:powered=true chipped:meshed_spruce_trapdoor:powered=true chipped:overgrown_spruce_door:powered=true chipped:overgrown_spruce_trapdoor:powered=true chipped:paneled_spruce_door:powered=true chipped:paper_spruce_door:powered=true chipped:pointless_spruce_trapdoor:powered=true chipped:pressed_spruce_door:powered=true chipped:screen_spruce_door:powered=true chipped:secret_spruce_door:powered=true chipped:shack_spruce_door:powered=true chipped:sliding_spruce_door:powered=true chipped:slotted_spruce_trapdoor:powered=true chipped:solid_spruce_trapdoor:powered=true chipped:supported_spruce_door:powered=true chipped:suspicious_spruce_trapdoor:powered=true chipped:tile_windowed_spruce_door:powered=true chipped:tiled_spruce_door:powered=true chipped:twisted_spruce_trapdoor:powered=true chipped:vined_spruce_trapdoor:powered=true chipped:warted_spruce_trapdoor:powered=true chipped:windowed_spruce_door:powered=true chipped:windowed_spruce_trapdoor:powered=true chipped:woven_spruce_trapdoor:powered=true
|
||||
|
||||
# Birch Door Unpowered - Euphoria Patches Redstone IPBR
|
||||
block.10801 = birch_door:powered=false \
|
||||
\
|
||||
chipped:airy_birch_trapdoor:powered=false chipped:barred_birch_door:powered=false chipped:barred_birch_trapdoor:powered=false chipped:beach_birch_door:powered=false chipped:boarded_birch_door:powered=false chipped:checkered_birch_trapdoor:powered=false chipped:classic_birch_trapdoor:powered=false chipped:classic_windowed_birch_trapdoor:powered=false chipped:cobweb_birch_trapdoor:powered=false chipped:distorted_birch_trapdoor:powered=false chipped:dual_paneled_birch_door:powered=false chipped:fancy_birch_trapdoor:powered=false chipped:fortified_birch_door:powered=false chipped:gated_birch_door:powered=false chipped:glass_birch_door:powered=false chipped:golden_barred_birch_trapdoor:powered=false chipped:heavy_birch_door:powered=false chipped:heavy_birch_trapdoor:powered=false chipped:iron_barred_birch_trapdoor:powered=false chipped:leafy_birch_trapdoor:powered=false chipped:meshed_birch_trapdoor:powered=false chipped:overgrown_birch_door:powered=false chipped:overgrown_birch_trapdoor:powered=false chipped:paneled_birch_door:powered=false chipped:pointless_birch_trapdoor:powered=false chipped:pressed_birch_door:powered=false chipped:screen_birch_door:powered=false chipped:secret_birch_door:powered=false chipped:shack_birch_door:powered=false chipped:sliding_birch_door:powered=false chipped:slotted_birch_trapdoor:powered=false chipped:solid_birch_trapdoor:powered=false chipped:supported_birch_door:powered=false chipped:suspicious_birch_trapdoor:powered=false chipped:tile_windowed_birch_door:powered=false chipped:tiled_birch_door:powered=false chipped:twisted_birch_trapdoor:powered=false chipped:vined_birch_trapdoor:powered=false chipped:warted_birch_trapdoor:powered=false chipped:windowed_birch_door:powered=false chipped:windowed_birch_trapdoor:powered=false chipped:woven_birch_trapdoor:powered=false \
|
||||
\
|
||||
wilderwild:cypress_door
|
||||
|
||||
# Birch Door Powered - Euphoria Patches Redstone IPBR
|
||||
block.10803 = birch_door:powered=true \
|
||||
\
|
||||
chipped:airy_birch_trapdoor:powered=true chipped:barred_birch_door:powered=true chipped:barred_birch_trapdoor:powered=true chipped:beach_birch_door:powered=true chipped:boarded_birch_door:powered=true chipped:checkered_birch_trapdoor:powered=true chipped:classic_birch_trapdoor:powered=true chipped:classic_windowed_birch_trapdoor:powered=true chipped:cobweb_birch_trapdoor:powered=true chipped:distorted_birch_trapdoor:powered=true chipped:dual_paneled_birch_door:powered=true chipped:fancy_birch_trapdoor:powered=true chipped:fortified_birch_door:powered=true chipped:gated_birch_door:powered=true chipped:glass_birch_door:powered=true chipped:golden_barred_birch_trapdoor:powered=true chipped:heavy_birch_door:powered=true chipped:heavy_birch_trapdoor:powered=true chipped:iron_barred_birch_trapdoor:powered=true chipped:leafy_birch_trapdoor:powered=true chipped:meshed_birch_trapdoor:powered=true chipped:overgrown_birch_door:powered=true chipped:overgrown_birch_trapdoor:powered=true chipped:paneled_birch_door:powered=true chipped:pointless_birch_trapdoor:powered=true chipped:pressed_birch_door:powered=true chipped:screen_birch_door:powered=true chipped:secret_birch_door:powered=true chipped:shack_birch_door:powered=true chipped:sliding_birch_door:powered=true chipped:slotted_birch_trapdoor:powered=true chipped:solid_birch_trapdoor:powered=true chipped:supported_birch_door:powered=true chipped:suspicious_birch_trapdoor:powered=true chipped:tile_windowed_birch_door:powered=true chipped:tiled_birch_door:powered=true chipped:twisted_birch_trapdoor:powered=true chipped:vined_birch_trapdoor:powered=true chipped:warted_birch_trapdoor:powered=true chipped:windowed_birch_door:powered=true chipped:windowed_birch_trapdoor:powered=true chipped:woven_birch_trapdoor:powered=true
|
||||
|
||||
# Jungle Door Unpowered - Euphoria Patches Redstone IPBR
|
||||
block.10805 = jungle_door:powered=false \
|
||||
\
|
||||
chipped:airy_jungle_trapdoor:powered=false chipped:barred_jungle_door:powered=false chipped:barred_jungle_trapdoor:powered=false chipped:boarded_jungle_door:powered=false chipped:checkered_jungle_trapdoor:powered=false chipped:classic_jungle_trapdoor:powered=false chipped:classic_windowed_jungle_trapdoor:powered=false chipped:cobweb_jungle_trapdoor:powered=false chipped:distorted_jungle_trapdoor:powered=false chipped:dual_paneled_jungle_door:powered=false chipped:fortified_jungle_door:powered=false chipped:gated_jungle_door:powered=false chipped:glass_jungle_door:powered=false chipped:golden_barred_jungle_trapdoor:powered=false chipped:heavy_jungle_door:powered=false chipped:heavy_jungle_trapdoor:powered=false chipped:iron_barred_jungle_trapdoor:powered=false chipped:leafy_jungle_trapdoor:powered=false chipped:meshed_jungle_trapdoor:powered=false chipped:overgrown_jungle_door:powered=false chipped:overgrown_jungle_trapdoor:powered=false chipped:paneled_jungle_door:powered=false chipped:paper_jungle_door:powered=false chipped:pointless_jungle_trapdoor:powered=false chipped:pressed_jungle_door:powered=false chipped:screen_jungle_door:powered=false chipped:secret_jungle_door:powered=false chipped:shack_jungle_door:powered=false chipped:sliding_jungle_door:powered=false chipped:slotted_jungle_trapdoor:powered=false chipped:solid_jungle_trapdoor:powered=false chipped:supported_jungle_door:powered=false chipped:suspicious_jungle_trapdoor:powered=false chipped:tile_windowed_jungle_door:powered=false chipped:tiled_jungle_door:powered=false chipped:twisted_jungle_trapdoor:powered=false chipped:vined_jungle_trapdoor:powered=false chipped:warted_jungle_trapdoor:powered=false chipped:windowed_jungle_door:powered=false chipped:windowed_jungle_trapdoor:powered=false chipped:woven_jungle_trapdoor:powered=false
|
||||
|
||||
# Jungle Door Powered - Euphoria Patches Redstone IPBR
|
||||
block.10807 = jungle_door:powered=true \
|
||||
\
|
||||
chipped:airy_jungle_trapdoor:powered=true chipped:barred_jungle_door:powered=true chipped:barred_jungle_trapdoor:powered=true chipped:boarded_jungle_door:powered=true chipped:checkered_jungle_trapdoor:powered=true chipped:classic_jungle_trapdoor:powered=true chipped:classic_windowed_jungle_trapdoor:powered=true chipped:cobweb_jungle_trapdoor:powered=true chipped:distorted_jungle_trapdoor:powered=true chipped:dual_paneled_jungle_door:powered=true chipped:fortified_jungle_door:powered=true chipped:gated_jungle_door:powered=true chipped:glass_jungle_door:powered=true chipped:golden_barred_jungle_trapdoor:powered=true chipped:heavy_jungle_door:powered=true chipped:heavy_jungle_trapdoor:powered=true chipped:iron_barred_jungle_trapdoor:powered=true chipped:leafy_jungle_trapdoor:powered=true chipped:meshed_jungle_trapdoor:powered=true chipped:overgrown_jungle_door:powered=true chipped:overgrown_jungle_trapdoor:powered=true chipped:paneled_jungle_door:powered=true chipped:paper_jungle_door:powered=true chipped:pointless_jungle_trapdoor:powered=true chipped:pressed_jungle_door:powered=true chipped:screen_jungle_door:powered=true chipped:secret_jungle_door:powered=true chipped:shack_jungle_door:powered=true chipped:sliding_jungle_door:powered=true chipped:slotted_jungle_trapdoor:powered=true chipped:solid_jungle_trapdoor:powered=true chipped:supported_jungle_door:powered=true chipped:suspicious_jungle_trapdoor:powered=true chipped:tile_windowed_jungle_door:powered=true chipped:tiled_jungle_door:powered=true chipped:twisted_jungle_trapdoor:powered=true chipped:vined_jungle_trapdoor:powered=true chipped:warted_jungle_trapdoor:powered=true chipped:windowed_jungle_door:powered=true chipped:windowed_jungle_trapdoor:powered=true chipped:woven_jungle_trapdoor:powered=true
|
||||
|
||||
# Acacia Door Unpowered - Euphoria Patches Redstone IPBR
|
||||
block.10809 = acacia_door:powered=false \
|
||||
\
|
||||
chipped:barred_acacia_trapdoor:powered=false chipped:beach_acacia_door:powered=false chipped:boarded_acacia_door:powered=false chipped:checkered_acacia_trapdoor:powered=false chipped:classic_acacia_trapdoor:powered=false chipped:classic_windowed_acacia_trapdoor:powered=false chipped:cobweb_acacia_trapdoor:powered=false chipped:distorted_acacia_trapdoor:powered=false chipped:dual_paneled_acacia_door:powered=false chipped:fancy_acacia_trapdoor:powered=false chipped:fortified_acacia_door:powered=false chipped:gated_acacia_door:powered=false chipped:glass_acacia_door:powered=false chipped:golden_barred_acacia_trapdoor:powered=false chipped:heavy_acacia_door:powered=false chipped:heavy_acacia_trapdoor:powered=false chipped:iron_barred_acacia_trapdoor:powered=false chipped:leafy_acacia_trapdoor:powered=false chipped:meshed_acacia_trapdoor:powered=false chipped:overgrown_acacia_door:powered=false chipped:overgrown_acacia_trapdoor:powered=false chipped:paneled_acacia_door:powered=false chipped:paper_acacia_door:powered=false chipped:pointless_acacia_trapdoor:powered=false chipped:pressed_acacia_door:powered=false chipped:screen_acacia_door:powered=false chipped:secret_acacia_door:powered=false chipped:shack_acacia_door:powered=false chipped:sliding_acacia_door:powered=false chipped:slotted_acacia_trapdoor:powered=false chipped:solid_acacia_trapdoor:powered=false chipped:supported_acacia_door:powered=false chipped:suspicious_acacia_trapdoor:powered=false chipped:tile_windowed_acacia_door:powered=false chipped:tiled_acacia_door:powered=false chipped:twisted_acacia_trapdoor:powered=false chipped:vined_acacia_trapdoor:powered=false chipped:warted_acacia_trapdoor:powered=false chipped:windowed_acacia_door:powered=false chipped:windowed_acacia_trapdoor:powered=false chipped:woven_acacia_trapdoor:powered=false \
|
||||
\
|
||||
wilderwild:baobab_door wilderwild:palm_door
|
||||
|
||||
# Acacia Door Powered - Euphoria Patches Redstone IPBR
|
||||
block.10811 = acacia_door:powered=true \
|
||||
\
|
||||
chipped:barred_acacia_trapdoor:powered=true chipped:beach_acacia_door:powered=true chipped:boarded_acacia_door:powered=true chipped:checkered_acacia_trapdoor:powered=true chipped:classic_acacia_trapdoor:powered=true chipped:classic_windowed_acacia_trapdoor:powered=true chipped:cobweb_acacia_trapdoor:powered=true chipped:distorted_acacia_trapdoor:powered=true chipped:dual_paneled_acacia_door:powered=true chipped:fancy_acacia_trapdoor:powered=true chipped:fortified_acacia_door:powered=true chipped:gated_acacia_door:powered=true chipped:glass_acacia_door:powered=true chipped:golden_barred_acacia_trapdoor:powered=true chipped:heavy_acacia_door:powered=true chipped:heavy_acacia_trapdoor:powered=true chipped:iron_barred_acacia_trapdoor:powered=true chipped:leafy_acacia_trapdoor:powered=true chipped:meshed_acacia_trapdoor:powered=true chipped:overgrown_acacia_door:powered=true chipped:overgrown_acacia_trapdoor:powered=true chipped:paneled_acacia_door:powered=true chipped:paper_acacia_door:powered=true chipped:pointless_acacia_trapdoor:powered=true chipped:pressed_acacia_door:powered=true chipped:screen_acacia_door:powered=true chipped:secret_acacia_door:powered=true chipped:shack_acacia_door:powered=true chipped:sliding_acacia_door:powered=true chipped:slotted_acacia_trapdoor:powered=true chipped:solid_acacia_trapdoor:powered=true chipped:supported_acacia_door:powered=true chipped:suspicious_acacia_trapdoor:powered=true chipped:tile_windowed_acacia_door:powered=true chipped:tiled_acacia_door:powered=true chipped:twisted_acacia_trapdoor:powered=true chipped:vined_acacia_trapdoor:powered=true chipped:warted_acacia_trapdoor:powered=true chipped:windowed_acacia_door:powered=true chipped:windowed_acacia_trapdoor:powered=true chipped:woven_acacia_trapdoor:powered=true
|
||||
|
||||
# Dark Oak Door Unpowered - Euphoria Patches Redstone IPBR
|
||||
block.10813 = dark_oak_door:powered=false \
|
||||
\
|
||||
chipped:airy_dark_oak_trapdoor:powered=false chipped:barred_dark_oak_door:powered=false chipped:barred_dark_oak_trapdoor:powered=false chipped:beach_dark_oak_door:powered=false chipped:boarded_dark_oak_door:powered=false chipped:checkered_dark_oak_trapdoor:powered=false chipped:classic_dark_oak_trapdoor:powered=false chipped:classic_windowed_dark_oak_trapdoor:powered=false chipped:cobweb_dark_oak_trapdoor:powered=false chipped:distorted_dark_oak_trapdoor:powered=false chipped:dual_paneled_dark_oak_door:powered=false chipped:fancy_dark_oak_trapdoor:powered=false chipped:fortified_dark_oak_door:powered=false chipped:gated_dark_oak_door:powered=false chipped:glass_dark_oak_door:powered=false chipped:golden_barred_dark_oak_trapdoor:powered=false chipped:heavy_dark_oak_door:powered=false chipped:heavy_dark_oak_trapdoor:powered=false chipped:iron_barred_dark_oak_trapdoor:powered=false chipped:leafy_dark_oak_trapdoor:powered=false chipped:meshed_dark_oak_trapdoor:powered=false chipped:overgrown_dark_oak_door:powered=false chipped:overgrown_dark_oak_trapdoor:powered=false chipped:paper_dark_oak_door:powered=false chipped:pointless_dark_oak_trapdoor:powered=false chipped:pressed_dark_oak_door:powered=false chipped:screen_dark_oak_door:powered=false chipped:secret_dark_oak_door:powered=false chipped:shack_dark_oak_door:powered=false chipped:sliding_dark_oak_door:powered=false chipped:slotted_dark_oak_trapdoor:powered=false chipped:solid_dark_oak_trapdoor:powered=false chipped:supported_dark_oak_door:powered=false chipped:suspicious_dark_oak_trapdoor:powered=false chipped:tile_windowed_dark_oak_door:powered=false chipped:tiled_dark_oak_door:powered=false chipped:twisted_dark_oak_trapdoor:powered=false chipped:vined_dark_oak_trapdoor:powered=false chipped:warted_dark_oak_trapdoor:powered=false chipped:windowed_dark_oak_door:powered=false chipped:windowed_dark_oak_trapdoor:powered=false chipped:woven_dark_oak_trapdoor:powered=false
|
||||
|
||||
# Dark Oak Door Powered - Euphoria Patches Redstone IPBR
|
||||
block.10815 = dark_oak_door:powered=true \
|
||||
\
|
||||
chipped:airy_dark_oak_trapdoor:powered=true chipped:barred_dark_oak_door:powered=true chipped:barred_dark_oak_trapdoor:powered=true chipped:beach_dark_oak_door:powered=true chipped:boarded_dark_oak_door:powered=true chipped:checkered_dark_oak_trapdoor:powered=true chipped:classic_dark_oak_trapdoor:powered=true chipped:classic_windowed_dark_oak_trapdoor:powered=true chipped:cobweb_dark_oak_trapdoor:powered=true chipped:distorted_dark_oak_trapdoor:powered=true chipped:dual_paneled_dark_oak_door:powered=true chipped:fancy_dark_oak_trapdoor:powered=true chipped:fortified_dark_oak_door:powered=true chipped:gated_dark_oak_door:powered=true chipped:glass_dark_oak_door:powered=true chipped:golden_barred_dark_oak_trapdoor:powered=true chipped:heavy_dark_oak_door:powered=true chipped:heavy_dark_oak_trapdoor:powered=true chipped:iron_barred_dark_oak_trapdoor:powered=true chipped:leafy_dark_oak_trapdoor:powered=true chipped:meshed_dark_oak_trapdoor:powered=true chipped:overgrown_dark_oak_door:powered=true chipped:overgrown_dark_oak_trapdoor:powered=true chipped:paper_dark_oak_door:powered=true chipped:pointless_dark_oak_trapdoor:powered=true chipped:pressed_dark_oak_door:powered=true chipped:screen_dark_oak_door:powered=true chipped:secret_dark_oak_door:powered=true chipped:shack_dark_oak_door:powered=true chipped:sliding_dark_oak_door:powered=true chipped:slotted_dark_oak_trapdoor:powered=true chipped:solid_dark_oak_trapdoor:powered=true chipped:supported_dark_oak_door:powered=true chipped:suspicious_dark_oak_trapdoor:powered=true chipped:tile_windowed_dark_oak_door:powered=true chipped:tiled_dark_oak_door:powered=true chipped:twisted_dark_oak_trapdoor:powered=true chipped:vined_dark_oak_trapdoor:powered=true chipped:warted_dark_oak_trapdoor:powered=true chipped:windowed_dark_oak_door:powered=true chipped:windowed_dark_oak_trapdoor:powered=true chipped:woven_dark_oak_trapdoor:powered=true
|
||||
|
||||
# Mangrove Door Unpowered - Euphoria Patches Redstone IPBR
|
||||
block.10817 = mangrove_door:powered=false \
|
||||
\
|
||||
chipped:airy_mangrove_trapdoor:powered=false chipped:barred_mangrove_door:powered=false chipped:barred_mangrove_trapdoor:powered=false chipped:beach_mangrove_door:powered=false chipped:boarded_mangrove_door:powered=false chipped:checkered_mangrove_trapdoor:powered=false chipped:classic_mangrove_trapdoor:powered=false chipped:classic_windowed_mangrove_trapdoor:powered=false chipped:cobweb_mangrove_trapdoor:powered=false chipped:dual_paneled_mangrove_door:powered=false chipped:fortified_mangrove_door:powered=false chipped:gated_mangrove_door:powered=false chipped:glass_mangrove_door:powered=false chipped:golden_barred_mangrove_trapdoor:powered=false chipped:heavy_mangrove_door:powered=false chipped:heavy_mangrove_trapdoor:powered=false chipped:iron_barred_mangrove_trapdoor:powered=false chipped:leafy_mangrove_trapdoor:powered=false chipped:meshed_mangrove_trapdoor:powered=false chipped:overgrown_mangrove_door:powered=false chipped:overgrown_mangrove_trapdoor:powered=false chipped:paneled_mangrove_door:powered=false chipped:paper_mangrove_door:powered=false chipped:pointless_mangrove_trapdoor:powered=false chipped:pressed_mangrove_door:powered=false chipped:secret_mangrove_door:powered=false chipped:sliding_mangrove_door:powered=false chipped:slotted_mangrove_trapdoor:powered=false chipped:solid_mangrove_trapdoor:powered=false chipped:supported_mangrove_door:powered=false chipped:suspicious_mangrove_trapdoor:powered=false chipped:tile_windowed_mangrove_door:powered=false chipped:twisted_mangrove_trapdoor:powered=false chipped:vined_mangrove_trapdoor:powered=false chipped:warted_mangrove_trapdoor:powered=false chipped:windowed_mangrove_door:powered=false chipped:windowed_mangrove_trapdoor:powered=false chipped:woven_mangrove_trapdoor:powered=false \
|
||||
\
|
||||
wilderwild:maple_door
|
||||
|
||||
# Mangrove Door Powered - Euphoria Patches Redstone IPBR
|
||||
block.10819 = mangrove_door:powered=true \
|
||||
\
|
||||
chipped:airy_mangrove_trapdoor:powered=true chipped:barred_mangrove_door:powered=true chipped:barred_mangrove_trapdoor:powered=true chipped:beach_mangrove_door:powered=true chipped:boarded_mangrove_door:powered=true chipped:checkered_mangrove_trapdoor:powered=true chipped:classic_mangrove_trapdoor:powered=true chipped:classic_windowed_mangrove_trapdoor:powered=true chipped:cobweb_mangrove_trapdoor:powered=true chipped:dual_paneled_mangrove_door:powered=true chipped:fortified_mangrove_door:powered=true chipped:gated_mangrove_door:powered=true chipped:glass_mangrove_door:powered=true chipped:golden_barred_mangrove_trapdoor:powered=true chipped:heavy_mangrove_door:powered=true chipped:heavy_mangrove_trapdoor:powered=true chipped:iron_barred_mangrove_trapdoor:powered=true chipped:leafy_mangrove_trapdoor:powered=true chipped:meshed_mangrove_trapdoor:powered=true chipped:overgrown_mangrove_door:powered=true chipped:overgrown_mangrove_trapdoor:powered=true chipped:paneled_mangrove_door:powered=true chipped:paper_mangrove_door:powered=true chipped:pointless_mangrove_trapdoor:powered=true chipped:pressed_mangrove_door:powered=true chipped:secret_mangrove_door:powered=true chipped:sliding_mangrove_door:powered=true chipped:slotted_mangrove_trapdoor:powered=true chipped:solid_mangrove_trapdoor:powered=true chipped:supported_mangrove_door:powered=true chipped:suspicious_mangrove_trapdoor:powered=true chipped:tile_windowed_mangrove_door:powered=true chipped:twisted_mangrove_trapdoor:powered=true chipped:vined_mangrove_trapdoor:powered=true chipped:warted_mangrove_trapdoor:powered=true chipped:windowed_mangrove_door:powered=true chipped:windowed_mangrove_trapdoor:powered=true chipped:woven_mangrove_trapdoor:powered=true
|
||||
|
||||
# Crimson Door Unpowered - Euphoria Patches Redstone IPBR
|
||||
block.10821 = crimson_door:powered=false \
|
||||
\
|
||||
chipped:airy_crimson_trapdoor:powered=false chipped:barred_crimson_door:powered=false chipped:barred_crimson_trapdoor:powered=false chipped:beach_crimson_door:powered=false chipped:boarded_crimson_door:powered=false chipped:checkered_crimson_trapdoor:powered=false chipped:classic_crimson_trapdoor:powered=false chipped:classic_windowed_crimson_trapdoor:powered=false chipped:cobweb_crimson_trapdoor:powered=false chipped:distorted_crimson_trapdoor:powered=false chipped:dual_paneled_crimson_door:powered=false chipped:fancy_crimson_trapdoor:powered=false chipped:fortified_crimson_door:powered=false chipped:gated_crimson_door:powered=false chipped:glass_crimson_door:powered=false chipped:golden_barred_crimson_trapdoor:powered=false chipped:heavy_crimson_door:powered=false chipped:heavy_crimson_trapdoor:powered=false chipped:iron_barred_crimson_trapdoor:powered=false chipped:leafy_crimson_trapdoor:powered=false chipped:meshed_crimson_trapdoor:powered=false chipped:overgrown_crimson_door:powered=false chipped:overgrown_crimson_trapdoor:powered=false chipped:paneled_crimson_door:powered=false chipped:paper_crimson_door:powered=false chipped:pointless_crimson_trapdoor:powered=false chipped:pressed_crimson_door:powered=false chipped:screen_crimson_door:powered=false chipped:secret_crimson_door:powered=false chipped:shack_crimson_door:powered=false chipped:sliding_crimson_door:powered=false chipped:slotted_crimson_trapdoor:powered=false chipped:solid_crimson_trapdoor:powered=false chipped:tile_windowed_crimson_door:powered=false chipped:tiled_crimson_door:powered=false chipped:twisted_crimson_trapdoor:powered=false chipped:vined_crimson_trapdoor:powered=false chipped:warted_crimson_trapdoor:powered=false chipped:windowed_crimson_door:powered=false chipped:windowed_crimson_trapdoor:powered=false chipped:woven_crimson_trapdoor:powered=false
|
||||
|
||||
# Crimson Door Powered - Euphoria Patches Redstone IPBR
|
||||
block.10823 = crimson_door:powered=true \
|
||||
\
|
||||
chipped:airy_crimson_trapdoor:powered=true chipped:barred_crimson_door:powered=true chipped:barred_crimson_trapdoor:powered=true chipped:beach_crimson_door:powered=true chipped:boarded_crimson_door:powered=true chipped:checkered_crimson_trapdoor:powered=true chipped:classic_crimson_trapdoor:powered=true chipped:classic_windowed_crimson_trapdoor:powered=true chipped:cobweb_crimson_trapdoor:powered=true chipped:distorted_crimson_trapdoor:powered=true chipped:dual_paneled_crimson_door:powered=true chipped:fancy_crimson_trapdoor:powered=true chipped:fortified_crimson_door:powered=true chipped:gated_crimson_door:powered=true chipped:glass_crimson_door:powered=true chipped:golden_barred_crimson_trapdoor:powered=true chipped:heavy_crimson_door:powered=true chipped:heavy_crimson_trapdoor:powered=true chipped:iron_barred_crimson_trapdoor:powered=true chipped:leafy_crimson_trapdoor:powered=true chipped:meshed_crimson_trapdoor:powered=true chipped:overgrown_crimson_door:powered=true chipped:overgrown_crimson_trapdoor:powered=true chipped:paneled_crimson_door:powered=true chipped:paper_crimson_door:powered=true chipped:pointless_crimson_trapdoor:powered=true chipped:pressed_crimson_door:powered=true chipped:screen_crimson_door:powered=true chipped:secret_crimson_door:powered=true chipped:shack_crimson_door:powered=true chipped:sliding_crimson_door:powered=true chipped:slotted_crimson_trapdoor:powered=true chipped:solid_crimson_trapdoor:powered=true chipped:tile_windowed_crimson_door:powered=true chipped:tiled_crimson_door:powered=true chipped:twisted_crimson_trapdoor:powered=true chipped:vined_crimson_trapdoor:powered=true chipped:warted_crimson_trapdoor:powered=true chipped:windowed_crimson_door:powered=true chipped:windowed_crimson_trapdoor:powered=true chipped:woven_crimson_trapdoor:powered=true
|
||||
|
||||
# Warped Door Unpowered - Euphoria Patches Redstone IPBR
|
||||
block.10825 = warped_door:powered=false \
|
||||
\
|
||||
chipped:airy_warped_trapdoor:powered=false chipped:barred_warped_door:powered=false chipped:barred_warped_trapdoor:powered=false chipped:beach_warped_door:powered=false chipped:boarded_warped_door:powered=false chipped:checkered_warped_trapdoor:powered=false chipped:classic_warped_trapdoor:powered=false chipped:classic_windowed_warped_trapdoor:powered=false chipped:cobweb_warped_trapdoor:powered=false chipped:dual_paneled_warped_door:powered=false chipped:fortified_warped_door:powered=false chipped:gated_warped_door:powered=false chipped:glass_warped_door:powered=false chipped:golden_barred_warped_trapdoor:powered=false chipped:heavy_warped_door:powered=false chipped:heavy_warped_trapdoor:powered=false chipped:iron_barred_warped_trapdoor:powered=false chipped:leafy_warped_trapdoor:powered=false chipped:meshed_warped_trapdoor:powered=false chipped:overgrown_warped_trapdoor:powered=false chipped:paneled_warped_door:powered=false chipped:paper_warped_door:powered=false chipped:pointless_warped_trapdoor:powered=false chipped:pressed_warped_door:powered=false chipped:screen_warped_door:powered=false chipped:secret_warped_door:powered=false chipped:shack_warped_door:powered=false chipped:slotted_warped_trapdoor:powered=false chipped:solid_warped_trapdoor:powered=false chipped:supported_warped_door:powered=false chipped:suspicious_warped_trapdoor:powered=false chipped:tile_windowed_warped_door:powered=false chipped:tiled_warped_door:powered=false chipped:twisted_warped_trapdoor:powered=false chipped:vined_warped_trapdoor:powered=false chipped:warted_warped_trapdoor:powered=false chipped:windowed_warped_door:powered=false chipped:windowed_warped_trapdoor:powered=false chipped:woven_warped_trapdoor:powered=false
|
||||
|
||||
# Warped Door Powered - Euphoria Patches Redstone IPBR
|
||||
block.10827 = warped_door:powered=true \
|
||||
\
|
||||
chipped:airy_warped_trapdoor:powered=true chipped:barred_warped_door:powered=true chipped:barred_warped_trapdoor:powered=true chipped:beach_warped_door:powered=true chipped:boarded_warped_door:powered=true chipped:checkered_warped_trapdoor:powered=true chipped:classic_warped_trapdoor:powered=true chipped:classic_windowed_warped_trapdoor:powered=true chipped:cobweb_warped_trapdoor:powered=true chipped:dual_paneled_warped_door:powered=true chipped:fortified_warped_door:powered=true chipped:gated_warped_door:powered=true chipped:glass_warped_door:powered=true chipped:golden_barred_warped_trapdoor:powered=true chipped:heavy_warped_door:powered=true chipped:heavy_warped_trapdoor:powered=true chipped:iron_barred_warped_trapdoor:powered=true chipped:leafy_warped_trapdoor:powered=true chipped:meshed_warped_trapdoor:powered=true chipped:overgrown_warped_trapdoor:powered=true chipped:paneled_warped_door:powered=true chipped:paper_warped_door:powered=true chipped:pointless_warped_trapdoor:powered=true chipped:pressed_warped_door:powered=true chipped:screen_warped_door:powered=true chipped:secret_warped_door:powered=true chipped:shack_warped_door:powered=true chipped:slotted_warped_trapdoor:powered=true chipped:solid_warped_trapdoor:powered=true chipped:supported_warped_door:powered=true chipped:suspicious_warped_trapdoor:powered=true chipped:tile_windowed_warped_door:powered=true chipped:tiled_warped_door:powered=true chipped:twisted_warped_trapdoor:powered=true chipped:vined_warped_trapdoor:powered=true chipped:warted_warped_trapdoor:powered=true chipped:windowed_warped_door:powered=true chipped:windowed_warped_trapdoor:powered=true chipped:woven_warped_trapdoor:powered=true
|
||||
|
||||
# Bamboo Door Unpowered - Euphoria Patches Redstone IPBR
|
||||
block.10829 = bamboo_door:powered=false \
|
||||
\
|
||||
chipped:barred_bamboo_door:powered=false chipped:barred_bamboo_trapdoor:powered=false chipped:beach_bamboo_door:powered=false chipped:boarded_bamboo_door:powered=false chipped:checkered_bamboo_trapdoor:powered=false chipped:classic_bamboo_trapdoor:powered=false chipped:classic_windowed_bamboo_trapdoor:powered=false chipped:cobweb_bamboo_trapdoor:powered=false chipped:distorted_bamboo_trapdoor:powered=false chipped:dual_paneled_bamboo_door:powered=false chipped:fancy_bamboo_trapdoor:powered=false chipped:fortified_bamboo_door:powered=false chipped:gated_bamboo_door:powered=false chipped:glass_bamboo_door:powered=false chipped:golden_barred_bamboo_trapdoor:powered=false chipped:heavy_bamboo_door:powered=false chipped:heavy_bamboo_trapdoor:powered=false chipped:iron_barred_bamboo_trapdoor:powered=false chipped:leafy_bamboo_trapdoor:powered=false chipped:meshed_bamboo_trapdoor:powered=false chipped:overgrown_bamboo_door:powered=false chipped:overgrown_bamboo_trapdoor:powered=false chipped:paneled_bamboo_door:powered=false chipped:paper_bamboo_door:powered=false chipped:pointless_bamboo_trapdoor:powered=false chipped:pressed_bamboo_door:powered=false chipped:screen_bamboo_door:powered=false chipped:secret_bamboo_door:powered=false chipped:shack_bamboo_door:powered=false chipped:sliding_bamboo_door:powered=false chipped:slotted_bamboo_trapdoor:powered=false chipped:solid_bamboo_trapdoor:powered=false chipped:supported_bamboo_door:powered=false chipped:suspicious_bamboo_trapdoor:powered=false chipped:tile_windowed_bamboo_door:powered=false chipped:tiled_bamboo_door:powered=false chipped:twisted_bamboo_trapdoor:powered=false chipped:vined_bamboo_trapdoor:powered=false chipped:warted_bamboo_trapdoor:powered=false chipped:windowed_bamboo_trapdoor:powered=false chipped:woven_bamboo_trapdoor:powered=false
|
||||
|
||||
# Bamboo Door Powered - Euphoria Patches Redstone IPBR
|
||||
block.10831 = bamboo_door:powered=true \
|
||||
\
|
||||
chipped:barred_bamboo_door:powered=true chipped:barred_bamboo_trapdoor:powered=true chipped:beach_bamboo_door:powered=true chipped:boarded_bamboo_door:powered=true chipped:checkered_bamboo_trapdoor:powered=true chipped:classic_bamboo_trapdoor:powered=true chipped:classic_windowed_bamboo_trapdoor:powered=true chipped:cobweb_bamboo_trapdoor:powered=true chipped:distorted_bamboo_trapdoor:powered=true chipped:dual_paneled_bamboo_door:powered=true chipped:fancy_bamboo_trapdoor:powered=true chipped:fortified_bamboo_door:powered=true chipped:gated_bamboo_door:powered=true chipped:glass_bamboo_door:powered=true chipped:golden_barred_bamboo_trapdoor:powered=true chipped:heavy_bamboo_door:powered=true chipped:heavy_bamboo_trapdoor:powered=true chipped:iron_barred_bamboo_trapdoor:powered=true chipped:leafy_bamboo_trapdoor:powered=true chipped:meshed_bamboo_trapdoor:powered=true chipped:overgrown_bamboo_door:powered=true chipped:overgrown_bamboo_trapdoor:powered=true chipped:paneled_bamboo_door:powered=true chipped:paper_bamboo_door:powered=true chipped:pointless_bamboo_trapdoor:powered=true chipped:pressed_bamboo_door:powered=true chipped:screen_bamboo_door:powered=true chipped:secret_bamboo_door:powered=true chipped:shack_bamboo_door:powered=true chipped:sliding_bamboo_door:powered=true chipped:slotted_bamboo_trapdoor:powered=true chipped:solid_bamboo_trapdoor:powered=true chipped:supported_bamboo_door:powered=true chipped:suspicious_bamboo_trapdoor:powered=true chipped:tile_windowed_bamboo_door:powered=true chipped:tiled_bamboo_door:powered=true chipped:twisted_bamboo_trapdoor:powered=true chipped:vined_bamboo_trapdoor:powered=true chipped:warted_bamboo_trapdoor:powered=true chipped:windowed_bamboo_trapdoor:powered=true chipped:woven_bamboo_trapdoor:powered=true
|
||||
|
||||
# Cherry Door Unpowered - Euphoria Patches Redstone IPBR
|
||||
block.10833 = cherry_door:powered=false \
|
||||
\
|
||||
chipped:barred_cherry_door:powered=false chipped:barred_cherry_trapdoor:powered=false chipped:beach_cherry_door:powered=false chipped:boarded_cherry_door:powered=false chipped:checkered_cherry_trapdoor:powered=false chipped:classic_cherry_trapdoor:powered=false chipped:classic_windowed_cherry_trapdoor:powered=false chipped:cobweb_cherry_trapdoor:powered=false chipped:distorted_cherry_trapdoor:powered=false chipped:dual_paneled_cherry_door:powered=false chipped:fancy_cherry_trapdoor:powered=false chipped:fortified_cherry_door:powered=false chipped:gated_cherry_door:powered=false chipped:glass_cherry_door:powered=false chipped:golden_barred_cherry_trapdoor:powered=false chipped:heavy_cherry_door:powered=false chipped:heavy_cherry_trapdoor:powered=false chipped:iron_barred_cherry_trapdoor:powered=false chipped:leafy_cherry_trapdoor:powered=false chipped:meshed_cherry_trapdoor:powered=false chipped:overgrown_cherry_door:powered=false chipped:overgrown_cherry_trapdoor:powered=false chipped:paneled_cherry_door:powered=false chipped:paper_cherry_door:powered=false chipped:pointless_cherry_trapdoor:powered=false chipped:pressed_cherry_door:powered=false chipped:screen_cherry_door:powered=false chipped:secret_cherry_door:powered=false chipped:shack_cherry_door:powered=false chipped:sliding_cherry_door:powered=false chipped:slotted_cherry_trapdoor:powered=false chipped:solid_cherry_trapdoor:powered=false chipped:supported_cherry_door:powered=false chipped:suspicious_cherry_trapdoor:powered=false chipped:tile_windowed_cherry_door:powered=false chipped:tiled_cherry_door:powered=false chipped:twisted_cherry_trapdoor:powered=false chipped:vined_cherry_trapdoor:powered=false chipped:warted_cherry_trapdoor:powered=false chipped:windowed_cherry_trapdoor:powered=false chipped:woven_cherry_trapdoor:powered=false
|
||||
|
||||
# Cherry Door Powered - Euphoria Patches Redstone IPBR
|
||||
block.10835 = cherry_door:powered=true \
|
||||
\
|
||||
chipped:barred_cherry_door:powered=true chipped:barred_cherry_trapdoor:powered=true chipped:beach_cherry_door:powered=true chipped:boarded_cherry_door:powered=true chipped:checkered_cherry_trapdoor:powered=true chipped:classic_cherry_trapdoor:powered=true chipped:classic_windowed_cherry_trapdoor:powered=true chipped:cobweb_cherry_trapdoor:powered=true chipped:distorted_cherry_trapdoor:powered=true chipped:dual_paneled_cherry_door:powered=true chipped:fancy_cherry_trapdoor:powered=true chipped:fortified_cherry_door:powered=true chipped:gated_cherry_door:powered=true chipped:glass_cherry_door:powered=true chipped:golden_barred_cherry_trapdoor:powered=true chipped:heavy_cherry_door:powered=true chipped:heavy_cherry_trapdoor:powered=true chipped:iron_barred_cherry_trapdoor:powered=true chipped:leafy_cherry_trapdoor:powered=true chipped:meshed_cherry_trapdoor:powered=true chipped:overgrown_cherry_door:powered=true chipped:overgrown_cherry_trapdoor:powered=true chipped:paneled_cherry_door:powered=true chipped:paper_cherry_door:powered=true chipped:pointless_cherry_trapdoor:powered=true chipped:pressed_cherry_door:powered=true chipped:screen_cherry_door:powered=true chipped:secret_cherry_door:powered=true chipped:shack_cherry_door:powered=true chipped:sliding_cherry_door:powered=true chipped:slotted_cherry_trapdoor:powered=true chipped:solid_cherry_trapdoor:powered=true chipped:supported_cherry_door:powered=true chipped:suspicious_cherry_trapdoor:powered=true chipped:tile_windowed_cherry_door:powered=true chipped:tiled_cherry_door:powered=true chipped:twisted_cherry_trapdoor:powered=true chipped:vined_cherry_trapdoor:powered=true chipped:warted_cherry_trapdoor:powered=true chipped:windowed_cherry_trapdoor:powered=true chipped:woven_cherry_trapdoor:powered=true
|
||||
|
||||
# Brewing Stand
|
||||
block.10836 = brewing_stand \
|
||||
\
|
||||
betternether:nether_brewing_stand \
|
||||
\
|
||||
supplementaries:silver_lantern:lit=true \
|
||||
\
|
||||
twilightforest:encased_fire_jet:state=flame twilightforest:fire_jet:state=flame
|
||||
|
||||
# Lime Concrete - Euphoria Patches Green Screen
|
||||
block.10840 = lime_concrete
|
||||
|
||||
# Blue Wool - Euphoria Patches Blue Screen
|
||||
block.10842 = blue_wool
|
||||
|
||||
# Blue Carpet - Euphoria Patches Blue Screen
|
||||
block.10843 = blue_carpet \
|
||||
\
|
||||
additionalplacements:minecraft.blue_carpet
|
||||
|
||||
# Lime Wool - Euphoria Patches Green Screen
|
||||
block.10844 = lime_wool
|
||||
|
||||
# Lime Carpet - Euphoria Patches Green Screen
|
||||
block.10845 = lime_carpet \
|
||||
\
|
||||
additionalplacements:minecraft.lime_carpet
|
||||
|
||||
# Blue Concrete - Euphoria Patches Euphoria Patches Blue Screen
|
||||
block.10846 = blue_concrete
|
||||
|
||||
# Crafter
|
||||
block.10848 = crafter
|
||||
|
||||
# Copper Bulb - Normal And Exposed - Lit
|
||||
block.10852 = copper_bulb:lit=true waxed_copper_bulb:lit=true exposed_copper_bulb:lit=true waxed_exposed_copper_bulb:lit=true \
|
||||
\
|
||||
oritech:accelerator_motor
|
||||
|
||||
# Copper Bulb - Normal And Exposed - Unlit
|
||||
block.10854 = copper_bulb:lit=false waxed_copper_bulb:lit=false exposed_copper_bulb:lit=false waxed_exposed_copper_bulb:lit=false
|
||||
@@ -0,0 +1,498 @@
|
||||
### Last updated: February 10, 2026, 11:05 UTC
|
||||
# Copyright (c) 2026 SpacEagle17 – Licensed under the MIT License: https://opensource.org/licenses/MIT
|
||||
|
||||
# Copper Bulb - Weathered And Oxidized - Lit
|
||||
block.10856 = weathered_copper_bulb:lit=true waxed_weathered_copper_bulb:lit=true oxidized_copper_bulb:lit=true waxed_oxidized_copper_bulb:lit=true
|
||||
|
||||
# Copper Bulb - Weathered And Oxidized - Unlit
|
||||
block.10858 = weathered_copper_bulb:lit=false waxed_weathered_copper_bulb:lit=false oxidized_copper_bulb:lit=false waxed_oxidized_copper_bulb:lit=false
|
||||
|
||||
# Copper Door Unpowered - Euphoria Patches Redstone IPBR
|
||||
block.10861 = copper_door:powered=false exposed_copper_door:powered=false weathered_copper_door:powered=false oxidized_copper_door:powered=false waxed_copper_door:powered=false waxed_exposed_copper_door:powered=false waxed_weathered_copper_door:powered=false waxed_oxidized_copper_door:powered=false
|
||||
|
||||
# Copper Door Powered - Euphoria Patches Redstone IPBR
|
||||
block.10863 = copper_door:powered=true exposed_copper_door:powered=true weathered_copper_door:powered=true oxidized_copper_door:powered=true waxed_copper_door:powered=true waxed_exposed_copper_door:powered=true waxed_weathered_copper_door:powered=true waxed_oxidized_copper_door:powered=true \
|
||||
\
|
||||
immersiveengineering:connector_bundled immersiveengineering:connector_probe immersiveengineering:connector_redstone immersiveengineering:conveyor_redstone immersiveengineering:redstone_breaker immersiveengineering:redstone_switchboard
|
||||
|
||||
# Copper Trapdoor Unpowered - Euphoria Patches Redstone IPBR
|
||||
block.10865 = copper_trapdoor:powered=false exposed_copper_trapdoor:powered=false weathered_copper_trapdoor:powered=false oxidized_copper_trapdoor:powered=false waxed_copper_trapdoor:powered=false waxed_exposed_copper_trapdoor:powered=false waxed_weathered_copper_trapdoor:powered=false waxed_oxidized_copper_trapdoor:powered=false
|
||||
|
||||
# Copper Trapdoor Powered - Euphoria Patches Redstone IPBR
|
||||
block.10867 = copper_trapdoor:powered=true exposed_copper_trapdoor:powered=true weathered_copper_trapdoor:powered=true oxidized_copper_trapdoor:powered=true waxed_copper_trapdoor:powered=true waxed_exposed_copper_trapdoor:powered=true waxed_weathered_copper_trapdoor:powered=true waxed_oxidized_copper_trapdoor:powered=true
|
||||
|
||||
# Trial Spawner Active
|
||||
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
|
||||
|
||||
# Trial Spawner Inactive
|
||||
block.10872 = vault:ominous=false:vault_state=inactive vault:ominous=true:vault_state=inactive
|
||||
|
||||
# Trial Spawner Cooldown
|
||||
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
|
||||
|
||||
# Trial Spawner Ominous Active
|
||||
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
|
||||
|
||||
# Nether Vines with ACT Light
|
||||
block.10884 = weeping_vines_plant
|
||||
|
||||
# Nether Vines without ACT Light
|
||||
block.10885 = weeping_vines twisting_vines_plant twisting_vines \
|
||||
\
|
||||
betterend:bulb_vine:shape=middle betterend:bulb_vine:shape=top betterend:charnia_cyan betterend:charnia_green betterend:charnia_light_blue betterend:charnia_orange betterend:charnia_purple betterend:charnia_red betterend:dense_vine:shape=middle betterend:dense_vine:shape=top betterend:end_lily:shape=bottom betterend:end_lily:shape=middle betterend:filalux:shape=middle betterend:filalux:shape=top betterend:jungle_vine betterend:lanceleaf betterend:magnula betterend:murkweed betterend:rubinea betterend:twisted_vine \
|
||||
\
|
||||
betternether:anchor_tree_vine:shape=middle betternether:anchor_tree_vine:shape=top betternether:black_vine betternether:blooming_vine betternether:eye_vine betternether:nether_reed_stem betternether:whispering_gourd_vine betternether:willow_branch:shape=middle \
|
||||
\
|
||||
chipped:nether_vine \
|
||||
\
|
||||
natura:nether_thorn_vines
|
||||
|
||||
# Hay Bale
|
||||
block.10888 = hay_block \
|
||||
\
|
||||
additionalplacements:blockus.thatch_slab additionalplacements:blockus.thatch_stairs \
|
||||
\
|
||||
allthecompressed:hay_block_1x allthecompressed:hay_block_2x allthecompressed:hay_block_3x allthecompressed:hay_block_4x allthecompressed:hay_block_5x allthecompressed:hay_block_6x allthecompressed:hay_block_7x allthecompressed:hay_block_8x allthecompressed:hay_block_9x \
|
||||
\
|
||||
blockus:thatch blockus:thatch_slab blockus:thatch_stairs \
|
||||
\
|
||||
chipped:antique_hay_block chipped:bundled_hay_block chipped:detailed_hay_block chipped:fertile_hay_block chipped:jungle_hay_block chipped:pale_hay_block chipped:rich_hay_block chipped:swampy_hay_block \
|
||||
\
|
||||
farm_and_charm:barley_ball farm_and_charm:oat_ball \
|
||||
\
|
||||
farmersdelight:rice_bale farmersdelight:straw_bale farmersdelight:tatami \
|
||||
\
|
||||
hearth_and_home:thatch \
|
||||
\
|
||||
iceandfire:nest \
|
||||
\
|
||||
quark:thatch quark:thatch_slab_double \
|
||||
\
|
||||
supplementaries:flax_block \
|
||||
\
|
||||
twigs:bamboo_thatch twigs:bamboo_thatch_slab
|
||||
|
||||
# Hay Non-Full Blocks (Modded Only)
|
||||
block.10889 = farmersdelight:full_tatami_mat farmersdelight:half_tatami_mat farmersdelight:canvas_rug \
|
||||
\
|
||||
additionalplacements:extshape_blockus.thatch_pressure_plate \
|
||||
\
|
||||
brewinandchewin:coaster \
|
||||
\
|
||||
chococraftplus:strawblock \
|
||||
\
|
||||
diagonalfences:extshape_blockus/thatch_fence \
|
||||
\
|
||||
diagonalwalls:extshape_blockus/thatch_wall \
|
||||
\
|
||||
extshape_blockus:thatch_button extshape_blockus:thatch_fence extshape_blockus:thatch_fence_gate extshape_blockus:thatch_pressure_plate extshape_blockus:thatch_quarter_piece extshape_blockus:thatch_vertical_quarter_piece extshape_blockus:thatch_vertical_slab extshape_blockus:thatch_vertical_stairs extshape_blockus:thatch_wall \
|
||||
\
|
||||
hearth_and_home:thatch_slab hearth_and_home:thatch_stairs \
|
||||
\
|
||||
mcwroofs:thatch_attic_roof mcwroofs:thatch_lower_roof mcwroofs:thatch_roof mcwroofs:thatch_steep_roof mcwroofs:thatch_top_roof mcwroofs:thatch_upper_lower_roof mcwroofs:thatch_upper_steep_roof \
|
||||
\
|
||||
quark:thatch_slab quark:thatch_stairs
|
||||
|
||||
# Normal Iron Door - Euphoria Patches Redstone IPBR
|
||||
block.10891 = iron_door:powered=false \
|
||||
\
|
||||
immersive_weathering:exposed_iron_door immersive_weathering:rusted_iron_door immersive_weathering:waxed_exposed_iron_door immersive_weathering:waxed_iron_door:powered=false immersive_weathering:waxed_rusted_iron_door immersive_weathering:waxed_weathered_iron_door immersive_weathering:weathered_iron_door \
|
||||
\
|
||||
justagreenhouse:greenhouse_door \
|
||||
\
|
||||
supplementaries:lead_door supplementaries:silver_door \
|
||||
\
|
||||
tfmg:heavy_casing_door tfmg:steel_door
|
||||
|
||||
# Powered Iron Door - Euphoria Patches Redstone IPBR
|
||||
block.10893 = iron_door:powered=true \
|
||||
\
|
||||
immersive_weathering:waxed_iron_door:powered=true
|
||||
|
||||
# Unpowered Iron Trapdoor - Euphoria Patches Redstone IPBR
|
||||
block.10897 = iron_trapdoor:powered=false \
|
||||
\
|
||||
immersive_weathering:exposed_iron_trapdoor immersive_weathering:rusted_iron_trapdoor immersive_weathering:waxed_exposed_iron_trapdoor immersive_weathering:waxed_iron_trapdoor:powered=false immersive_weathering:waxed_rusted_iron_trapdoor immersive_weathering:waxed_weathered_iron_trapdoor immersive_weathering:weathered_iron_trapdoor \
|
||||
\
|
||||
supplementaries:lead_trapdoor supplementaries:silver_trapdoor
|
||||
|
||||
# Powered Iron Trapdoor - Euphoria Patches Redstone IPBR
|
||||
block.10899 = iron_trapdoor:powered=true \
|
||||
\
|
||||
immersive_weathering:waxed_iron_trapdoor:powered=true
|
||||
|
||||
|
||||
##### CANDLES #####
|
||||
|
||||
# Normal Candles
|
||||
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 \
|
||||
\
|
||||
amendments:skull_candle amendments:skull_candle_wall \
|
||||
\
|
||||
beautify:lamp_candelabra:on=true beautify:lamp_candelabra_black:on=true beautify:lamp_candelabra_brown:on=true beautify:lamp_candelabra_gray:on=true beautify:lamp_candelabra_light_gray:on=true beautify:lamp_candelabra_white:on=true \
|
||||
\
|
||||
burnt:smoldering_books_start \
|
||||
\
|
||||
dyenamics:amber_candle:lit=true dyenamics:aquamarine_candle:lit=true dyenamics:bubblegum_candle:lit=true dyenamics:cherenkov_candle:lit=true dyenamics:conifer_candle:lit=true dyenamics:fluorescent_candle:lit=true dyenamics:honey_candle:lit=true dyenamics:icy_blue_candle:lit=true dyenamics:lavender_candle:lit=true dyenamics:maroon_candle:lit=true dyenamics:mint_candle:lit=true dyenamics:navy_candle:lit=true dyenamics:peach_candle:lit=true dyenamics:persimmon_candle:lit=true dyenamics:rose_candle:lit=true dyenamics:spring_green_candle:lit=true dyenamics:ultramarine_candle:lit=true dyenamics:wine_candle:lit=true \
|
||||
\
|
||||
eidolon:candle:lit=true eidolon:candlestick:lit=true eidolon:magic_candle:lit=true eidolon:magic_candlestick:lit=true \
|
||||
\
|
||||
luminous_nether:candle_stand_top luminous_nether:lit_skull_candle luminous_nether:lit_wither_skull_candle luminous_nether:nether_candle_stand_top luminous_nether:nether_wall_candle_on luminous_nether:wall_candle \
|
||||
\
|
||||
mcwlights:copper_candle_holder:lit=true mcwlights:copper_chandelier:lit=true mcwlights:copper_double_candle_holder:lit=true mcwlights:copper_low_candle_holder:lit=true mcwlights:copper_small_chandelier:lit=true mcwlights:copper_triple_candle_holder:lit=true mcwlights:copper_wall_candle_holder:lit=true mcwlights:golden_candle_holder:lit=true mcwlights:golden_chandelier:lit=true mcwlights:golden_double_candle_holder:lit=true mcwlights:golden_low_candle_holder:lit=true mcwlights:golden_small_chandelier:lit=true mcwlights:golden_triple_candle_holder:lit=true mcwlights:golden_wall_candle_holder:lit=true mcwlights:iron_candle_holder:lit=true mcwlights:iron_chandelier:lit=true mcwlights:iron_double_candle_holder:lit=true mcwlights:iron_low_candle_holder:lit=true mcwlights:iron_small_chandelier:lit=true mcwlights:iron_triple_candle_holder:lit=true mcwlights:iron_wall_candle_holder:lit=true \
|
||||
\
|
||||
spelunkery:salt_lamp:lit=true \
|
||||
\
|
||||
supplementaries:candle_holder:lit=true supplementaries:candle_holder_black:lit=true supplementaries:candle_holder_brown:lit=true supplementaries:candle_holder_gray:lit=true supplementaries:candle_holder_light_gray:lit=true supplementaries:candle_holder_white:lit=true supplementaries:statue:lit=true \
|
||||
\
|
||||
suppsquared:gold_candle_holder:lit=true suppsquared:gold_candle_holder_black:lit=true suppsquared:gold_candle_holder_brown:lit=true suppsquared:gold_candle_holder_gray:lit=true suppsquared:gold_candle_holder_light_gray:lit=true suppsquared:gold_candle_holder_white:lit=true \
|
||||
\
|
||||
tfc:candle/black:lit=true tfc:candle/brown:lit=true tfc:candle/gray:lit=true tfc:candle/light_gray:lit=true tfc:candle/white:lit=true tfc:candle:lit=true tfc:candle_cake/black:lit=true tfc:candle_cake/brown:lit=true tfc:candle_cake/gray:lit=true tfc:candle_cake/light_gray:lit=true tfc:candle_cake/white:lit=true tfc:candle_cake:lit=true \
|
||||
\
|
||||
the_bumblezone:super_candle:lit=true the_bumblezone:super_candle_black:lit=true the_bumblezone:super_candle_brown:lit=true the_bumblezone:super_candle_gray:lit=true the_bumblezone:super_candle_light_gray:lit=true the_bumblezone:super_candle_white:lit=true \
|
||||
\
|
||||
twilightforest:candelabra:lighting=dim twilightforest:candelabra:lighting=normal
|
||||
|
||||
# Red Candles
|
||||
block.10902 = red_candle:lit=true red_candle_cake:lit=true \
|
||||
\
|
||||
beautify:lamp_candelabra_red:on=true \
|
||||
\
|
||||
luminous_nether:ritual_table \
|
||||
\
|
||||
supplementaries:candle_holder_red:lit=true \
|
||||
\
|
||||
suppsquared:gold_candle_holder_red:lit=true \
|
||||
\
|
||||
tfc:candle/red:lit=true tfc:candle_cake/red:lit=true \
|
||||
\
|
||||
the_bumblezone:super_candle_red:lit=true
|
||||
|
||||
# Orange Candles
|
||||
block.10904 = orange_candle:lit=true orange_candle_cake:lit=true \
|
||||
\
|
||||
beautify:lamp_candelabra_orange:on=true \
|
||||
\
|
||||
oceans_enhancements:orananem oceans_enhancements:orsm oceans_enhancements:orwide \
|
||||
\
|
||||
supplementaries:candle_holder_orange:lit=true \
|
||||
\
|
||||
suppsquared:gold_candle_holder_orange:lit=true \
|
||||
\
|
||||
tfc:candle/orange:lit=true tfc:candle_cake/orange:lit=true \
|
||||
\
|
||||
the_bumblezone:super_candle_orange:lit=true
|
||||
|
||||
# Yellow Candles
|
||||
block.10906 = yellow_candle:lit=true yellow_candle_cake:lit=true \
|
||||
\
|
||||
beautify:lamp_candelabra_yellow:on=true \
|
||||
\
|
||||
supplementaries:candle_holder_yellow:lit=true \
|
||||
\
|
||||
suppsquared:gold_candle_holder_yellow:lit=true \
|
||||
\
|
||||
tfc:candle/yellow:lit=true tfc:candle_cake/yellow:lit=true \
|
||||
\
|
||||
the_bumblezone:super_candle_yellow:lit=true
|
||||
|
||||
# Lime Candles
|
||||
block.10908 = lime_candle:lit=true lime_candle_cake:lit=true \
|
||||
\
|
||||
beautify:lamp_candelabra_lime:on=true \
|
||||
\
|
||||
supplementaries:candle_holder_lime:lit=true \
|
||||
\
|
||||
suppsquared:gold_candle_holder_lime:lit=true \
|
||||
\
|
||||
tfc:candle/lime:lit=true tfc:candle_cake/lime:lit=true \
|
||||
\
|
||||
the_bumblezone:super_candle_lime:lit=true
|
||||
|
||||
# Green Candles
|
||||
block.10910 = green_candle:lit=true green_candle_cake:lit=true \
|
||||
\
|
||||
beautify:lamp_candelabra_green:on=true \
|
||||
\
|
||||
supplementaries:candle_holder_green:lit=true \
|
||||
\
|
||||
suppsquared:gold_candle_holder_green:lit=true \
|
||||
\
|
||||
tfc:candle/green:lit=true tfc:candle_cake/green:lit=true \
|
||||
\
|
||||
the_bumblezone:super_candle_green:lit=true
|
||||
|
||||
# Cyan Candles
|
||||
block.10912 = cyan_candle:lit=true cyan_candle_cake:lit=true \
|
||||
\
|
||||
beautify:lamp_candelabra_cyan:on=true \
|
||||
\
|
||||
supplementaries:candle_holder_cyan:lit=true \
|
||||
\
|
||||
suppsquared:gold_candle_holder_cyan:lit=true \
|
||||
\
|
||||
tfc:candle/cyan:lit=true tfc:candle_cake/cyan:lit=true \
|
||||
\
|
||||
the_bumblezone:super_candle_cyan:lit=true
|
||||
|
||||
# Light Blue Candles
|
||||
block.10914 = light_blue_candle:lit=true light_blue_candle_cake:lit=true \
|
||||
\
|
||||
beautify:lamp_candelabra_light_blue:on=true \
|
||||
\
|
||||
oceans_enhancements:banem oceans_enhancements:bsm oceans_enhancements:bwide \
|
||||
\
|
||||
supplementaries:candle_holder_light_blue:lit=true \
|
||||
\
|
||||
suppsquared:gold_candle_holder_light_blue:lit=true \
|
||||
\
|
||||
tfc:candle/light_blue:lit=true tfc:candle_cake/light_blue:lit=true \
|
||||
\
|
||||
the_bumblezone:super_candle_light_blue:lit=true
|
||||
|
||||
# Blue Candles
|
||||
block.10916 = blue_candle:lit=true blue_candle_cake:lit=true \
|
||||
\
|
||||
beautify:lamp_candelabra_blue:on=true \
|
||||
\
|
||||
supplementaries:candle_holder_blue:lit=true \
|
||||
\
|
||||
suppsquared:gold_candle_holder_blue:lit=true \
|
||||
\
|
||||
tfc:candle/blue:lit=true tfc:candle_cake/blue:lit=true \
|
||||
\
|
||||
the_bumblezone:super_candle_blue:lit=true
|
||||
|
||||
# Purple Candles
|
||||
block.10918 = purple_candle:lit=true purple_candle_cake:lit=true \
|
||||
\
|
||||
beautify:lamp_candelabra_purple:on=true \
|
||||
\
|
||||
supplementaries:candle_holder_purple:lit=true \
|
||||
\
|
||||
suppsquared:gold_candle_holder_purple:lit=true \
|
||||
\
|
||||
tfc:candle/purple:lit=true tfc:candle_cake/purple:lit=true \
|
||||
\
|
||||
the_bumblezone:super_candle_purple:lit=true \
|
||||
\
|
||||
twilightforest:candelabra:lighting=ominous
|
||||
|
||||
# Magenta Candles
|
||||
block.10920 = magenta_candle:lit=true magenta_candle_cake:lit=true \
|
||||
\
|
||||
beautify:lamp_candelabra_magenta:on=true \
|
||||
\
|
||||
supplementaries:candle_holder_magenta:lit=true \
|
||||
\
|
||||
suppsquared:gold_candle_holder_magenta:lit=true \
|
||||
\
|
||||
tfc:candle/magenta:lit=true tfc:candle_cake/magenta:lit=true \
|
||||
\
|
||||
the_bumblezone:super_candle_magenta:lit=true
|
||||
|
||||
# Pink Candles
|
||||
block.10922 = pink_candle:lit=true pink_candle_cake:lit=true \
|
||||
\
|
||||
beautify:lamp_candelabra_pink:on=true \
|
||||
\
|
||||
oceans_enhancements:anemone oceans_enhancements:anemone_small oceans_enhancements:wide_sea_anemone \
|
||||
\
|
||||
supplementaries:candle_holder_pink:lit=true \
|
||||
\
|
||||
suppsquared:gold_candle_holder_pink:lit=true \
|
||||
\
|
||||
tfc:candle/pink:lit=true tfc:candle_cake/pink:lit=true \
|
||||
\
|
||||
the_bumblezone:super_candle_pink:lit=true
|
||||
|
||||
# Pale Hanging Moss - Euphoria Patches Interactive Foliage
|
||||
block.10923 = pale_hanging_moss \
|
||||
\
|
||||
betterend:filalux_wings:facing=down betterend:filalux_wings:facing=east betterend:filalux_wings:facing=north betterend:filalux_wings:facing=south betterend:filalux_wings:facing=west \
|
||||
\
|
||||
vanillabackport:pale_hanging_moss
|
||||
|
||||
# Moss Block
|
||||
block.10924 = moss_block pale_moss_block \
|
||||
tags_moss_block \
|
||||
\
|
||||
allthecompressed:moss_block_1x allthecompressed:moss_block_2x allthecompressed:moss_block_3x allthecompressed:moss_block_4x allthecompressed:moss_block_5x allthecompressed:moss_block_6x allthecompressed:moss_block_7x allthecompressed:moss_block_8x allthecompressed:moss_block_9x \
|
||||
\
|
||||
chipped:blobby_moss_block chipped:blue_moss_block chipped:crunchy_moss_block chipped:lime_moss_block chipped:old_moss_block chipped:red_moss_block chipped:smooth_moss_block chipped:spongy_moss_block chipped:sprinkled_moss_block chipped:yellow_moss_block \
|
||||
\
|
||||
dynamictrees:rooty_moss dynamictrees:rooty_moss_block \
|
||||
\
|
||||
exdeorum:compressed_moss_block \
|
||||
\
|
||||
oritech:biomass_block \
|
||||
\
|
||||
seafarer:algae_block \
|
||||
\
|
||||
securitycraft:reinforced_moss_block \
|
||||
\
|
||||
terrainslabs:moss_slab
|
||||
|
||||
# Moss Carpet
|
||||
block.10925 = moss_carpet
|
||||
|
||||
# Pale Moss Carpet
|
||||
block.10927 = pale_moss_carpet
|
||||
|
||||
# Pale Oak Wood Full Blocks
|
||||
block.10928 = pale_oak_planks stripped_pale_oak_log stripped_pale_oak_wood \
|
||||
tags_everycomp_ch_tfc_pine_planks tags_everycomp_ch_tfc_white_cedar_planks \
|
||||
\
|
||||
aether:altar aether:freezer aether:incubator aether:skyroot_bookshelf aether:skyroot_planks aether:stripped_skyroot_log aether:stripped_skyroot_wood \
|
||||
\
|
||||
biomeswevegone:ironwood_bookshelf biomeswevegone:ironwood_crafting_table biomeswevegone:ironwood_planks biomeswevegone:maple_bookshelf biomeswevegone:maple_crafting_table biomeswevegone:maple_planks biomeswevegone:palm_bookshelf biomeswevegone:palm_crafting_table biomeswevegone:palm_planks biomeswevegone:pine_bookshelf biomeswevegone:pine_crafting_table biomeswevegone:pine_planks biomeswevegone:rainbow_eucalyptus_bookshelf biomeswevegone:rainbow_eucalyptus_crafting_table biomeswevegone:rainbow_eucalyptus_planks biomeswevegone:skyris_bookshelf biomeswevegone:skyris_crafting_table biomeswevegone:skyris_planks biomeswevegone:spirit_bookshelf biomeswevegone:spirit_crafting_table biomeswevegone:spirit_planks biomeswevegone:stripped_ironwood_log biomeswevegone:stripped_ironwood_wood biomeswevegone:stripped_maple_log biomeswevegone:stripped_maple_wood biomeswevegone:stripped_palm_log biomeswevegone:stripped_palm_wood biomeswevegone:stripped_palo_verde_log biomeswevegone:stripped_palo_verde_wood biomeswevegone:stripped_pine_log biomeswevegone:stripped_pine_wood biomeswevegone:stripped_rainbow_eucalyptus_log biomeswevegone:stripped_rainbow_eucalyptus_wood biomeswevegone:stripped_skyris_log biomeswevegone:stripped_skyris_wood biomeswevegone:stripped_spirit_log biomeswevegone:stripped_spirit_wood biomeswevegone:stripped_white_mangrove_log biomeswevegone:stripped_white_mangrove_wood biomeswevegone:white_mangrove_bookshelf biomeswevegone:white_mangrove_crafting_table biomeswevegone:white_mangrove_planks \
|
||||
\
|
||||
blockus:herringbone_white_oak_planks blockus:membrane_block blockus:mossy_dripstone_bricks blockus:mossy_white_oak_planks blockus:obsidian_bricks blockus:polished_blackstone_pillar blockus:stripped_white_oak_log blockus:stripped_white_oak_wood blockus:white_oak_cross_timber_frame blockus:white_oak_diagonal_timber_frame blockus:white_oak_mosaic blockus:white_oak_planks blockus:white_oak_small_logs blockus:white_oak_timber_frame \
|
||||
\
|
||||
debark:debarked_log_natura_nether_logs:variant=0 debark:debarked_log_natura_overworld_logs2:variant=2 debark:debarked_log_pvj_log_aspen debark:debarked_log_pvj_log_baobab debark:debarked_log_pvj_log_cherry_blossom debark:debarked_log_pvj_log_cottonwood \
|
||||
\
|
||||
natura:nether_bookshelves:type=ghostwood natura:nether_planks:type=ghostwood natura:nether_workbenches:type=ghostwood natura:overworld_bookshelves:type=silverbell natura:overworld_planks:type=silverbell natura:overworld_workbenches:type=silverbell \
|
||||
\
|
||||
pvj:baobab_double_slab pvj:cottonwood_double_slab pvj:planks_baobab pvj:planks_cottonwood \
|
||||
\
|
||||
quark:stained_planks quark:stained_planks_black_slab_double quark:stained_planks_blue_slab_double quark:stained_planks_brown_slab_double quark:stained_planks_cyan_slab_double quark:stained_planks_gray_slab_double quark:stained_planks_green_slab_double quark:stained_planks_light_blue_slab_double quark:stained_planks_lime_slab_double quark:stained_planks_magenta_slab_double quark:stained_planks_orange_slab_double quark:stained_planks_pink_slab_double quark:stained_planks_purple_slab_double quark:stained_planks_red_slab_double quark:stained_planks_silver_slab_double quark:stained_planks_white_slab_double quark:stained_planks_yellow_slab_double quark:vertical_stained_planks \
|
||||
\
|
||||
storagedrawers:basicdrawers \
|
||||
\
|
||||
tfc:wood/bookshelf/pine tfc:wood/bookshelf/white_cedar tfc:wood/clutch/pine tfc:wood/clutch/white_cedar tfc:wood/encased_axle/pine tfc:wood/encased_axle/white_cedar tfc:wood/planks/pine tfc:wood/planks/white_cedar tfc:wood/stripped_log/pine tfc:wood/stripped_log/white_cedar tfc:wood/stripped_wood/pine tfc:wood/stripped_wood/white_cedar tfc:wood/workbench/pine tfc:wood/workbench/white_cedar \
|
||||
\
|
||||
twilightforest:stripped_transformation_log twilightforest:stripped_transformation_wood twilightforest:transformation_planks \
|
||||
\
|
||||
vanillabakport:pale_oak_planks vanillabakport:stripped_pale_oak_log vanillabakport:stripped_pale_oak_wood
|
||||
|
||||
# Pale Oak Wood Non-Full Blocks
|
||||
block.10929 = pale_oak_fence pale_oak_fence_gate pale_oak_pressure_plate pale_oak_button pale_oak_trapdoor pale_oak_shelf \
|
||||
\
|
||||
additionalplacements:aether.skyroot_pressure_plate additionalplacements:blockus.white_oak_pressure_plate additionalplacements:extshape_blockus.stripped_white_oak_wood_pressure_plate additionalplacements:extshape_blockus.stripped_white_oak_wood_slab additionalplacements:extshape_blockus.stripped_white_oak_wood_stairs additionalplacements:twilightforest.transformation_pressure_plate additionalplacements:twilightforest.transformation_slab additionalplacements:twilightforest.transformation_stairs \
|
||||
\
|
||||
aether:skyroot_button aether:skyroot_door aether:skyroot_fence aether:skyroot_fence_gate aether:skyroot_pressure_plate aether:skyroot_trapdoor \
|
||||
\
|
||||
biomeswevegone:ironwood_button biomeswevegone:ironwood_door biomeswevegone:ironwood_fence biomeswevegone:ironwood_fence_gate biomeswevegone:ironwood_pressure_plate biomeswevegone:ironwood_slab biomeswevegone:ironwood_stairs biomeswevegone:ironwood_trapdoor biomeswevegone:maple_button biomeswevegone:maple_door biomeswevegone:maple_fence biomeswevegone:maple_fence_gate biomeswevegone:maple_pressure_plate biomeswevegone:maple_slab biomeswevegone:maple_stairs biomeswevegone:maple_trapdoor biomeswevegone:palm_button biomeswevegone:palm_door biomeswevegone:palm_fence biomeswevegone:palm_fence_gate biomeswevegone:palm_pressure_plate biomeswevegone:palm_slab biomeswevegone:palm_stairs biomeswevegone:palm_trapdoor biomeswevegone:pine_button biomeswevegone:pine_door biomeswevegone:pine_fence biomeswevegone:pine_fence_gate biomeswevegone:pine_pressure_plate biomeswevegone:pine_slab biomeswevegone:pine_stairs biomeswevegone:pine_trapdoor biomeswevegone:rainbow_eucalyptus_button biomeswevegone:rainbow_eucalyptus_door biomeswevegone:rainbow_eucalyptus_fence biomeswevegone:rainbow_eucalyptus_fence_gate biomeswevegone:rainbow_eucalyptus_pressure_plate biomeswevegone:rainbow_eucalyptus_slab biomeswevegone:rainbow_eucalyptus_stairs biomeswevegone:rainbow_eucalyptus_trapdoor biomeswevegone:skyris_button biomeswevegone:skyris_door biomeswevegone:skyris_fence biomeswevegone:skyris_fence_gate biomeswevegone:skyris_pressure_plate biomeswevegone:skyris_slab biomeswevegone:skyris_stairs biomeswevegone:skyris_trapdoor biomeswevegone:spirit_button biomeswevegone:spirit_door biomeswevegone:spirit_fence biomeswevegone:spirit_fence_gate biomeswevegone:spirit_pressure_plate biomeswevegone:spirit_roots biomeswevegone:spirit_slab biomeswevegone:spirit_stairs biomeswevegone:spirit_trapdoor biomeswevegone:white_mangrove_button biomeswevegone:white_mangrove_door biomeswevegone:white_mangrove_fence biomeswevegone:white_mangrove_fence_gate biomeswevegone:white_mangrove_pressure_plate biomeswevegone:white_mangrove_slab biomeswevegone:white_mangrove_stairs biomeswevegone:white_mangrove_trapdoor \
|
||||
\
|
||||
blockus:mossy_white_oak_slab blockus:mossy_white_oak_stairs blockus:stripped_white_oak_post blockus:white_oak_button blockus:white_oak_door blockus:white_oak_fence blockus:white_oak_fence_gate blockus:white_oak_grate blockus:white_oak_lattice blockus:white_oak_mosaic_slab blockus:white_oak_mosaic_stairs blockus:white_oak_post blockus:white_oak_pressure_plate blockus:white_oak_slab blockus:white_oak_stairs blockus:white_oak_trapdoor \
|
||||
\
|
||||
diagonalfences:aether/skyroot_fence diagonalfences:blockus/white_oak_fence diagonalfences:extshape_blockus/stripped_white_oak_wood_fence diagonalfences:minecraft/pale_oak_fence diagonalfences:twilightforest/transformation_fence \
|
||||
\
|
||||
diagonalwalls:extshape_blockus/herringbone_white_oak_wall diagonalwalls:extshape_blockus/mossy_white_oak_wall diagonalwalls:extshape_blockus/stripped_white_oak_wood_wall diagonalwalls:extshape_blockus/white_oak_mosaic_wall diagonalwalls:extshape_blockus/white_oak_wall \
|
||||
\
|
||||
diagonalwindows:blockus/white_oak_lattice \
|
||||
\
|
||||
extshape_blockus:herringbone_white_oak_quarter_piece extshape_blockus:herringbone_white_oak_slab extshape_blockus:herringbone_white_oak_stairs extshape_blockus:herringbone_white_oak_vertical_quarter_piece extshape_blockus:herringbone_white_oak_vertical_slab extshape_blockus:herringbone_white_oak_vertical_stairs extshape_blockus:herringbone_white_oak_wall extshape_blockus:mossy_white_oak_quarter_piece extshape_blockus:mossy_white_oak_vertical_quarter_piece extshape_blockus:mossy_white_oak_vertical_slab extshape_blockus:mossy_white_oak_vertical_stairs extshape_blockus:mossy_white_oak_wall extshape_blockus:stripped_white_oak_log_quarter_piece extshape_blockus:stripped_white_oak_log_slab extshape_blockus:stripped_white_oak_log_stairs extshape_blockus:stripped_white_oak_log_vertical_quarter_piece extshape_blockus:stripped_white_oak_log_vertical_slab extshape_blockus:stripped_white_oak_log_vertical_stairs extshape_blockus:stripped_white_oak_wood_button extshape_blockus:stripped_white_oak_wood_fence extshape_blockus:stripped_white_oak_wood_fence_gate extshape_blockus:stripped_white_oak_wood_pressure_plate extshape_blockus:stripped_white_oak_wood_quarter_piece extshape_blockus:stripped_white_oak_wood_slab extshape_blockus:stripped_white_oak_wood_stairs extshape_blockus:stripped_white_oak_wood_vertical_quarter_piece extshape_blockus:stripped_white_oak_wood_vertical_slab extshape_blockus:stripped_white_oak_wood_vertical_stairs extshape_blockus:stripped_white_oak_wood_wall extshape_blockus:white_oak_mosaic_quarter_piece extshape_blockus:white_oak_mosaic_vertical_quarter_piece extshape_blockus:white_oak_mosaic_vertical_slab extshape_blockus:white_oak_mosaic_vertical_stairs extshape_blockus:white_oak_mosaic_wall extshape_blockus:white_oak_quarter_piece extshape_blockus:white_oak_vertical_quarter_piece extshape_blockus:white_oak_vertical_slab extshape_blockus:white_oak_vertical_stairs extshape_blockus:white_oak_wall \
|
||||
\
|
||||
natura:ghostwood_button natura:ghostwood_fence natura:ghostwood_fence_gate natura:ghostwood_pressure_plate natura:ghostwood_trap_door natura:nether_door_ghostwood natura:nether_slab:type=ghostwood natura:nether_stairs_ghostwood natura:overworld_door_silverbell natura:overworld_slab:type=silverbell natura:overworld_stairs_silverbell natura:silverbell_button natura:silverbell_fence natura:silverbell_fence_gate natura:silverbell_pressure_plate natura:silverbell_trap_door \
|
||||
\
|
||||
pvj:baobab_button pvj:baobab_door pvj:baobab_fence pvj:baobab_fence_gate pvj:baobab_pressure_plate pvj:baobab_slab pvj:baobab_stairs pvj:baobab_trapdoor pvj:baobab_twigs pvj:cottonwood_button pvj:cottonwood_door pvj:cottonwood_fence pvj:cottonwood_fence_gate pvj:cottonwood_pressure_plate pvj:cottonwood_slab pvj:cottonwood_stairs pvj:cottonwood_trapdoor pvj:cottonwood_twigs \
|
||||
\
|
||||
quark:stained_planks_black_slab quark:stained_planks_black_stairs quark:stained_planks_blue_slab quark:stained_planks_blue_stairs quark:stained_planks_brown_slab quark:stained_planks_brown_stairs quark:stained_planks_cyan_slab quark:stained_planks_cyan_stairs quark:stained_planks_gray_slab quark:stained_planks_gray_stairs quark:stained_planks_green_slab quark:stained_planks_green_stairs quark:stained_planks_light_blue_slab quark:stained_planks_light_blue_stairs quark:stained_planks_lime_slab quark:stained_planks_lime_stairs quark:stained_planks_magenta_slab quark:stained_planks_magenta_stairs quark:stained_planks_orange_slab quark:stained_planks_orange_stairs quark:stained_planks_pink_slab quark:stained_planks_pink_stairs quark:stained_planks_purple_slab quark:stained_planks_purple_stairs quark:stained_planks_red_slab quark:stained_planks_red_stairs quark:stained_planks_silver_slab quark:stained_planks_silver_stairs quark:stained_planks_white_slab quark:stained_planks_white_stairs quark:stained_planks_yellow_slab quark:stained_planks_yellow_stairs \
|
||||
\
|
||||
suppsquared:aether/item_shelf_skyroot suppsquared:blockus/item_shelf_white_oak suppsquared:twilightforest/item_shelf_transformation \
|
||||
\
|
||||
tfc:wood/barrel/pine tfc:wood/barrel/white_cedar tfc:wood/button/pine tfc:wood/button/white_cedar tfc:wood/door/pine tfc:wood/door/white_cedar tfc:wood/fence/pine tfc:wood/fence/white_cedar tfc:wood/fence_gate/pine tfc:wood/fence_gate/white_cedar tfc:wood/gear_box/pine tfc:wood/gear_box/white_cedar tfc:wood/horizontal_support/pine tfc:wood/horizontal_support/white_cedar tfc:wood/lectern/pine tfc:wood/lectern/white_cedar tfc:wood/log_fence/pine tfc:wood/log_fence/white_cedar tfc:wood/loom/pine tfc:wood/loom/white_cedar tfc:wood/planks/pine_slab tfc:wood/planks/pine_stairs tfc:wood/planks/white_cedar_slab tfc:wood/planks/white_cedar_stairs tfc:wood/pressure_plate/pine tfc:wood/pressure_plate/white_cedar tfc:wood/scribing_table/pine tfc:wood/scribing_table/white_cedar tfc:wood/sewing_table/pine tfc:wood/sewing_table/white_cedar tfc:wood/shelf/pine tfc:wood/shelf/white_cedar tfc:wood/sluice/pine tfc:wood/sluice/white_cedar tfc:wood/tool_rack/pine tfc:wood/tool_rack/white_cedar tfc:wood/trapdoor/pine tfc:wood/trapdoor/white_cedar tfc:wood/vertical_support/pine tfc:wood/vertical_support/white_cedar \
|
||||
\
|
||||
twilightforest:transformation_banister twilightforest:transformation_button twilightforest:transformation_door twilightforest:transformation_fence twilightforest:transformation_fence_gate twilightforest:transformation_pressure_plate twilightforest:transformation_slab twilightforest:transformation_stairs twilightforest:transformation_trapdoor \
|
||||
\
|
||||
vanillabackport:pale_oak_button vanillabackport:pale_oak_fence vanillabackport:pale_oak_fence_gate vanillabackport:pale_oak_pressure_plate vanillabackport:pale_oak_slab vanillabackport:pale_oak_stairs vanillabackport:pale_oak_trapdoor \
|
||||
\
|
||||
wilderwild:stripped_hollowed_pale_oak_log
|
||||
|
||||
# Pale Oak Wood Slabs and Stairs
|
||||
block.10931 = pale_oak_stairs pale_oak_slab \
|
||||
\
|
||||
additionalplacements:aether.skyroot_slab additionalplacements:aether.skyroot_stairs additionalplacements:blockus.mossy_white_oak_slab additionalplacements:blockus.mossy_white_oak_stairs additionalplacements:blockus.white_oak_mosaic_slab additionalplacements:blockus.white_oak_mosaic_stairs additionalplacements:blockus.white_oak_slab additionalplacements:blockus.white_oak_stairs additionalplacements:extshape_blockus.herringbone_white_oak_slab additionalplacements:extshape_blockus.herringbone_white_oak_stairs additionalplacements:extshape_blockus.stripped_white_oak_log_slab additionalplacements:extshape_blockus.stripped_white_oak_log_stairs \
|
||||
\
|
||||
aether:skyroot_slab aether:skyroot_stairs
|
||||
|
||||
# Pale Oak Log Full Blocks
|
||||
block.10932 = pale_oak_log pale_oak_wood \
|
||||
\
|
||||
aether:skyroot_log aether:skyroot_wood \
|
||||
\
|
||||
biomeswevegone:rainbow_eucalyptus_log biomeswevegone:rainbow_eucalyptus_wood biomeswevegone:spirit_log biomeswevegone:spirit_wood biomeswevegone:white_mangrove_log biomeswevegone:white_mangrove_wood \
|
||||
\
|
||||
blockus:white_oak_log blockus:white_oak_wood \
|
||||
\
|
||||
natura:nether_logs:type=ghostwood natura:overworld_logs:type=silverbell \
|
||||
\
|
||||
pvj:log_juniper \
|
||||
\
|
||||
tfc:wood/log/maple tfc:wood/log/palm tfc:wood/log/pine tfc:wood/log/rosewood tfc:wood/log/white_cedar tfc:wood/log/willow tfc:wood/wood/maple tfc:wood/wood/palm tfc:wood/wood/pine tfc:wood/wood/rosewood tfc:wood/wood/white_cedar tfc:wood/wood/willow \
|
||||
\
|
||||
twilightforest:transformation_log twilightforest:transformation_log_core:active=false twilightforest:transformation_wood \
|
||||
\
|
||||
vanillabackport:pale_oak_log vanillabackport:pale_oak_wood
|
||||
|
||||
# Pale Oak Log Non-Full Blocks (Modded Only)
|
||||
block.10933 = diagonalfences:extshape_blockus/white_oak_wood_fence \
|
||||
tags_everycomp_tfc_maple tags_everycomp_tfc_palm tags_everycomp_tfc_pine tags_everycomp_tfc_rosewood tags_everycomp_tfc_willow \
|
||||
\
|
||||
additionalplacements:extshape_blockus.white_oak_log_slab additionalplacements:extshape_blockus.white_oak_log_stairs additionalplacements:extshape_blockus.white_oak_small_logs_slab additionalplacements:extshape_blockus.white_oak_small_logs_stairs additionalplacements:extshape_blockus.white_oak_wood_pressure_plate additionalplacements:extshape_blockus.white_oak_wood_slab additionalplacements:extshape_blockus.white_oak_wood_stairs \
|
||||
\
|
||||
diagonalwalls:extshape_blockus/white_oak_wood_wall \
|
||||
\
|
||||
extshape_blockus:white_oak_log_quarter_piece extshape_blockus:white_oak_log_slab extshape_blockus:white_oak_log_stairs extshape_blockus:white_oak_log_vertical_quarter_piece extshape_blockus:white_oak_log_vertical_slab extshape_blockus:white_oak_log_vertical_stairs extshape_blockus:white_oak_small_logs_quarter_piece extshape_blockus:white_oak_small_logs_slab extshape_blockus:white_oak_small_logs_stairs extshape_blockus:white_oak_small_logs_vertical_quarter_piece extshape_blockus:white_oak_small_logs_vertical_slab extshape_blockus:white_oak_small_logs_vertical_stairs extshape_blockus:white_oak_wood_button extshape_blockus:white_oak_wood_fence extshape_blockus:white_oak_wood_fence_gate extshape_blockus:white_oak_wood_pressure_plate extshape_blockus:white_oak_wood_quarter_piece extshape_blockus:white_oak_wood_slab extshape_blockus:white_oak_wood_stairs extshape_blockus:white_oak_wood_vertical_quarter_piece extshape_blockus:white_oak_wood_vertical_slab extshape_blockus:white_oak_wood_vertical_stairs extshape_blockus:white_oak_wood_wall \
|
||||
\
|
||||
tfc:plant/pine_krummholz tfc:plant/white_cedar_krummholz tfc:wood/twig/maple tfc:wood/twig/palm tfc:wood/twig/pine tfc:wood/twig/rosewood tfc:wood/twig/white_cedar tfc:wood/twig/willow \
|
||||
\
|
||||
twilightforest:hollow_transformation_log_climbable twilightforest:hollow_transformation_log_horizontal twilightforest:hollow_transformation_log_vertical \
|
||||
\
|
||||
wilderwild:hollowed_pale_oak_log
|
||||
|
||||
# Pale Oak Door
|
||||
block.10937 = pale_oak_door \
|
||||
\
|
||||
vanillabackport:pale_oak_door
|
||||
|
||||
# Resin Full Blocks
|
||||
block.10940 = resin_bricks chiseled_resin_bricks resin_block \
|
||||
\
|
||||
vanillabackport:chiseled_resin_bricks vanillabackport:resin_block vanillabackport:resin_bricks
|
||||
|
||||
# Resin Non-Full Blocks
|
||||
block.10941 = resin_clump resin_brick_stairs resin_brick_slab resin_brick_wall \
|
||||
\
|
||||
diagonalwalls:minecraft/resin_brick_wall \
|
||||
\
|
||||
vanillabackport:resin_brick_slab vanillabackport:resin_brick_stairs vanillabackport:resin_brick_wall vanillabackport:resin_clump
|
||||
#if MC_VERSION >= 12105
|
||||
# Creaking Heart Inactive 1.21.5
|
||||
block.10944 = creaking_heart:creaking_heart_state=uprooted
|
||||
|
||||
# Creaking Heart Active 1.21.5
|
||||
block.10948 = creaking_heart:creaking_heart_state=dormant creaking_heart:creaking_heart_state=awake
|
||||
#else
|
||||
|
||||
# Creaking Heart Inactive 1.21.4
|
||||
block.10944 = creaking_heart:active=false \
|
||||
\
|
||||
vanillabackport:creaking_heart:creaking_heart_state=uprooted
|
||||
|
||||
# Creaking Heart Active 1.21.4
|
||||
block.10948 = creaking_heart:active=true \
|
||||
\
|
||||
vanillabackport:creaking_heart:creaking_heart_state=awake vanillabackport:creaking_heart:creaking_heart_state=dormant
|
||||
#endif
|
||||
|
||||
# All snow layers except layer 8
|
||||
block.10953 = snow:layers=1 snow:layers=2 snow:layers=3 snow:layers=4 snow:layers=5 snow:layers=6 snow:layers=7 \
|
||||
\
|
||||
terrainslabs:snow_on_top \
|
||||
\
|
||||
tfc:snow_pile:layers=1 tfc:snow_pile:layers=2 tfc:snow_pile:layers=3 tfc:snow_pile:layers=4 tfc:snow_pile:layers=5 tfc:snow_pile:layers=6 tfc:snow_pile:layers=7
|
||||
|
||||
# Target 0 Power
|
||||
block.10956 = target:power=0
|
||||
|
||||
# Target Powered
|
||||
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
|
||||
|
||||
# Sponge
|
||||
block.10964 = sponge \
|
||||
\
|
||||
blockus:legacy_sponge \
|
||||
\
|
||||
openblocks:sponge
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,491 @@
|
||||
### Last updated: February 10, 2026, 11:05 UTC
|
||||
# Copyright (c) 2026 SpacEagle17 – Licensed under the MIT License: https://opensource.org/licenses/MIT
|
||||
|
||||
# Purple Stained Glass Panes
|
||||
block.31021 = purple_stained_glass_pane \
|
||||
\
|
||||
betternether:obsidian_glass_pane betternether:quartz_glass_framed_pane_purple betternether:quartz_glass_pane_purple \
|
||||
\
|
||||
blockus:purple_beveled_glass_pane \
|
||||
\
|
||||
born_in_chaos_v1:purple_stained_glass_panel \
|
||||
\
|
||||
chipped:arched_purple_stained_glass_pane_pillar chipped:circular_purple_stained_glass_pane chipped:fancy_purple_stained_glass_pane chipped:large_diamond_purple_stained_glass_pane chipped:ornate_purple_stained_glass_pane chipped:raster_purple_stained_glass_pane chipped:small_purple_stained_glass_pane chipped:square_purple_stained_glass_pane chipped:tiled_purple_stained_glass_pane chipped:vertical_stiped_purple_stained_glass_pane chipped:woven_purple_stained_glass_pane \
|
||||
\
|
||||
chisel:glasspanedyedpurple \
|
||||
\
|
||||
create:purple_nixie_tube \
|
||||
\
|
||||
createframed:horizontal_purple_stained_framed_glass_pane createframed:purple_stained_framed_glass_door createframed:purple_stained_framed_glass_pane createframed:purple_stained_framed_glass_trapdoor createframed:purple_stained_tiled_glass_pane createframed:vertical_purple_stained_framed_glass_pane \
|
||||
\
|
||||
diagonalwindows:blockus/purple_beveled_glass_pane diagonalwindows:createframed/horizontal_purple_stained_framed_glass_pane diagonalwindows:createframed/purple_stained_framed_glass_pane diagonalwindows:createframed/purple_stained_tiled_glass_pane diagonalwindows:createframed/vertical_purple_stained_framed_glass_pane diagonalwindows:mcwwindows/purple_mosaic_glass_pane diagonalwindows:minecraft/purple_stained_glass_pane \
|
||||
\
|
||||
hearth_and_home:purple_stained_barred_glass_pane \
|
||||
\
|
||||
mcwwindows:purple_mosaic_glass_pane \
|
||||
\
|
||||
securitycraft:reinforced_purple_stained_glass_pane \
|
||||
\
|
||||
tconstruct:purple_clear_stained_glass_pane
|
||||
|
||||
# Blue Stained Glass
|
||||
block.31022 = blue_stained_glass \
|
||||
\
|
||||
betterend:umbrella_tree_membrane:color=5 betterend:umbrella_tree_membrane:color=6 betterend:umbrella_tree_membrane:color=7 \
|
||||
\
|
||||
betternether:quartz_glass_blue betternether:quartz_glass_framed_blue \
|
||||
\
|
||||
blockus:blue_beveled_glass \
|
||||
\
|
||||
chipped:arched_blue_stained_glass_pillar chipped:circular_blue_stained_glass chipped:fancy_blue_stained_glass chipped:large_diamond_blue_stained_glass chipped:ornate_blue_stained_glass chipped:raster_blue_stained_glass chipped:small_blue_stained_glass chipped:square_blue_stained_glass chipped:tiled_blue_stained_glass chipped:vertical_stiped_blue_stained_glass chipped:woven_blue_stained_glass \
|
||||
\
|
||||
chisel:glassdyedblue \
|
||||
\
|
||||
createframed:blue_stained_framed_glass createframed:blue_stained_tiled_glass createframed:horizontal_blue_stained_framed_glass createframed:vertical_blue_stained_framed_glass \
|
||||
\
|
||||
hearth_and_home:blue_stained_barred_glass \
|
||||
\
|
||||
mcwwindows:blue_mosaic_glass \
|
||||
\
|
||||
quark:crystal:variant=crystal_indigo \
|
||||
\
|
||||
seasonsextras:blue_greenhouse_glass \
|
||||
\
|
||||
securitycraft:reinforced_blue_stained_glass \
|
||||
\
|
||||
tconstruct:blue_clear_stained_glass \
|
||||
\
|
||||
tfc:blue_poured_glass
|
||||
|
||||
# Blue Stained Glass Panes
|
||||
block.31023 = blue_stained_glass_pane \
|
||||
\
|
||||
betternether:quartz_glass_framed_pane_blue betternether:quartz_glass_pane_blue \
|
||||
\
|
||||
blockus:blue_beveled_glass_pane \
|
||||
\
|
||||
chipped:arched_blue_stained_glass_pane_pillar chipped:circular_blue_stained_glass_pane chipped:fancy_blue_stained_glass_pane chipped:large_diamond_blue_stained_glass_pane chipped:ornate_blue_stained_glass_pane chipped:raster_blue_stained_glass_pane chipped:small_blue_stained_glass_pane chipped:square_blue_stained_glass_pane chipped:tiled_blue_stained_glass_pane chipped:vertical_stiped_blue_stained_glass_pane chipped:woven_blue_stained_glass_pane \
|
||||
\
|
||||
chisel:glasspanedyedblue \
|
||||
\
|
||||
create:blue_nixie_tube \
|
||||
\
|
||||
createframed:blue_stained_framed_glass_door createframed:blue_stained_framed_glass_pane createframed:blue_stained_framed_glass_trapdoor createframed:blue_stained_tiled_glass_pane createframed:horizontal_blue_stained_framed_glass_pane createframed:vertical_blue_stained_framed_glass_pane \
|
||||
\
|
||||
diagonalwindows:blockus/blue_beveled_glass_pane diagonalwindows:createframed/blue_stained_framed_glass_pane diagonalwindows:createframed/blue_stained_tiled_glass_pane diagonalwindows:createframed/horizontal_blue_stained_framed_glass_pane diagonalwindows:createframed/vertical_blue_stained_framed_glass_pane diagonalwindows:mcwwindows/blue_mosaic_glass_pane diagonalwindows:minecraft/blue_stained_glass_pane \
|
||||
\
|
||||
hearth_and_home:blue_stained_barred_glass_pane \
|
||||
\
|
||||
mcwwindows:blue_mosaic_glass_pane \
|
||||
\
|
||||
quark:crystal_pane:variant=crystal_indigo \
|
||||
\
|
||||
securitycraft:reinforced_blue_stained_glass_pane \
|
||||
\
|
||||
tconstruct:blue_clear_stained_glass_pane
|
||||
|
||||
# Brown Stained Glass
|
||||
block.31024 = brown_stained_glass \
|
||||
\
|
||||
betternether:quartz_glass_brown betternether:quartz_glass_framed_brown \
|
||||
\
|
||||
blockus:brown_beveled_glass \
|
||||
\
|
||||
chipped:arched_brown_stained_glass_pillar chipped:circular_brown_stained_glass chipped:fancy_brown_stained_glass chipped:large_diamond_brown_stained_glass chipped:ornate_brown_stained_glass chipped:raster_brown_stained_glass chipped:small_brown_stained_glass chipped:square_brown_stained_glass chipped:tiled_brown_stained_glass chipped:vertical_stiped_brown_stained_glass chipped:woven_brown_stained_glass \
|
||||
\
|
||||
chisel:glassdyedbrown \
|
||||
\
|
||||
cinderscapes:crystalline_smoky_quartz \
|
||||
\
|
||||
createframed:brown_stained_framed_glass createframed:brown_stained_tiled_glass createframed:horizontal_brown_stained_framed_glass createframed:vertical_brown_stained_framed_glass \
|
||||
\
|
||||
hearth_and_home:brown_stained_barred_glass \
|
||||
\
|
||||
immersive_weathering:vitrified_sand \
|
||||
\
|
||||
immersiveengineering:slag_glass \
|
||||
\
|
||||
mcwwindows:brown_mosaic_glass \
|
||||
\
|
||||
seasonsextras:brown_greenhouse_glass \
|
||||
\
|
||||
securitycraft:reinforced_brown_stained_glass \
|
||||
\
|
||||
tconstruct:brown_clear_stained_glass \
|
||||
\
|
||||
tfc:brown_poured_glass
|
||||
|
||||
# Brown Stained Glass Panes
|
||||
block.31025 = brown_stained_glass_pane \
|
||||
\
|
||||
betternether:quartz_glass_framed_pane_brown betternether:quartz_glass_pane_brown \
|
||||
\
|
||||
blockus:brown_beveled_glass_pane \
|
||||
\
|
||||
chipped:arched_brown_stained_glass_pane_pillar chipped:circular_brown_stained_glass_pane chipped:fancy_brown_stained_glass_pane chipped:large_diamond_brown_stained_glass_pane chipped:ornate_brown_stained_glass_pane chipped:raster_brown_stained_glass_pane chipped:small_brown_stained_glass_pane chipped:square_brown_stained_glass_pane chipped:tiled_brown_stained_glass_pane chipped:vertical_stiped_brown_stained_glass_pane chipped:woven_brown_stained_glass_pane \
|
||||
\
|
||||
chisel:glasspanedyedbrown \
|
||||
\
|
||||
create:brown_nixie_tube \
|
||||
\
|
||||
createframed:brown_stained_framed_glass_door createframed:brown_stained_framed_glass_pane createframed:brown_stained_framed_glass_trapdoor createframed:brown_stained_tiled_glass_pane createframed:horizontal_brown_stained_framed_glass_pane createframed:vertical_brown_stained_framed_glass_pane \
|
||||
\
|
||||
diagonalwindows:blockus/brown_beveled_glass_pane diagonalwindows:createframed/brown_stained_framed_glass_pane diagonalwindows:createframed/brown_stained_tiled_glass_pane diagonalwindows:createframed/horizontal_brown_stained_framed_glass_pane diagonalwindows:createframed/vertical_brown_stained_framed_glass_pane diagonalwindows:mcwwindows/brown_mosaic_glass_pane diagonalwindows:minecraft/brown_stained_glass_pane \
|
||||
\
|
||||
hearth_and_home:brown_stained_barred_glass_pane \
|
||||
\
|
||||
mcwwindows:brown_mosaic_glass_pane \
|
||||
\
|
||||
securitycraft:reinforced_brown_stained_glass_pane \
|
||||
\
|
||||
tconstruct:brown_clear_stained_glass_pane
|
||||
|
||||
# Green Stained Glass
|
||||
block.31026 = green_stained_glass \
|
||||
\
|
||||
betternether:quartz_glass_framed_green betternether:quartz_glass_green \
|
||||
\
|
||||
blockus:green_beveled_glass \
|
||||
\
|
||||
chipped:arched_green_stained_glass_pillar chipped:circular_green_stained_glass chipped:fancy_green_stained_glass chipped:large_diamond_green_stained_glass chipped:ornate_green_stained_glass chipped:raster_green_stained_glass chipped:small_green_stained_glass chipped:square_green_stained_glass chipped:tiled_green_stained_glass chipped:vertical_stiped_green_stained_glass chipped:woven_green_stained_glass \
|
||||
\
|
||||
chisel:glassdyedgreen \
|
||||
\
|
||||
createframed:green_stained_framed_glass createframed:green_stained_tiled_glass createframed:horizontal_green_stained_framed_glass createframed:vertical_green_stained_framed_glass \
|
||||
\
|
||||
hearth_and_home:green_stained_barred_glass \
|
||||
\
|
||||
iceandfire:myrmex_jungle_resin_glass \
|
||||
\
|
||||
mcwwindows:green_mosaic_glass \
|
||||
\
|
||||
seasonsextras:green_greenhouse_glass \
|
||||
\
|
||||
securitycraft:reinforced_green_stained_glass \
|
||||
\
|
||||
tconstruct:green_clear_stained_glass \
|
||||
\
|
||||
tfc:green_poured_glass
|
||||
|
||||
# Green Stained Glass Panes
|
||||
block.31027 = green_stained_glass_pane \
|
||||
\
|
||||
betternether:quartz_glass_framed_pane_green betternether:quartz_glass_pane_green \
|
||||
\
|
||||
blockus:green_beveled_glass_pane \
|
||||
\
|
||||
chipped:arched_green_stained_glass_pane_pillar chipped:circular_green_stained_glass_pane chipped:fancy_green_stained_glass_pane chipped:large_diamond_green_stained_glass_pane chipped:ornate_green_stained_glass_pane chipped:raster_green_stained_glass_pane chipped:small_green_stained_glass_pane chipped:square_green_stained_glass_pane chipped:tiled_green_stained_glass_pane chipped:vertical_stiped_green_stained_glass_pane chipped:woven_green_stained_glass_pane \
|
||||
\
|
||||
chisel:glasspanedyedgreen \
|
||||
\
|
||||
create:green_nixie_tube \
|
||||
\
|
||||
createframed:green_stained_framed_glass_door createframed:green_stained_framed_glass_pane createframed:green_stained_framed_glass_trapdoor createframed:green_stained_tiled_glass_pane createframed:horizontal_green_stained_framed_glass_pane createframed:vertical_green_stained_framed_glass_pane \
|
||||
\
|
||||
diagonalwindows:blockus/green_beveled_glass_pane diagonalwindows:createframed/green_stained_framed_glass_pane diagonalwindows:createframed/green_stained_tiled_glass_pane diagonalwindows:createframed/horizontal_green_stained_framed_glass_pane diagonalwindows:createframed/vertical_green_stained_framed_glass_pane diagonalwindows:mcwwindows/green_mosaic_glass_pane diagonalwindows:minecraft/green_stained_glass_pane \
|
||||
\
|
||||
hearth_and_home:green_stained_barred_glass_pane \
|
||||
\
|
||||
mcwwindows:green_mosaic_glass_pane \
|
||||
\
|
||||
securitycraft:reinforced_green_stained_glass_pane \
|
||||
\
|
||||
tconstruct:green_clear_stained_glass_pane
|
||||
|
||||
# Red Stained Glass
|
||||
block.31028 = red_stained_glass \
|
||||
\
|
||||
betternether:quartz_glass_framed_red betternether:quartz_glass_red \
|
||||
\
|
||||
blockus:red_beveled_glass \
|
||||
\
|
||||
born_in_chaos_v1:scarlet_stained_glass \
|
||||
\
|
||||
chipped:arched_red_stained_glass_pillar chipped:circular_red_stained_glass chipped:fancy_red_stained_glass chipped:large_diamond_red_stained_glass chipped:ornate_red_stained_glass chipped:raster_red_stained_glass chipped:small_red_stained_glass chipped:square_red_stained_glass chipped:tiled_red_stained_glass chipped:vertical_stiped_red_stained_glass chipped:woven_red_stained_glass \
|
||||
\
|
||||
chisel:glassdyedred \
|
||||
\
|
||||
createframed:horizontal_red_stained_framed_glass createframed:red_stained_framed_glass createframed:red_stained_tiled_glass createframed:vertical_red_stained_framed_glass \
|
||||
\
|
||||
hearth_and_home:red_stained_barred_glass \
|
||||
\
|
||||
mcwwindows:red_mosaic_glass \
|
||||
\
|
||||
naturalist:crimson_froglass \
|
||||
\
|
||||
quark:crystal:variant=crystal_red \
|
||||
\
|
||||
seasonsextras:red_greenhouse_glass \
|
||||
\
|
||||
securitycraft:reinforced_red_stained_glass \
|
||||
\
|
||||
tconstruct:red_clear_stained_glass \
|
||||
\
|
||||
tfc:red_poured_glass
|
||||
|
||||
# Red Stained Glass Panes
|
||||
block.31029 = red_stained_glass_pane \
|
||||
\
|
||||
betternether:quartz_glass_framed_pane_red betternether:quartz_glass_pane_red \
|
||||
\
|
||||
blockus:red_beveled_glass_pane \
|
||||
\
|
||||
born_in_chaos_v1:cursed_scarlet_ornate_glass_pane born_in_chaos_v1:scarlet_stained_glass_panel \
|
||||
\
|
||||
chipped:arched_red_stained_glass_pane_pillar chipped:circular_red_stained_glass_pane chipped:fancy_red_stained_glass_pane chipped:large_diamond_red_stained_glass_pane chipped:ornate_red_stained_glass_pane chipped:raster_red_stained_glass_pane chipped:small_red_stained_glass_pane chipped:square_red_stained_glass_pane chipped:tiled_red_stained_glass_pane chipped:vertical_stiped_red_stained_glass_pane chipped:woven_red_stained_glass_pane \
|
||||
\
|
||||
chisel:glasspanedyedred \
|
||||
\
|
||||
create:red_nixie_tube \
|
||||
\
|
||||
createframed:horizontal_red_stained_framed_glass_pane createframed:red_stained_framed_glass_door createframed:red_stained_framed_glass_pane createframed:red_stained_framed_glass_trapdoor createframed:red_stained_tiled_glass_pane createframed:vertical_red_stained_framed_glass_pane \
|
||||
\
|
||||
diagonalwindows:blockus/red_beveled_glass_pane diagonalwindows:createframed/horizontal_red_stained_framed_glass_pane diagonalwindows:createframed/red_stained_framed_glass_pane diagonalwindows:createframed/red_stained_tiled_glass_pane diagonalwindows:createframed/vertical_red_stained_framed_glass_pane diagonalwindows:mcwwindows/red_mosaic_glass_pane diagonalwindows:minecraft/red_stained_glass_pane \
|
||||
\
|
||||
hearth_and_home:red_stained_barred_glass_pane \
|
||||
\
|
||||
mcwwindows:red_mosaic_glass_pane \
|
||||
\
|
||||
naturalist:crimson_froglass_pane \
|
||||
\
|
||||
quark:crystal_pane:variant=crystal_red \
|
||||
\
|
||||
securitycraft:reinforced_red_stained_glass_pane \
|
||||
\
|
||||
tconstruct:red_clear_stained_glass_pane
|
||||
|
||||
# Black Stained Glass
|
||||
# Use if your glass is multi-colored, black will preserve the lighting through the glass texture.
|
||||
block.31030 = black_stained_glass \
|
||||
\
|
||||
betternether:quartz_glass_black betternether:quartz_glass_framed_black \
|
||||
\
|
||||
biomeswevegone:black_ice biomeswevegone:borealis_ice \
|
||||
\
|
||||
blockus:black_beveled_glass blockus:rainbow_beveled_glass blockus:rainbow_glass \
|
||||
\
|
||||
chipped:arched_black_stained_glass_pillar chipped:circular_black_stained_glass chipped:fancy_black_stained_glass chipped:large_diamond_black_stained_glass chipped:ornate_black_stained_glass chipped:raster_black_stained_glass chipped:small_black_stained_glass chipped:square_black_stained_glass chipped:tiled_black_stained_glass chipped:vertical_stiped_black_stained_glass chipped:woven_black_stained_glass \
|
||||
\
|
||||
chisel:glassdyedblack \
|
||||
\
|
||||
create:weathered_iron_window \
|
||||
\
|
||||
createframed:black_stained_framed_glass createframed:black_stained_tiled_glass createframed:horizontal_black_stained_framed_glass createframed:vertical_black_stained_framed_glass \
|
||||
\
|
||||
hearth_and_home:black_stained_barred_glass \
|
||||
\
|
||||
mcwwindows:black_mosaic_glass mcwwindows:one_way_glass \
|
||||
\
|
||||
quark:crystal:variant=crystal_black \
|
||||
\
|
||||
seasonsextras:black_greenhouse_glass \
|
||||
\
|
||||
securitycraft:reinforced_black_stained_glass \
|
||||
\
|
||||
tconstruct:black_clear_stained_glass tconstruct:soulsteel_block \
|
||||
\
|
||||
tfc:black_poured_glass \
|
||||
\
|
||||
twilightforest:auroralized_glass
|
||||
|
||||
# Black Stained Glass Panes
|
||||
block.31031 = black_stained_glass_pane \
|
||||
\
|
||||
betternether:quartz_glass_framed_pane_black betternether:quartz_glass_pane_black \
|
||||
\
|
||||
blockus:black_beveled_glass_pane blockus:rainbow_beveled_glass_pane blockus:rainbow_glass_pane \
|
||||
\
|
||||
chipped:arched_black_stained_glass_pane_pillar chipped:circular_black_stained_glass_pane chipped:fancy_black_stained_glass_pane chipped:large_diamond_black_stained_glass_pane chipped:ornate_black_stained_glass_pane chipped:raster_black_stained_glass_pane chipped:small_black_stained_glass_pane chipped:square_black_stained_glass_pane chipped:tiled_black_stained_glass_pane chipped:vertical_stiped_black_stained_glass_pane chipped:woven_black_stained_glass_pane \
|
||||
\
|
||||
chisel:glasspanedyedblack \
|
||||
\
|
||||
create:black_nixie_tube create:weathered_iron_window_pane \
|
||||
\
|
||||
createframed:black_stained_framed_glass_door createframed:black_stained_framed_glass_pane createframed:black_stained_framed_glass_trapdoor createframed:black_stained_tiled_glass_pane createframed:horizontal_black_stained_framed_glass_pane createframed:vertical_black_stained_framed_glass_pane \
|
||||
\
|
||||
diagonalwindows:blockus/black_beveled_glass_pane diagonalwindows:blockus/rainbow_beveled_glass_pane diagonalwindows:blockus/rainbow_glass_pane diagonalwindows:create/weathered_iron_window_pane diagonalwindows:createframed/black_stained_framed_glass_pane diagonalwindows:createframed/black_stained_tiled_glass_pane diagonalwindows:createframed/horizontal_black_stained_framed_glass_pane diagonalwindows:createframed/vertical_black_stained_framed_glass_pane diagonalwindows:mcwwindows/black_mosaic_glass_pane diagonalwindows:minecraft/black_stained_glass_pane \
|
||||
\
|
||||
hearth_and_home:black_stained_barred_glass_pane \
|
||||
\
|
||||
immersiveengineering:alu_window immersiveengineering:reinforced_window immersiveengineering:steel_window immersiveengineering:treated_window \
|
||||
\
|
||||
mcwwindows:black_mosaic_glass_pane mcwwindows:one_way_glass_pane \
|
||||
\
|
||||
missingwilds:black_stained_food_jar missingwilds:black_stained_jar missingwilds:black_stained_potion_jar missingwilds:blue_stained_food_jar missingwilds:blue_stained_jar missingwilds:blue_stained_potion_jar missingwilds:brown_stained_food_jar missingwilds:brown_stained_jar missingwilds:brown_stained_potion_jar missingwilds:cyan_stained_food_jar missingwilds:cyan_stained_jar missingwilds:cyan_stained_potion_jar missingwilds:gray_stained_food_jar missingwilds:gray_stained_jar missingwilds:gray_stained_potion_jar missingwilds:green_stained_food_jar missingwilds:green_stained_jar missingwilds:green_stained_potion_jar missingwilds:light_blue_stained_food_jar missingwilds:light_blue_stained_jar missingwilds:light_blue_stained_potion_jar missingwilds:light_gray_stained_food_jar missingwilds:light_gray_stained_jar missingwilds:light_gray_stained_potion_jar missingwilds:lime_stained_food_jar missingwilds:lime_stained_jar missingwilds:lime_stained_potion_jar missingwilds:magenta_stained_food_jar missingwilds:magenta_stained_jar missingwilds:magenta_stained_potion_jar missingwilds:orange_stained_food_jar missingwilds:orange_stained_jar missingwilds:orange_stained_potion_jar missingwilds:pink_stained_food_jar missingwilds:pink_stained_jar missingwilds:pink_stained_potion_jar missingwilds:purple_stained_food_jar missingwilds:purple_stained_jar missingwilds:purple_stained_potion_jar missingwilds:red_stained_food_jar missingwilds:red_stained_jar missingwilds:red_stained_potion_jar missingwilds:white_stained_food_jar missingwilds:white_stained_jar missingwilds:white_stained_potion_jar missingwilds:yellow_stained_food_jar missingwilds:yellow_stained_jar missingwilds:yellow_stained_potion_jar \
|
||||
\
|
||||
quark:crystal_pane:variant=crystal_black \
|
||||
\
|
||||
securitycraft:reinforced_black_stained_glass_pane \
|
||||
\
|
||||
tconstruct:black_clear_stained_glass_pane
|
||||
|
||||
# Water
|
||||
block.32000 = water bubble_column \
|
||||
\
|
||||
ad_astra:cryo_fuel ad_astra:flowing_cryo_fuel ad_astra:flowing_fuel ad_astra:flowing_oil ad_astra:fuel ad_astra:oil \
|
||||
\
|
||||
aether:aether_portal \
|
||||
\
|
||||
aquaacrobatics:bubble_column \
|
||||
\
|
||||
betterend:vent_bubble_column \
|
||||
\
|
||||
biomesoplenty:blood \
|
||||
\
|
||||
burnt:flowing_hot_spring_water burnt:geyser_block burnt:geyser_block_medium burnt:geyser_shoot burnt:geyser_starter burnt:geyser_starter_medium burnt:hot_spring_water \
|
||||
\
|
||||
butcher:brinesolution butcher:chlorine \
|
||||
\
|
||||
chiselsandbits:chiseled_fluid \
|
||||
\
|
||||
create_enchantment_industry:flowing_ink create_enchantment_industry:ink \
|
||||
\
|
||||
createaddition:bioethanol createaddition:flowing_bioethanol createaddition:flowing_seed_oil createaddition:seed_oil \
|
||||
\
|
||||
delightfulcreators:apple_cider_block delightfulcreators:melon_juice_block \
|
||||
\
|
||||
enderio:cloud_seed enderio:cloud_seed_concentrated enderio:dew_of_the_void enderio:fire_water enderio:hootch enderio:liquid_sunshine enderio:nutrient_distillation enderio:rocket_fuel enderio:vapor_of_levity enderio:xp_juice \
|
||||
\
|
||||
growthcraft_apples:fluid_applecider_apple_cider_ethereal growthcraft_apples:fluid_applecider_apple_cider_extended growthcraft_apples:fluid_applecider_apple_cider_fermented growthcraft_apples:fluid_applecider_apple_cider_intoxicated growthcraft_apples:fluid_applecider_apple_cider_poisoned growthcraft_apples:fluid_applecider_apple_cider_potent growthcraft_apples:fluid_applecider_apple_cider_potentextended growthcraft_apples:fluid_applecider_apple_juice \
|
||||
\
|
||||
immersiveengineering:acetaldehyde_fluid_block immersiveengineering:ethanol_fluid_block immersiveengineering:herbicide_fluid_block immersiveengineering:phenolic_resin_fluid_block immersiveengineering:plantoil_fluid_block immersiveengineering:redstone_acid_fluid_block \
|
||||
\
|
||||
littletiles:colored_water littletiles:colored_water_flowing \
|
||||
\
|
||||
milk:milk_fluid_block \
|
||||
\
|
||||
nyx:lunar_water \
|
||||
\
|
||||
sauce:source_fluid_block \
|
||||
\
|
||||
securitycraft:fake_water_block securitycraft:flowing_fake_water_block \
|
||||
\
|
||||
sliceanddice:fertilizer sliceanddice:flowing_fertilizer \
|
||||
\
|
||||
spelunkery:spring_water \
|
||||
\
|
||||
streams:river/tile.water/-1/-2 streams:river/tile.water/-1/2 streams:river/tile.water/-2/-1 streams:river/tile.water/-2/-2 streams:river/tile.water/-2/0 streams:river/tile.water/-2/1 streams:river/tile.water/-2/2 streams:river/tile.water/0/-2 streams:river/tile.water/0/0 streams:river/tile.water/0/2 streams:river/tile.water/1/-2 streams:river/tile.water/1/2 streams:river/tile.water/2/-1 streams:river/tile.water/2/-2 streams:river/tile.water/2/0 streams:river/tile.water/2/1 streams:river/tile.water/2/2 \
|
||||
\
|
||||
supplementaries:lumisene \
|
||||
\
|
||||
tconstruct:blood_fluid tconstruct:blueslime tconstruct:earth_slime_fluid tconstruct:ender_slime_fluid tconstruct:honey_fluid tconstruct:liquid_soul_fluid tconstruct:milk tconstruct:molten_amethyst_fluid tconstruct:molten_diamond_fluid tconstruct:molten_emerald_fluid tconstruct:purpleslime tconstruct:sky_slime_fluid tconstruct:venom_fluid \
|
||||
\
|
||||
tfc:fluid/river_water tfc:fluid/salt_water tfc:fluid/spring_water
|
||||
|
||||
# Ice
|
||||
block.32004 = ice frosted_ice \
|
||||
tags_transparent_ice \
|
||||
\
|
||||
aether:frosted_ice \
|
||||
\
|
||||
burnt:black_ice burnt:black_ice_break \
|
||||
\
|
||||
chisel:array/ice chisel:braid/ice chisel:chaotic_bricks/ice chisel:chaotic_medium/ice chisel:chaotic_small/ice chisel:circular/ice chisel:cracked/ice chisel:cracked_bricks/ice chisel:cut/ice chisel:dent/ice chisel:encased_bricks/ice chisel:french/ice chisel:ice chisel:ice1 chisel:ice2 chisel:icepillar chisel:jellybean/ice chisel:large_tile/ice chisel:layer/ice chisel:mosaic/ice chisel:ornate/ice chisel:panel/ice chisel:pillar/ice chisel:prism/ice chisel:raw/ice chisel:road/ice chisel:slant/ice chisel:small_bricks/ice chisel:soft_bricks/ice chisel:solid_bricks/ice chisel:tiles_medium/ice chisel:tiles_small/ice chisel:triple_bricks/ice chisel:twist/ice chisel:weaver/ice chisel:zag/ice \
|
||||
\
|
||||
chiselsandbits:chiseled_ice \
|
||||
\
|
||||
ecologics:thin_ice \
|
||||
\
|
||||
iceandfire:egginice \
|
||||
\
|
||||
immersive_weathering:frost immersive_weathering:thin_ice \
|
||||
\
|
||||
rare-ice:rare_ice \
|
||||
\
|
||||
securitycraft:reinforced_ice \
|
||||
\
|
||||
tfc:ice_pile tfc:icicle tfc:sea_ice \
|
||||
\
|
||||
yungscavebiomes:ice_sheet
|
||||
|
||||
# Glass
|
||||
block.32008 = glass \
|
||||
\
|
||||
allthecompressed:glass_1x allthecompressed:glass_2x allthecompressed:glass_3x allthecompressed:glass_4x allthecompressed:glass_5x allthecompressed:glass_6x allthecompressed:glass_7x allthecompressed:glass_8x allthecompressed:glass_9x \
|
||||
\
|
||||
betternether:cincinnasite_frame \
|
||||
\
|
||||
blockbox:rough_glass \
|
||||
\
|
||||
blockus:beveled_glass \
|
||||
\
|
||||
born_in_chaos_v1:dark_stained_glass \
|
||||
\
|
||||
chipped:arched_leaded_glass_pillar chipped:circle_oak_glass chipped:clear_leaded_glass chipped:fancy_leaded_glass chipped:large_diamond_leaded_glass chipped:lead_woven_glass chipped:oak_bared_glass chipped:oak_bordered_glass chipped:oak_diamond_bordered_glass chipped:oak_horizontal_lined_glass chipped:oak_large_diamond_glass chipped:oak_line_bared_glass chipped:oak_ornate_bared_glass chipped:oak_snowflake_glass chipped:oak_woven_glass chipped:ornate_leaded_glass chipped:raster_leaded_glass chipped:small_diamond_leaded_glass chipped:square_leaded_glass chipped:square_oak_glass chipped:vertical_leaded_glass \
|
||||
\
|
||||
chisel:bubble/glass chisel:chinese/glass chisel:chinese2/glass chisel:chrono/glass chisel:dungeon/glass chisel:ironfencemodern/glass chisel:japanese/glass chisel:japanese2/glass chisel:light/glass chisel:noborder/glass chisel:ornatesteel/glass chisel:ornatesteel_old/glass chisel:screen/glass chisel:shale/glass chisel:steelframe/glass chisel:stone/glass chisel:streak/glass chisel:thick/glass chisel:thin/glass \
|
||||
\
|
||||
chiselsandbits:chiseled_glass \
|
||||
\
|
||||
createdeco:andesite_window createdeco:brass_window createdeco:copper_window createdeco:industrial_iron_window createdeco:iron_window createdeco:zinc_window \
|
||||
\
|
||||
growthcraft_cellar:culture_jar \
|
||||
\
|
||||
hearth_and_home:barred_glass \
|
||||
\
|
||||
immersive_weathering:frosty_glass \
|
||||
\
|
||||
mocreatures:gleaming_glass \
|
||||
\
|
||||
nyx:crystal \
|
||||
\
|
||||
securitycraft:reinforced_glass \
|
||||
\
|
||||
supplementaries:bubble_block \
|
||||
\
|
||||
tconstruct:clear_glass tconstruct:scorched_fuel_gauge tconstruct:scorched_glass tconstruct:scorched_ingot_gauge tconstruct:scorched_soul_glass tconstruct:seared_fuel_gauge tconstruct:seared_glass tconstruct:seared_ingot_gauge tconstruct:seared_soul_glass tconstruct:soul_glass \
|
||||
\
|
||||
tfc:poured_glass
|
||||
|
||||
# Glass Without ACL Connected Glass
|
||||
block.32009 = create:tiled_glass create:horizontal_framed_glass create:framed_glass create:vertical_framed_glass create:acacia_window create:bamboo_window create:cherry_window create:crimson_window create:dark_oak_window create:industrial_iron_window create:jungle_window create:mangrove_window create:oak_window create:ornate_iron_window create:spruce_window create:warped_window \
|
||||
tags_neoforge_glass \
|
||||
\
|
||||
createframed:andesite_alloy_window createframed:black_cardboard_window createframed:blue_cardboard_window createframed:brass_window createframed:brown_cardboard_window createframed:cardboard_window createframed:copper_window createframed:cyan_cardboard_window createframed:gray_cardboard_window createframed:green_cardboard_window createframed:light_blue_cardboard_window createframed:light_gray_cardboard_window createframed:lime_cardboard_window createframed:magenta_cardboard_window createframed:orange_cardboard_window createframed:pink_cardboard_window createframed:purple_cardboard_window createframed:red_cardboard_window createframed:white_cardboard_window createframed:yellow_cardboard_window createframed:zinc_window \
|
||||
\
|
||||
diagonalwindows:createframed/blue_cardboard_window_pane diagonalwindows:createframed/brass_window_pane diagonalwindows:createframed/brown_cardboard_window_pane diagonalwindows:createframed/copper_window_pane diagonalwindows:createframed/cyan_cardboard_window_pane diagonalwindows:createframed/gray_cardboard_window_pane diagonalwindows:createframed/green_cardboard_window_pane diagonalwindows:createframed/light_blue_cardboard_window_pane diagonalwindows:createframed/light_gray_cardboard_window_pane diagonalwindows:createframed/lime_cardboard_window_pane diagonalwindows:createframed/magenta_cardboard_window_pane diagonalwindows:createframed/orange_cardboard_window_pane diagonalwindows:createframed/pink_cardboard_window_pane diagonalwindows:createframed/purple_cardboard_window_pane diagonalwindows:createframed/red_cardboard_window_pane diagonalwindows:createframed/white_cardboard_window_pane diagonalwindows:createframed/yellow_cardboard_window_pane diagonalwindows:createframed/zinc_window_pane
|
||||
|
||||
# Glass Pane
|
||||
block.32012 = glass_pane \
|
||||
\
|
||||
blockbox:rough_glass_pane \
|
||||
\
|
||||
blockus:beveled_glass_pane \
|
||||
\
|
||||
born_in_chaos_v1:dark_stained_glass_panel \
|
||||
\
|
||||
butcher:filled_jar butcher:jar \
|
||||
\
|
||||
chipped:arched_leaded_glass_pane_pillar chipped:circle_oak_glass_pane chipped:clear_leaded_glass_pane chipped:fancy_leaded_glass_pane chipped:large_diamond_leaded_glass_pane chipped:lead_woven_glass_pane chipped:oak_bared_glass_pane chipped:oak_bordered_glass_pane chipped:oak_diamond_bordered_glass_pane chipped:oak_horizontal_lined_glass_pane chipped:oak_large_diamond_glass_pane chipped:oak_line_bared_glass_pane chipped:oak_ornate_bared_glass_pane chipped:oak_snowflake_glass_pane chipped:oak_woven_glass_pane chipped:ornate_leaded_glass_pane chipped:raster_leaded_glass_pane chipped:small_diamond_leaded_glass_pane chipped:smooth_inlayed_ice chipped:square_leaded_glass_pane chipped:square_oak_glass_pane chipped:vertical_leaded_glass_pane \
|
||||
\
|
||||
createdeco:andesite_window_pane createdeco:brass_window_pane createdeco:copper_window_pane createdeco:industrial_iron_window_pane createdeco:iron_window_pane createdeco:zinc_window_pane \
|
||||
\
|
||||
diagonalwindows:blockus/beveled_glass_pane diagonalwindows:createframed/andesite_alloy_window_pane diagonalwindows:createframed/andesite_alloy_window_panew diagonalwindows:createframed/black_cardboard_window_pane diagonalwindows:createframed/cardboard_window_pane diagonalwindows:minecraft/glass_pane \
|
||||
\
|
||||
hearth_and_home:barred_glass_pane \
|
||||
\
|
||||
immersive_weathering:frosty_glass_pane \
|
||||
\
|
||||
missingwilds:food_jar missingwilds:jar missingwilds:potion_jar missingwilds:tinted_firefly_jar missingwilds:tinted_food_jar missingwilds:tinted_jar missingwilds:tinted_potion_jar \
|
||||
\
|
||||
securitycraft:inventory_scanner_field securitycraft:laser securitycraft:reinforced_glass_pane \
|
||||
\
|
||||
tconstruct:clear_glass_pane tconstruct:scorched_glass_pane tconstruct:scorched_soul_glass_pane tconstruct:seared_glass_pane tconstruct:seared_soul_glass_pane tconstruct:soul_glass_pane
|
||||
|
||||
# Glass Pane Without ACL Connected Glass
|
||||
block.32013 = create:framed_glass_door create:framed_glass_trapdoor create:tiled_glass_pane create:framed_glass_pane create:horizontal_framed_glass_pane create:vertical_framed_glass_pane create:acacia_window_pane create:bamboo_window_pane create:cherry_window_pane create:crimson_window_pane create:dark_oak_window_pane create:industrial_iron_window_pane create:jungle_window_pane create:mangrove_window_pane create:oak_window_pane create:ornate_iron_window_pane create:spruce_window_pane create:warped_window_pane \
|
||||
tags_neoforge_glass_panes \
|
||||
\
|
||||
createframed:andesite_alloy_window_pane createframed:black_cardboard_window_pane createframed:blue_cardboard_window_pane createframed:brass_window_pane createframed:brown_cardboard_window_pane createframed:cardboard_window_pane createframed:copper_window_pane createframed:cyan_cardboard_window_pane createframed:gray_cardboard_window_pane createframed:green_cardboard_window_pane createframed:light_blue_cardboard_window_pane createframed:light_gray_cardboard_window_pane createframed:lime_cardboard_window_pane createframed:magenta_cardboard_window_pane createframed:orange_cardboard_window_pane createframed:pink_cardboard_window_pane createframed:purple_cardboard_window_pane createframed:red_cardboard_window_pane createframed:white_cardboard_window_pane createframed:yellow_cardboard_window_pane createframed:zinc_window_pane
|
||||
|
||||
# Beacon
|
||||
block.32016 = beacon \
|
||||
\
|
||||
betterend:amaranita_fur betterend:gold_chandelier betterend:iron_chandelier betterend:lumecorn betterend:terminite_chandelier betterend:thallasium_chandelier \
|
||||
\
|
||||
bosses_of_mass_destruction:levitation_block bosses_of_mass_destruction:mob_ward \
|
||||
\
|
||||
cinderscapes:umbral_flesh_block \
|
||||
\
|
||||
spelunkery:light_blue_glowstick
|
||||
#endif
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,541 @@
|
||||
block.5000-10081.properties:
|
||||
- Signs
|
||||
- Chests
|
||||
- Ender Chest
|
||||
- Shulker Boxes, Heads, Banners, and Beds
|
||||
- Player Head
|
||||
- Conduits
|
||||
- End Portal 1.20.1+
|
||||
- Dimensional Doors uses the End Portal shader to display its dimensional portal effect.
|
||||
- End Portal before 1.20.1
|
||||
- Bell
|
||||
- Copper Block Entity
|
||||
- No Directional Shading
|
||||
- Small Flowers / Flowers Lower Half - Euphoria Patches Emissive Flowers
|
||||
- Short Foliage / Foliage Lower Half
|
||||
- Leaves - Not affected by Euphoria Patches Seasons (Don't tint in Autumn, get snow in winter)
|
||||
- Leaves
|
||||
- Leaves - Euphoria Patches Emissive Flowers
|
||||
- Waving Foliage - Vine
|
||||
- Non-Waving Foliage - Euphoria Patches Interactive Foliage
|
||||
- Non-Waving Foliage
|
||||
- Non-Waving Flowers - Euphoria Patches Emissive Flowers
|
||||
- Tall Foliage Upper Half
|
||||
- Tall Flowers Upper half - Euphoria Patches Emissive Flowers
|
||||
- Automatic glowing modded ores - Stone
|
||||
- Short Foliage / Foliage Lower Half - No Subsurface Scattering
|
||||
- Automatic glowing modded ores - Netherrack
|
||||
- Tall Foliage / Foliage Upper Half - No Subsurface Scattering
|
||||
- Automatic glowing modded ores - Endstone
|
||||
- Crimson Roots - Better Color balance for Soul Sand Valley Overhaul
|
||||
- Stone Bricks
|
||||
- Stone Brick Walls
|
||||
- Stone Brick Slabs and Stairs
|
||||
- Anvil
|
||||
- Sugar Cane
|
||||
- Rails
|
||||
- Cauldron / Unlocked Hopper
|
||||
- Locked Hopper - Euphoria Patches Redstone IPBR
|
||||
- Cauldron With Water
|
||||
- Powder Snow Cauldron
|
||||
- Lava Cauldron
|
||||
- Lever
|
||||
- Lectern
|
||||
- Still Lava - Euphoria Patches Lava Noise
|
||||
- Flowing Lava - Euphoria Patches Lava Noise
|
||||
- Fire
|
||||
- Soul Fire
|
||||
- Enabled Redstone Stone Blocks - Euphoria Patches Redstone IPBR
|
||||
- Stone Blocks
|
||||
- Stone Stuff / Disabled Redstone Stone Blocks - Euphoria Patches Redstone IPBR
|
||||
|
||||
block.10083-10159.properties:
|
||||
- Stone slabs and stairs
|
||||
- Granite Full Block
|
||||
- Granite Walls
|
||||
- Granite Slabs and Stairs
|
||||
- Diorite Full Block
|
||||
- Diorite Walls
|
||||
- Diorite Slabs and Stairs
|
||||
- Andesite Full Block
|
||||
- Andesite Walls
|
||||
- Andesite Slabs and Stairs
|
||||
- Polished Granite Full Block
|
||||
- Polished Granite Non-Full Blocks
|
||||
- Polished Diorite Full Block
|
||||
- Polished Diorite Non-Full Blocks
|
||||
- Polished Andesite Full Block / Mud Brick Full Block / Bricks
|
||||
- Brick Walls
|
||||
- Polished Andesite / Mud Brick Slabs and Stairs
|
||||
- Deepslate - Full Blocks
|
||||
- Deepslate - Walls
|
||||
- Cobbled Deepslate stairs and slabs
|
||||
- Other Deepslate - Full Blocks / Mangrove Full Blocks
|
||||
- Other Deepslate - Walls / Mangrove Non-Full Blocks
|
||||
- Deepslate Slabs and Stairs
|
||||
- Calcite Blocks
|
||||
- Calcite Non-Full Blocks (Modded Only)
|
||||
- Dripstone
|
||||
- Pointed Dripstone
|
||||
- Daylight Detector
|
||||
- Snowy Dirt Blocks
|
||||
- Snowy Dirt Block Non-Full Blocks
|
||||
- Normal Mycelium
|
||||
- Normal Dirt
|
||||
- Farmland Moisture Levels 0-6
|
||||
- Normal Grass Block
|
||||
- Grass Block Non-Full Block
|
||||
- Farmland Moisture 7 (Fully Moist)
|
||||
- Netherrack
|
||||
- Netherrack Non-Full Blocks (Modded Only)
|
||||
- Warped Nylium
|
||||
- Warped Wart Block - Euphoria Patched Emissive Wart Blocks
|
||||
- Warped Wart Non-Full Block (Modded Only)
|
||||
- Crimson Nylium
|
||||
- Crimson Nylium Non-Full Block / Nether Wart Non-Full Block
|
||||
- Nether Wart Block - Euphoria Patched Emissive Wart Blocks
|
||||
- Cobblestone, Piston, Dispenser, Droppers, Lodestone
|
||||
- Cobblestone Walls
|
||||
- Cobblestone Slabs and Stairs
|
||||
- Oak Full Blocks
|
||||
- Oak Non-Full Blocks
|
||||
- Oak Slabs and Stairs
|
||||
|
||||
block.10160-10241.properties:
|
||||
- Oak Logs
|
||||
- Oak Non-Full Logs (Modded Only)
|
||||
- Spruce Full Blocks
|
||||
- Spruce Non-Full Blocks
|
||||
- Spruce Slabs and Stairs
|
||||
- Spruce Logs
|
||||
- Spruce Non-Full Logs (Modded Only)
|
||||
- Birch Full Blocks
|
||||
- Birch Non-Full Blocks
|
||||
- Birch Slabs and Stairs
|
||||
- Birch Logs
|
||||
- Birch Non-Full Logs (Modded Only)
|
||||
- Jungle Full Blocks
|
||||
- Jungle Non-Full Blocks
|
||||
- Jungle Slabs and Stairs
|
||||
- Jungle Logs
|
||||
- Jungle Non-Full Logs (Modded Only)
|
||||
- Acacia Full Blocks
|
||||
- Acacia Non-Full Blocks
|
||||
- Acacia Slabs and Stairs
|
||||
- Acacia Logs
|
||||
- Acacia Non-Full Logs (Modded Only)
|
||||
- Dark Oak Full Blocks
|
||||
- Dark Oak Non-Full Blocks
|
||||
- Dark Oak Slabs and Stairs
|
||||
- Dark Oak Logs
|
||||
- Dark Oak Non-Full Logs (Modded Only)
|
||||
- Mangrove Full Blocks
|
||||
- Mangrove Non-Full Blocks
|
||||
- Mangrove Slabs and Stairs
|
||||
- Mangrove Logs
|
||||
- Mangrove Non-Full Logs (Modded Only)
|
||||
- Crimson Wood Full Blocks
|
||||
- Crimson Wood Non-Full Blocks
|
||||
- Crimson Wood Slabs and Stairs
|
||||
- Crimson Stem
|
||||
- Crimson Non-Full Stems (Modded Only)
|
||||
- Warped Wood Full Blocks
|
||||
- Warped Wood Non-Full Blocks
|
||||
- Warped Wood Slabs and Stairs
|
||||
- Warped Stem
|
||||
- Warped Non-Full Stem (Modded Only)
|
||||
- Bedrock
|
||||
- Bedrock Non-Full Blocks (Modded Only)
|
||||
- Sand
|
||||
- Sand Non-Full Blocks (Modded Only)
|
||||
- Red Sand
|
||||
- Red Sand Non-Full Blocks (Modded Only)
|
||||
- Sandstone Full Block
|
||||
- Sandstone Walls
|
||||
|
||||
block.10243-10349.properties:
|
||||
- Sandstone Slabs and Stairs
|
||||
- Red Sandstone Full Block
|
||||
- Red Sandstone Walls
|
||||
- Red Sandstone Slabs and Stairs
|
||||
- Netherite Blocks
|
||||
- Netherite Non-Full Blocks (Modded Only)
|
||||
- Ancient Debris
|
||||
- Ancient Debris Non-Full Blocks (Modded Only)
|
||||
- Iron Bars
|
||||
- Declared but unused in Complementary itself
|
||||
- Iron Blocks
|
||||
- Unpowered Heavy Weighted Pressure Plate - Euphoria Patches Redstone IPBR
|
||||
- Powered Heavy Weighted Pressure Plate - Euphoria Patches Redstone IPBR
|
||||
- Euphoria Patches Glowing Raw Iron Blocks
|
||||
- Glowing Raw Iron Non-Full Blocks (Modded Only)
|
||||
- Glowing Ores Iron
|
||||
- Deepslate Variant
|
||||
- Euphoria Patches Glowing Raw Copper Blocks
|
||||
- Glowing Raw Copper Blocks Non-Full Blocks (Modded Block)
|
||||
- Glowing Ores Copper
|
||||
- Glowing Ores Copper Non-Full Block (Modded Only)
|
||||
- Copper Full Blocks
|
||||
- Copper Non-Full Blocks
|
||||
- Copper Slabs and Stairs
|
||||
- Euphoria Patches Glowing Raw Gold Blocks
|
||||
- Glowing Raw Gold Blocks Non-Full Blocks (Modded Block)
|
||||
- Glowing Ores Gold
|
||||
- Glowing Ores Gold Non-Full Block (Modded Only)
|
||||
- Deepslate Gold Ore Variant
|
||||
- Pink Modded Ores
|
||||
- Purple Modded Ores
|
||||
- Glowing Ores Nether Gold
|
||||
- Gold Blocks
|
||||
- Unpowered Light Weighted Pressure Plate - Euphoria Patches Redstone IPBR
|
||||
- Powered Light Weighted Pressure Plate - Euphoria Patches Redstone IPBR
|
||||
- Diamond Blocks
|
||||
- Diamond Non-Full Blocks (Modded Only)
|
||||
- Glowing Ores Diamond
|
||||
- Glowing Ores Diamond Non-Full Block (Modded Only)
|
||||
- Deepslate Diamond Variant
|
||||
- Amethyst Blocks
|
||||
- Amethyst Non-Full Blocks (Modded Only)
|
||||
- Amethyst Crystals
|
||||
- Emerald Blocks
|
||||
- Emerald Non-Full Blocks (Modded Only)
|
||||
- Glowing Ores Emerald
|
||||
- Glowing Non-Full Emerald Ore (Modded Only)
|
||||
- Azalea
|
||||
|
||||
block.10352-10460.properties:
|
||||
- Lapis Blocks
|
||||
- Lapis Non-Full Blocks (Modded Only)
|
||||
- Glowing Ores Lapis
|
||||
- Deepslate Variant
|
||||
- Full Quartz Block
|
||||
- Non-Full Quartz Block
|
||||
- Glowing Ores Nether Quartz
|
||||
- Obsidian Full Blocks
|
||||
- Obsidian Non-Full Blocks (Modded Only)
|
||||
- Full Purpur Blocks
|
||||
- Non-Full Purpur Blocks
|
||||
- Full Snow Blocks
|
||||
- Non-Full Snow Blocks
|
||||
- Packed Ice
|
||||
- Packed Ice Non-Full Blocks (Modded Only)
|
||||
- Blue Ice
|
||||
- Non-Full Blue Ice (Modded Only)
|
||||
- Carved Pumpkin
|
||||
- Pumpkin Non-Full Blocks (Modded Only)
|
||||
- Jack o'Lantern
|
||||
- Non-Waterlogged Sea Pickle
|
||||
- Waterlogged Sea Pickle
|
||||
- Basalt Blocks
|
||||
- Basalt Non-Full Blocks (Modded Only)
|
||||
- Glowstone Blocks
|
||||
- Nether Bricks Full Blocks
|
||||
- Nether Brick Non-Full Blocks
|
||||
- Nether Brick Slabs and Stairs
|
||||
- Red Nether Bricks Full Blocks
|
||||
- Red Nether Bricks Non-Full Blocks
|
||||
- Red Nether Slabs and Stairs
|
||||
- Melon
|
||||
- Melon Non-Full Blocks (Modded Only)
|
||||
- End Stone Full Blocks
|
||||
- End Stone Non-Full Blocks
|
||||
- Endstone Slabs and Stairs
|
||||
- Terracotta
|
||||
- Terracotta Non-Full Blocks (Modded Only)
|
||||
- Glazed Terracotta
|
||||
- Glazed Terracotta Non-Full Blocks (Modded Only)
|
||||
- Prismarine Full Blocks
|
||||
- Prismarine Non-Full Blocks
|
||||
- Prismarine Slabs and Stairs
|
||||
- Dark Prismarine Full Blocks
|
||||
- Dark Prismarine Non-Full Blocks
|
||||
- Sea Lantern
|
||||
- Magma Blocks
|
||||
- Magma Non-Full Blocks (Modded Only)
|
||||
- Command Blocks
|
||||
- Concrete Blocks
|
||||
|
||||
block.10461-10608.properties:
|
||||
- Concrete Non-Full Blocks (Modded Only)
|
||||
- Concrete Powder
|
||||
- Concrete Powder Non-Full Blocks (Modded Only)
|
||||
- Coral Full Blocks
|
||||
- Crying Obsidian
|
||||
- Crying Obsidian Non-Full Blocks (Modded Only)
|
||||
- Blackstone Full Blocks
|
||||
- Blackstone Non-Full Blocks
|
||||
- Blackstone Slabs and Stairs
|
||||
- Glowing Gilded Blackstone
|
||||
- Glowing Gilded Blackstone (Modded Only)
|
||||
- Top Water Plants (LilyPads, Waterlilies, Duckweed, etc.)
|
||||
- Path Blocks
|
||||
- Torch
|
||||
- End Rod
|
||||
- Chorus Plant
|
||||
- Chorus Flower
|
||||
- Chorus Flower - Fully Grown
|
||||
- Lit Furnace (Turned On)
|
||||
- Cactus
|
||||
- Unpowered Noteblock
|
||||
- Powered Noteblock
|
||||
- Soul Torch
|
||||
- Brown Mushroom Blocks
|
||||
- Brown Mushroom Non-Full Blocks (Modded Only)
|
||||
- Red Mushroom Blocks
|
||||
- Mushroom Stem Blocks
|
||||
- Mushroom Stem Non-Full Blocks (Modded Only)
|
||||
- Glow Lichen
|
||||
- Enchanting Table
|
||||
- End Portal Frame Without Ender Eye
|
||||
- End Portal Frame With Ender Eye
|
||||
- End Portal Frame With Ender Eye Full Block (Modded Only)
|
||||
- Lantern
|
||||
- Hanging Lantern
|
||||
- Soul Lantern
|
||||
- Turtle Egg
|
||||
- Dragon Egg
|
||||
- Lit Smoker (Turned On)
|
||||
- Lit Blast Furnace (Turned On)
|
||||
- Coal Block
|
||||
- Coal Non-Full Blocks (Modded Only)
|
||||
- Respawn Anchor 0 Charge (No Glowstone)
|
||||
- Respawn Anchor Charges (Has Glowstone)
|
||||
- Redstone Dust (Wire) Any Power Level
|
||||
- Redstone Dust (Wire) 0 Power Level
|
||||
- Redstone Torch Lit (Turned On)
|
||||
- Redstone Torch Unlit (Turned Off)
|
||||
- Redstone Block
|
||||
|
||||
block.10612-10744.properties:
|
||||
- Redstone Ore Unlit
|
||||
- Redstone Ore Lit
|
||||
- Deepslate Redstone Ore Unlit
|
||||
- Deepslate Redstone Ore Lit
|
||||
- Cave Vines Berries False
|
||||
- Cave Vines Berries True
|
||||
- Redstone Lamp Unlit
|
||||
- Redstone Lamp Lit
|
||||
- Powered Compartor/Repeater
|
||||
- Unpowered Compartor/Repeater
|
||||
- Unpowered Compartor and in subtract mode
|
||||
- Shroomlight
|
||||
- Shroomlight Non-Full Blocks (Modded Only)
|
||||
- Campfire Lit
|
||||
- Soul Campfire Lit
|
||||
- Campfires Unlit
|
||||
- Observer
|
||||
- Observer Non-Full Blocks (Modded Only)
|
||||
- Wool
|
||||
- Carpet
|
||||
- Tripwire (String Block)
|
||||
- Full Bone Blocks
|
||||
- Non-Full Bone Blocks (Modded Only)
|
||||
- Barrel \ Bee Blocks
|
||||
- Barrel Non-Full Blocks \ Bee Non-Full Blocks
|
||||
- Ochre Froglight
|
||||
- Verdant Froglight
|
||||
- Pearlescent Froglight
|
||||
- Reinforced Deepslate
|
||||
- Sculk, Sculk Catalyst Block
|
||||
- Sculk Non-Full Blocks (Modded Only)
|
||||
- Sculk Vein, Sculk Sensor:Unlit
|
||||
- Sculk Shrieker
|
||||
- Active Sculk Sensor
|
||||
- Mob Spawner
|
||||
- Tuff Blocks
|
||||
- Tuff Non-Full Blocks
|
||||
- Tuff Stairs and Slabs
|
||||
- Clay Full Blocks
|
||||
- Clay Non-Full Blocks (Modded Only)
|
||||
- Ladders
|
||||
- Gravel Full Blocks
|
||||
- Gravel Non-Full Blocks (Modded Only)
|
||||
- Flower Pot - No Subsurface Scattering
|
||||
- Flower Pot - Subsurface Scattering
|
||||
- Flower Pot - Subsurface Scattering, Flowers - Euphoria Patches Emissive Flowers
|
||||
- Jigsaw Block
|
||||
- Pitcther Crop
|
||||
- Chain
|
||||
- Soul Sand
|
||||
|
||||
block.10746-10854.properties:
|
||||
- Soul Soil
|
||||
- Dried Kelp Blocks
|
||||
- Dried Kelp Non-Full Blocks (Modded Only)
|
||||
- Bamboo
|
||||
- Bamboo Full Blocks
|
||||
- Bamboo Non-Full Blocks
|
||||
- Bamboo Stairs and Slabs
|
||||
- Cherry Wood Full Blocks
|
||||
- Cherry Wood Non-Full Blocks
|
||||
- Cherry Wood Stairs and Slabs
|
||||
- Cherry Logs
|
||||
- Cherry Non-Full Logs (Modded Only)
|
||||
- Torchflower
|
||||
- Potted Torchflower
|
||||
- Nether Fungus - Euphoria Patches Disable Interactive Foliage
|
||||
- Potted nether fungus
|
||||
- Calibrated Sculk Sensor Not Active
|
||||
- Calibrated Sculk Sensor Active
|
||||
- Oak Door Unpowered - Euphoria Patches Redstone IPBR
|
||||
- Oak Door Powered - Euphoria Patches Redstone IPBR
|
||||
- Spruce Door Unpowered - Euphoria Patches Redstone IPBR
|
||||
- Spruce Door Powered - Euphoria Patches Redstone IPBR
|
||||
- Birch Door Unpowered - Euphoria Patches Redstone IPBR
|
||||
- Birch Door Powered - Euphoria Patches Redstone IPBR
|
||||
- Jungle Door Unpowered - Euphoria Patches Redstone IPBR
|
||||
- Jungle Door Powered - Euphoria Patches Redstone IPBR
|
||||
- Acacia Door Unpowered - Euphoria Patches Redstone IPBR
|
||||
- Acacia Door Powered - Euphoria Patches Redstone IPBR
|
||||
- Dark Oak Door Unpowered - Euphoria Patches Redstone IPBR
|
||||
- Dark Oak Door Powered - Euphoria Patches Redstone IPBR
|
||||
- Mangrove Door Unpowered - Euphoria Patches Redstone IPBR
|
||||
- Mangrove Door Powered - Euphoria Patches Redstone IPBR
|
||||
- Crimson Door Unpowered - Euphoria Patches Redstone IPBR
|
||||
- Crimson Door Powered - Euphoria Patches Redstone IPBR
|
||||
- Warped Door Unpowered - Euphoria Patches Redstone IPBR
|
||||
- Warped Door Powered - Euphoria Patches Redstone IPBR
|
||||
- Bamboo Door Unpowered - Euphoria Patches Redstone IPBR
|
||||
- Bamboo Door Powered - Euphoria Patches Redstone IPBR
|
||||
- Cherry Door Unpowered - Euphoria Patches Redstone IPBR
|
||||
- Cherry Door Powered - Euphoria Patches Redstone IPBR
|
||||
- Brewing Stand
|
||||
- Lime Concrete - Euphoria Patches Green Screen
|
||||
- Blue Wool - Euphoria Patches Blue Screen
|
||||
- Blue Carpet - Euphoria Patches Blue Screen
|
||||
- Lime Wool - Euphoria Patches Green Screen
|
||||
- Lime Carpet - Euphoria Patches Green Screen
|
||||
- Blue Concrete - Euphoria Patches Euphoria Patches Blue Screen
|
||||
- Crafter
|
||||
- Copper Bulb - Normal And Exposed - Lit
|
||||
- Copper Bulb - Normal And Exposed - Unlit
|
||||
|
||||
block.10856-10964.properties:
|
||||
- Copper Bulb - Weathered And Oxidized - Lit
|
||||
- Copper Bulb - Weathered And Oxidized - Unlit
|
||||
- Copper Door Unpowered - Euphoria Patches Redstone IPBR
|
||||
- Copper Door Powered - Euphoria Patches Redstone IPBR
|
||||
- Copper Trapdoor Unpowered - Euphoria Patches Redstone IPBR
|
||||
- Copper Trapdoor Powered - Euphoria Patches Redstone IPBR
|
||||
- Trial Spawner Active
|
||||
- Trial Spawner Inactive
|
||||
- Trial Spawner Cooldown
|
||||
- Trial Spawner Ominous Active
|
||||
- Nether Vines with ACT Light
|
||||
- Nether Vines without ACT Light
|
||||
- Hay Bale
|
||||
- Hay Non-Full Blocks (Modded Only)
|
||||
- Normal Iron Door - Euphoria Patches Redstone IPBR
|
||||
- Powered Iron Door - Euphoria Patches Redstone IPBR
|
||||
- Unpowered Iron Trapdoor - Euphoria Patches Redstone IPBR
|
||||
- Powered Iron Trapdoor - Euphoria Patches Redstone IPBR
|
||||
- Normal Candles
|
||||
- Red Candles
|
||||
- Orange Candles
|
||||
- Yellow Candles
|
||||
- Lime Candles
|
||||
- Green Candles
|
||||
- Cyan Candles
|
||||
- Light Blue Candles
|
||||
- Blue Candles
|
||||
- Purple Candles
|
||||
- Magenta Candles
|
||||
- Pink Candles
|
||||
- Pale Hanging Moss - Euphoria Patches Interactive Foliage
|
||||
- Moss Block
|
||||
- Moss Carpet
|
||||
- Pale Moss Carpet
|
||||
- Pale Oak Wood Full Blocks
|
||||
- Pale Oak Wood Non-Full Blocks
|
||||
- Pale Oak Wood Slabs and Stairs
|
||||
- Pale Oak Log Full Blocks
|
||||
- Pale Oak Log Non-Full Blocks (Modded Only)
|
||||
- Pale Oak Door
|
||||
- Resin Full Blocks
|
||||
- Resin Non-Full Blocks
|
||||
- Creaking Heart Inactive 1.21.5
|
||||
- Creaking Heart Active 1.21.5
|
||||
- Creaking Heart Inactive 1.21.4
|
||||
- Creaking Heart Active 1.21.4
|
||||
- All snow layers except layer 8
|
||||
- Target 0 Power
|
||||
- Target Powered
|
||||
- Sponge
|
||||
|
||||
block.10968-31020.properties:
|
||||
- Wet Sponge
|
||||
- Firefly Bush
|
||||
- Open Eye Blossom
|
||||
- Pottet Open Eye Blossom
|
||||
- Copper Torch
|
||||
- Copper Lantern
|
||||
- Solid Blocks With No Properties
|
||||
- Non-Solid Blocks With No Properties
|
||||
- No Parallax Occlusion Mapping (POM)
|
||||
- These IDs should only be used for light sources that don’t work with the vanilla block IDs.
|
||||
- These IDs add primarily colored lighting if "Advanced Colored Lighting" is enabled.
|
||||
- Additionally, they add emission based on the brightness of the texture and light level when using Iris.
|
||||
- To add support for the handheld item, add these Ids to 44043+ in item.properties.
|
||||
- IMPORTANT: Use vanilla IDs first if they work better!!
|
||||
- White Modded Light Source - Also used For Black / Gray
|
||||
- Brown Modded Light Source
|
||||
- Red Modded Light Source
|
||||
- Orange Modded Light Source
|
||||
- Yellow Modded Light Source
|
||||
- Lime Modded Light Source
|
||||
- Green Modded Light Source
|
||||
- Cyan Modded Light Source
|
||||
- Light Blue Modded Light Source
|
||||
- Blue Modded Light Source
|
||||
- Purple Modded Light Source
|
||||
- Magenta Modded Light Source
|
||||
- Pink Modded Light Source
|
||||
- Declared but unused in Complementary itself
|
||||
- Tinted Glass Blocks
|
||||
- Tinted Glass Panes (Modded Only)
|
||||
- Slime Blocks
|
||||
- Honey Block
|
||||
- Nether Portal
|
||||
- White Stained Glass
|
||||
- White Stained Glass Panes
|
||||
- Orange Stained Glass
|
||||
- Orange Stained Glass Panes
|
||||
- Magenta Stained Glass
|
||||
- Magenta Stained Glass Panes
|
||||
- Light Blue Stained Glass
|
||||
- Light Blue Stained Glass Panes
|
||||
- Yellow Stained Glass
|
||||
- Yellow Stained Glass Panes
|
||||
- Lime Stained Glass
|
||||
- Lime Stained Glass Panes
|
||||
- Pink Stained Glass
|
||||
- Pink Stained Glass Panes
|
||||
- Gray Stained Glass
|
||||
- Gray Stained Glass Panes
|
||||
- Light Gray Stained Glass
|
||||
- Light Gray Stained Glass Panes
|
||||
- Cyan Stained Glass
|
||||
- Cyan Stained Glass Panes
|
||||
- Purple Stained Glass
|
||||
|
||||
block.31021-32016.properties:
|
||||
- Purple Stained Glass Panes
|
||||
- Blue Stained Glass
|
||||
- Blue Stained Glass Panes
|
||||
- Brown Stained Glass
|
||||
- Brown Stained Glass Panes
|
||||
- Green Stained Glass
|
||||
- Green Stained Glass Panes
|
||||
- Red Stained Glass
|
||||
- Red Stained Glass Panes
|
||||
- Black Stained Glass
|
||||
- Use if your glass is multi-colored, black will preserve the lighting through the glass texture.
|
||||
- Black Stained Glass Panes
|
||||
- Water
|
||||
- Ice
|
||||
- Glass
|
||||
- Glass Without ACL Connected Glass
|
||||
- Glass Pane
|
||||
- Glass Pane Without ACL Connected Glass
|
||||
- Beacon
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,85 @@
|
||||
### Last updated: February 10, 2026, 11:05 UTC
|
||||
# Copyright (c) 2026 SpacEagle17 – Licensed under the MIT License: https://opensource.org/licenses/MIT
|
||||
#
|
||||
# ███████╗██╗ ██╗ ██████╗██╗ ██╗ ██╗███████╗██╗██╗ ██╗███████╗ ████████╗ ██████╗ ███████╗██╗ ██╗██████╗ ██╗ ██╗ ██████╗ ██████╗ ██╗ █████╗ ██████╗ █████╗ ████████╗ ██████╗██╗ ██╗███████╗███████╗
|
||||
# ██╔════╝╚██╗██╔╝██╔════╝██║ ██║ ██║██╔════╝██║██║ ██║██╔════╝ ╚══██╔══╝██╔═══██╗ ██╔════╝██║ ██║██╔══██╗██║ ██║██╔═══██╗██╔══██╗██║██╔══██╗ ██╔══██╗██╔══██╗╚══██╔══╝██╔════╝██║ ██║██╔════╝██╔════╝
|
||||
# █████╗ ╚███╔╝ ██║ ██║ ██║ ██║███████╗██║██║ ██║█████╗ ██║ ██║ ██║ █████╗ ██║ ██║██████╔╝███████║██║ ██║██████╔╝██║███████║ ██████╔╝███████║ ██║ ██║ ███████║█████╗ ███████╗
|
||||
# ██╔══╝ ██╔██╗ ██║ ██║ ██║ ██║╚════██║██║╚██╗ ██╔╝██╔══╝ ██║ ██║ ██║ ██╔══╝ ██║ ██║██╔═══╝ ██╔══██║██║ ██║██╔══██╗██║██╔══██║ ██╔═══╝ ██╔══██║ ██║ ██║ ██╔══██║██╔══╝ ╚════██║
|
||||
# ███████╗██╔╝ ██╗╚██████╗███████╗╚██████╔╝███████║██║ ╚████╔╝ ███████╗ ██║ ╚██████╔╝ ███████╗╚██████╔╝██║ ██║ ██║╚██████╔╝██║ ██║██║██║ ██║ ██║ ██║ ██║ ██║ ╚██████╗██║ ██║███████╗███████║
|
||||
# ╚══════╝╚═╝ ╚═╝ ╚═════╝╚══════╝ ╚═════╝ ╚══════╝╚═╝ ╚═══╝ ╚══════╝ ╚═╝ ╚═════╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚══════╝╚══════╝
|
||||
#
|
||||
# This block.properties file is exclusive to Euphoria Patches - Not Compatible with normal Complementary Shaders
|
||||
# Version 28 - Every time a vanilla block changes, this number will go up. Modded blocks don't affect the version number
|
||||
# Last Change: more r5.6 moving around
|
||||
#---------------------------------------------------------------------------------------------------------------------
|
||||
#
|
||||
##### IMPORTANT! WHERE TO CONTRIBUTE: #####
|
||||
# If you want to contribute to the Euphoria Patches modded support library,
|
||||
# Please ONLY edit the files from GitHub. https://euphoriapatches.com/properties
|
||||
# See timestamp at the top of the file to ensure the latest version
|
||||
# PLEASE make sure to also update the addedMods.md file on GitHub to keep the documentation updated
|
||||
#
|
||||
#---------------------------------------------------------------------------------------------------------------------
|
||||
# Hello! Welcome to the Euphoria Patches block library made by the community. Shaders use these IDs to perform block-specific effects.
|
||||
#
|
||||
# block.10003: Flowers
|
||||
# block.10009: Leaves
|
||||
# block.10005: Foliage
|
||||
# block.10024: Modded Ores (shader will do its best to detect ore-pixels if "Enable Glowing Ores" setting is on)
|
||||
# block.10026: Same as 10024 but Netherrack
|
||||
# block.10028: Same as 10024 but Endstone
|
||||
# block.20000: No Parallax Occlusion Mapping
|
||||
#
|
||||
#---------------------------------------------------------------------------------------------------------------------
|
||||
#
|
||||
# IMPORTANT:
|
||||
# Even-numbered IDs are considered solid for Colored Lighting
|
||||
# Please place solid blocks ONLY under even IDs and non-solid only under odd IDs! Otherwise, it will look wrong with ACT turned on
|
||||
# Even IDs prevent ACT light from leaking through, just like one would imagine it would work for full solid blocks
|
||||
# EXCEPTION: Light Sources can also go to full block IDs
|
||||
# Is a block you've defined not working like you think it should? See end of file for block render layer explanation.
|
||||
#
|
||||
#----------------------------------------------------------------------
|
||||
#
|
||||
# ID Info:
|
||||
# * Note that odd-numbered terrain IDs are considered non-solid for Colored Lighting
|
||||
# 5XXX - Block Entities
|
||||
# 1XXXX - Terrain
|
||||
# 2XXXX - Random stuff
|
||||
# 21XXX - Modded Light Sources
|
||||
# 3XXXX - Translucent
|
||||
# * 31XXX - Translucents with advanced colored light tinting
|
||||
# * 32XXX - Translucents with alternative shadow calculation
|
||||
# 4XXXX - Items (see item.properties)
|
||||
# * 44XXX - Items for colored handheld lighting
|
||||
# * 45XXX - Items for other Iris exclusive features
|
||||
# 5XXXX - Entities (see entity.properties)
|
||||
#
|
||||
#---------------------------------------------------------------------------------------------------------------------
|
||||
#
|
||||
#### Template for Modded Blocks: ####
|
||||
#
|
||||
# # Description of the block ID
|
||||
# block.XXXXX = vanillaId1 vanillaId2 vanillaId3 ... \
|
||||
# tags_name1 tags_name2 tags_name3 ... \
|
||||
# \
|
||||
# modName1:modId1 modName1:modId2 modName1:modId3 ... \
|
||||
# \
|
||||
# modName2:modId1 modName2:modId2 modName2:modId3 ... \
|
||||
# ...
|
||||
# lastModInThisIDName:modId1 lastModInThisIDName:modId2 lastModInThisIDName:modId3
|
||||
|
||||
# # Description of the Next block ID
|
||||
# block.YYYYY = ...
|
||||
# ...
|
||||
|
||||
# - The last line of a block.XXXXX does not have a "\"
|
||||
# - XXXXX and YYYYY are placeholders for the actual numbers
|
||||
|
||||
|
||||
# --- IDs should be grouped by mods, for every new mod it should be added in a new line using "\" ---
|
||||
|
||||
|
||||
##### --------------------------------------------------------------------------------------------------------------------- #####
|
||||
##### --------------------------------------------------------------------------------------------------------------------- #####
|
||||
##### --------------------------------------------------------------------------------------------------------------------- #####
|
||||
@@ -0,0 +1,66 @@
|
||||
### Last updated: February 10, 2026, 11:54 UTC
|
||||
# Copyright (c) 2026 SpacEagle17 – Licensed under the MIT License: https://opensource.org/licenses/MIT
|
||||
|
||||
|
||||
# ██████╗ ███████╗███╗ ██╗██████╗ ███████╗██████╗ ██╗ █████╗ ██╗ ██╗███████╗██████╗ ███████╗
|
||||
# ██╔══██╗██╔════╝████╗ ██║██╔══██╗██╔════╝██╔══██╗ ██║ ██╔══██╗╚██╗ ██╔╝██╔════╝██╔══██╗██╔════╝
|
||||
# ██████╔╝█████╗ ██╔██╗ ██║██║ ██║█████╗ ██████╔╝ ██║ ███████║ ╚████╔╝ █████╗ ██████╔╝███████╗
|
||||
# ██╔══██╗██╔══╝ ██║╚██╗██║██║ ██║██╔══╝ ██╔══██╗ ██║ ██╔══██║ ╚██╔╝ ██╔══╝ ██╔══██╗╚════██║
|
||||
# ██║ ██║███████╗██║ ╚████║██████╔╝███████╗██║ ██║ ███████╗██║ ██║ ██║ ███████╗██║ ██║███████║
|
||||
# ╚═╝ ╚═╝╚══════╝╚═╝ ╚═══╝╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚══════╝╚═╝ ╚═╝ ╚═╝ ╚══════╝╚═╝ ╚═╝╚══════╝
|
||||
|
||||
# Blocks use what's called render layers. This tells the game how exactly to render a block, for example:
|
||||
#
|
||||
# Solid is best used for blocks with no alpha channel in its texture (i.e. stone and oak planks).
|
||||
# Cutout is best used for blocks with an alpha channel in its texture (i.e. saplings and foliage).
|
||||
# Cutout Mipped is best used for blocks with has an alpha channel and requires mipmaps. (i.e. leaves).
|
||||
# Translucent is best used for blocks that requires special handling to accurately handle transparency effects (i.e. stained glass and ice).
|
||||
#
|
||||
# Solid: no alpha, mipmaps, no blending
|
||||
# Cutout: alpha, no mipmaps, no blending
|
||||
# Cutout Mipped: alpha, mipmaps, no blending
|
||||
# Translucent: alpha, mipmaps, blending
|
||||
#
|
||||
# We can override the default render layer a block uses by defining them down below:
|
||||
|
||||
# Use the exclusive define only available with the Euphoria Patcher mod as layers can break on oculus
|
||||
#if defined EUPHORIA_PATCHES_IRIS || defined IS_ANGELICA && ANGELICA_VERSION >= 200000010
|
||||
|
||||
layer.solid = improved_damage:enchanter improved_damage:chipped_enchanter improved_damage:damaged_enchanter improved_damage:broken_enchanter
|
||||
|
||||
# Cutout Mipped is gone on 1.21.11, cutout instead always has mipmaps
|
||||
#if MC_VERSION < 12111
|
||||
|
||||
layer.cutout =
|
||||
|
||||
layer.cutout_mipped = createdeco:andesite_catwalk createdeco:andesite_catwalk_railing createdeco:andesite_catwalk_stairs createdeco:andesite_mesh_fence createdeco:andesite_support createdeco:andesite_support_wedge createdeco:brass_catwalk createdeco:brass_catwalk_railing createdeco:brass_catwalk_stairs createdeco:brass_mesh_fence createdeco:brass_support createdeco:brass_support_wedge createdeco:copper_catwalk createdeco:copper_catwalk_railing createdeco:copper_catwalk_stairs createdeco:copper_mesh_fence createdeco:copper_support createdeco:copper_support_wedge createdeco:industrial_iron_catwalk createdeco:industrial_iron_catwalk_railing createdeco:industrial_iron_catwalk_stairs createdeco:industrial_iron_mesh_fence createdeco:industrial_iron_support createdeco:industrial_iron_support_wedge createdeco:iron_catwalk createdeco:iron_catwalk_railing createdeco:iron_catwalk_stairs createdeco:iron_mesh_fence createdeco:iron_support createdeco:iron_support_wedge createdeco:zinc_catwalk createdeco:zinc_catwalk_railing createdeco:zinc_catwalk_stairs createdeco:zinc_mesh_fence createdeco:zinc_support createdeco:zinc_support_wedge
|
||||
#else
|
||||
|
||||
layer.cutout = createdeco:andesite_catwalk createdeco:andesite_catwalk_railing createdeco:andesite_catwalk_stairs createdeco:andesite_mesh_fence createdeco:andesite_support createdeco:andesite_support_wedge createdeco:brass_catwalk createdeco:brass_catwalk_railing createdeco:brass_catwalk_stairs createdeco:brass_mesh_fence createdeco:brass_support createdeco:brass_support_wedge createdeco:copper_catwalk createdeco:copper_catwalk_railing createdeco:copper_catwalk_stairs createdeco:copper_mesh_fence createdeco:copper_support createdeco:copper_support_wedge createdeco:industrial_iron_catwalk createdeco:industrial_iron_catwalk_railing createdeco:industrial_iron_catwalk_stairs createdeco:industrial_iron_mesh_fence createdeco:industrial_iron_support createdeco:industrial_iron_support_wedge createdeco:iron_catwalk createdeco:iron_catwalk_railing createdeco:iron_catwalk_stairs createdeco:iron_mesh_fence createdeco:iron_support createdeco:iron_support_wedge createdeco:zinc_catwalk createdeco:zinc_catwalk_railing createdeco:zinc_catwalk_stairs createdeco:zinc_mesh_fence createdeco:zinc_support createdeco:zinc_support_wedge
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined EUPHORIA_PATCHES_IRIS || defined EUPHORIA_PATCHES_OCULUS && EUPHORIA_PATCHES_OCULUS_VERSION > 10700 || defined IS_ANGELICA && ANGELICA_VERSION >= 200000010
|
||||
# It breaks on oculus before 1.8.0
|
||||
|
||||
layer.translucent = glass glass_pane beacon \
|
||||
\
|
||||
betternether:cincinnasite_frame \
|
||||
\
|
||||
create:framed_glass_door create:framed_glass_pane create:framed_glass_trapdoor create:horizontal_framed_glass_pane create:tiled_glass_pane create:vertical_framed_glass_pane create:tiled_glass create:horizontal_framed_glass create:framed_glass create:vertical_framed_glass create:acacia_window create:acacia_window_pane create:bamboo_window create:bamboo_window_pane create:cherry_window create:cherry_window_pane create:crimson_window create:crimson_window_pane create:dark_oak_window create:dark_oak_window_pane create:industrial_iron_window create:industrial_iron_window_pane create:jungle_window create:jungle_window_pane create:mangrove_window create:mangrove_window_pane create:oak_window create:oak_window_pane create:ornate_iron_window create:ornate_iron_window_pane create:spruce_window create:spruce_window_pane create:warped_window create:warped_window_pane \
|
||||
\
|
||||
createframed:andesite_alloy_window createframed:andesite_alloy_window_pane createframed:brass_window createframed:brass_window_pane createframed:cardboard_window createframed:cardboard_window_pane createframed:copper_window createframed:copper_window_pane createframed:zinc_window createframed:zinc_window_pane \
|
||||
\
|
||||
missingwilds:jar \
|
||||
\
|
||||
diagonalwindows:blockus/beveled_glass_pane diagonalwindows:createframed/andesite_alloy_window_pane diagonalwindows:createframed/andesite_alloy_window_panew diagonalwindows:createframed/black_cardboard_window_pane diagonalwindows:createframed/cardboard_window_pane diagonalwindows:minecraft/glass_pane \
|
||||
\
|
||||
lotr:tile.glass lotr:tile.glassPane lotr:tile.glassBottle lotr:tile.wineGlass lotr:tile.butterflyJar \
|
||||
\
|
||||
tfc:poured_glass
|
||||
|
||||
#else
|
||||
|
||||
# No Modded blocks can be defined here.
|
||||
layer.translucent = glass glass_pane beacon
|
||||
#endif
|
||||
@@ -0,0 +1,130 @@
|
||||
### Last updated: February 10, 2026, 11:54 UTC
|
||||
# Copyright (c) 2026 SpacEagle17 – Licensed under the MIT License: https://opensource.org/licenses/MIT
|
||||
|
||||
# ████████╗ █████╗ ██████╗ ███████╗
|
||||
# ╚══██╔══╝██╔══██╗██╔════╝ ██╔════╝
|
||||
# ██║ ███████║██║ ███╗███████╗
|
||||
# ██║ ██╔══██║██║ ██║╚════██║
|
||||
# ██║ ██║ ██║╚██████╔╝███████║
|
||||
# ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝
|
||||
|
||||
# These are tags working on Iris 1.8+
|
||||
# Please don't change anything in here or related to tags if you don't know what you are doing. Thank you :)
|
||||
|
||||
#if IRIS_TAG_SUPPORT > 1
|
||||
#define tags_small_flowers %small_flowers
|
||||
#define tags_small_plants %crops %saplings
|
||||
#define tags_leaves %leaves
|
||||
#define tags_stone_bricks %stone_bricks
|
||||
#define tags_anvil %anvil
|
||||
#define tags_rails %rails
|
||||
#define tags_cauldrons %cauldrons
|
||||
#define tags_fire %fire
|
||||
#define tags_stone %coal_ores %base_stone_overworld
|
||||
#define tags_redstone_stone_blocks %stone_buttons %stone_pressure_plates
|
||||
#define tags_mycelium %mooshrooms_spawnable_on
|
||||
#define tags_dirt %dirt
|
||||
#define tags_nylium %nylium
|
||||
#define tags_wart_blocks %wart_blocks
|
||||
#define tags_moss_block %sniffer_egg_hatch_boost
|
||||
#define tags_bookshelf %enchantment_power_provider
|
||||
#define tags_wood_non_full_blocks %fence_gates %wooden_fences %wooden_buttons %wooden_pressure_plates %wooden_slabs %wooden_stairs %wooden_trapdoors
|
||||
#define tags_oak_logs %oak_logs
|
||||
#define tags_spruce_logs %spruce_logs
|
||||
#define tags_birch_logs %birch_logs
|
||||
#define tags_jungle_logs %jungle_logs
|
||||
#define tags_acacia_logs %acacia_logs
|
||||
#define tags_dark_oak_logs %dark_oak_logs
|
||||
#define tags_mangrove_logs %mangrove_logs
|
||||
#define tags_crimson_stems %crimson_stems
|
||||
#define tags_warped_stems %warped_stems
|
||||
#define tags_sand %sand
|
||||
#define tags_iron_ores %iron_ores
|
||||
#define tags_copper_ores %copper_ores
|
||||
#define tags_gold_ores %gold_ores
|
||||
#define tags_diamond_ores %diamond_ores
|
||||
#define tags_amethyst_blocks %crystal_sound_blocks
|
||||
#define tags_emerald_ores %emerald_ores
|
||||
#define tags_lapis_ores %lapis_ores
|
||||
#define tags_snow %snow
|
||||
#define tags_ice %ice
|
||||
#define tags_transparent_ice %polar_bears_spawnable_on_alternate
|
||||
#define tags_terracotta %terracotta
|
||||
#define tags_concrete_powder %concrete_powder
|
||||
#define tags_coral_blocks %coral_blocks
|
||||
#define tags_coral_fans %corals %coral_plants %wall_corals
|
||||
#define tags_candles %candles %candle_cakes
|
||||
#define tags_redstone_ores %redstone_ores
|
||||
#define tags_campfires %campfires
|
||||
#define tags_wool %wool
|
||||
#define tags_wool_carpets %wool_carpets
|
||||
#define tags_beehives %beehives
|
||||
#define tags_flower_pots %flower_pots
|
||||
#define tags_soul_sand_blocks %soul_fire_base_blocks
|
||||
#define tags_bamboo_blocks %bamboo_blocks
|
||||
#define tags_cherry_logs %cherry_logs
|
||||
#define tags_wooden_doors %wooden_doors
|
||||
#define tags_signs %all_signs
|
||||
#define tags_block_entities %shulker_boxes %banners
|
||||
#define tags_end_portal_blocks %invalid_spawn_inside
|
||||
|
||||
##### MODDED TAGS #####
|
||||
# Add tags from mods where appropriate here.
|
||||
# Please keeps tags from specific mods in their own sections
|
||||
|
||||
# Chisels And Bits
|
||||
#define tags_chiselsandbits_chisel %chiselsandbits:chiseled/block
|
||||
|
||||
# Dimensional Doors
|
||||
#define tags_dimdoors_ag_door %dimdoors:ag_door
|
||||
|
||||
# Every Compat
|
||||
#define tags_everycomp_tfc_acacia %tfc:wood_type/acacia
|
||||
#define tags_everycomp_tfc_ash %tfc:wood_type/ash
|
||||
#define tags_everycomp_tfc_aspen %tfc:wood_type/aspen
|
||||
#define tags_everycomp_tfc_birch %tfc:wood_type/birch
|
||||
#define tags_everycomp_tfc_blackwood %tfc:wood_type/blackwood
|
||||
#define tags_everycomp_tfc_chestnut %tfc:wood_type/chestnut
|
||||
#define tags_everycomp_tfc_douglas_fir %tfc:wood_type/douglas_fir
|
||||
#define tags_everycomp_tfc_hickory %tfc:wood_type/hickory
|
||||
#define tags_everycomp_tfc_kapok %tfc:wood_type/kapok
|
||||
#define tags_everycomp_tfc_mangrove %tfc:wood_type/mangrove
|
||||
#define tags_everycomp_tfc_maple %tfc:wood_type/maple
|
||||
#define tags_everycomp_tfc_oak %tfc:wood_type/oak
|
||||
#define tags_everycomp_tfc_palm %tfc:wood_type/palm
|
||||
#define tags_everycomp_tfc_pine %tfc:wood_type/pine
|
||||
#define tags_everycomp_tfc_rosewood %tfc:wood_type/rosewood
|
||||
#define tags_everycomp_tfc_sequoia %tfc:wood_type/sequoia
|
||||
#define tags_everycomp_tfc_spruce %tfc:wood_type/spruce
|
||||
#define tags_everycomp_tfc_sycamore %tfc:wood_type/sycamore
|
||||
#define tags_everycomp_tfc_white_cedar %tfc:wood_type/white_cedar
|
||||
#define tags_everycomp_tfc_willow %tfc:wood_type/willow
|
||||
#define tags_everycomp_ch_tfc_acacia_planks %everycomp:ch/tfc/acacia_planks
|
||||
#define tags_everycomp_ch_tfc_ash_planks %everycomp:ch/tfc/ash_planks
|
||||
#define tags_everycomp_ch_tfc_aspen_planks %everycomp:ch/tfc/aspen_planks
|
||||
#define tags_everycomp_ch_tfc_birch_planks %everycomp:ch/tfc/birch_planks
|
||||
#define tags_everycomp_ch_tfc_blackwood_planks %everycomp:ch/tfc/blackwood_planks
|
||||
#define tags_everycomp_ch_tfc_chestnut_planks %everycomp:ch/tfc/chestnut_planks
|
||||
#define tags_everycomp_ch_tfc_douglas_fir_planks %everycomp:ch/tfc/douglas_fir_planks
|
||||
#define tags_everycomp_ch_tfc_hickory_planks %everycomp:ch/tfc/hickory_planks
|
||||
#define tags_everycomp_ch_tfc_kapok_planks %everycomp:ch/tfc/kapok_planks
|
||||
#define tags_everycomp_ch_tfc_mangrove_planks %everycomp:ch/tfc/mangrove_planks
|
||||
#define tags_everycomp_ch_tfc_maple_planks %everycomp:ch/tfc/maple_planks
|
||||
#define tags_everycomp_ch_tfc_oak_planks %everycomp:ch/tfc/oak_planks
|
||||
#define tags_everycomp_ch_tfc_palm_planks %everycomp:ch/tfc/palm_planks
|
||||
#define tags_everycomp_ch_tfc_pine_planks %everycomp:ch/tfc/pine_planks
|
||||
#define tags_everycomp_ch_tfc_rosewood_planks %everycomp:ch/tfc/rosewood_planks
|
||||
#define tags_everycomp_ch_tfc_sequoia_planks %everycomp:ch/tfc/sequoia_planks
|
||||
#define tags_everycomp_ch_tfc_spruce_planks %everycomp:ch/tfc/spruce_planks
|
||||
#define tags_everycomp_ch_tfc_sycamore_planks %everycomp:ch/tfc/sycamore_planks
|
||||
#define tags_everycomp_ch_tfc_white_cedar_planks %everycomp:ch/tfc/white_cedar_planks
|
||||
#define tags_everycomp_ch_tfc_willow_planks %everycomp:ch/tfc/willow_planks
|
||||
|
||||
# Immersive Weathering
|
||||
#define tags_immersive_weathering_leaf_piles %immersive_weathering:leaf_piles
|
||||
|
||||
# NeoForge
|
||||
# tags_neoforge_glass %neoforge:glass
|
||||
# tags_neoforge_glass_panes %neoforge:glass_pane
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,30 @@
|
||||
blend.clrwl_gbuffers.colortex6=off
|
||||
blend.clrwl_gbuffers_translucent.colortex6=off
|
||||
|
||||
blend.clrwl_gbuffers_translucent.colortex4=off
|
||||
blend.clrwl_gbuffers_translucent.colortex8=off
|
||||
|
||||
#if ENTITY_SHADOW == -1
|
||||
shadow.enabled = false
|
||||
#endif
|
||||
|
||||
oit = true
|
||||
|
||||
oit.gbuffers.coefficientRanks = 3,3
|
||||
|
||||
oit.gbuffers.colortex0 = 0
|
||||
oit.gbuffers.colortex3 = 1
|
||||
|
||||
oit.gbuffers.colortex6 = frontmost
|
||||
oit.gbuffers.colortex6.format = RGBA8
|
||||
oit.gbuffers.colortex4 = frontmost
|
||||
oit.gbuffers.colortex4.format = RGBA8_SNORM
|
||||
oit.gbuffers.colortex8 = frontmost
|
||||
oit.gbuffers.colortex8.format = RGBA16F
|
||||
oit.gbuffers.colortex9 = frontmost
|
||||
oit.gbuffers.colortex9.format = RGBA16F
|
||||
|
||||
oit.shadow.shadowcolor0 = frontmost
|
||||
oit.shadow.shadowcolor0.format = RGBA8
|
||||
oit.shadow.shadowcolor1 = frontmost
|
||||
oit.shadow.shadowcolor1.format = RGBA8
|
||||
@@ -0,0 +1,82 @@
|
||||
### Last updated: February 05, 2026, 11:02 UTC
|
||||
# Copyright (c) 2026 SpacEagle17 – Licensed under the MIT License: https://opensource.org/licenses/MIT
|
||||
#---------------------------------------------------------------------------------------------------------------------
|
||||
##### IMPORTANT! WHERE TO CONTRIBUTE: #####
|
||||
# If you want to contribute to the Euphoria Patches modded support library, please only edit the files from GitHub. https://euphoriapatches.com/properties
|
||||
#
|
||||
#---------------------------------------------------------------------------------------------------------------------
|
||||
#### Template for Dimensions: ####
|
||||
#
|
||||
# dimension.world-1 = vanillaId1 vanillaId2 \
|
||||
# \
|
||||
# modName1:modId1 modName1:modId2 modName1:modId3 ... \
|
||||
# \
|
||||
# modName2:modId1 modName2:modId2 modName2:modId3 ... \
|
||||
#
|
||||
# dimension.world1 = ...
|
||||
# ...
|
||||
#
|
||||
# IDs should be grouped by mods, for every new mod it should be added in a new line using "\"
|
||||
#---------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
# ██╗███████╗ ██╗ ██████╗ ██╗ ██╗███████╗██████╗ ███████╗
|
||||
# ███║╚════██║███║██╔═████╗ ██╗ ██║ ██║██╔════╝██╔══██╗██╔════╝
|
||||
# ╚██║ ██╔╝╚██║██║██╔██║██████╗ ███████║█████╗ ██████╔╝█████╗
|
||||
# ██║ ██╔╝ ██║████╔╝██║╚═██╔═╝ ██╔══██║██╔══╝ ██╔══██╗██╔══╝
|
||||
# ██║██╗██║██╗██║╚██████╔╝ ╚═╝ ██║ ██║███████╗██║ ██║███████╗
|
||||
# ╚═╝╚═╝╚═╝╚═╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝
|
||||
# 1.8.0 And Above Mapping:
|
||||
|
||||
#if MC_VERSION > 10710
|
||||
|
||||
# Overworld - All unknown dimensions are considered as Overworld because of the * wildcard
|
||||
dimension.world0=*
|
||||
|
||||
# Nether
|
||||
dimension.world-1=minecraft:the_nether minecraft:nether minecraft:world-1_the_nether \
|
||||
\
|
||||
ad_astra:venus ad_astra:mercury \
|
||||
\
|
||||
prominent:vaaz_volcano prominent:cinderstone_depths prominent:vaaz_past prominent:vaaz_present prominent:vaaz_assault
|
||||
|
||||
# End
|
||||
dimension.world1=minecraft:the_end minecraft:end minecraft:world1_the_end minecraft:world_the_end \
|
||||
\
|
||||
ad_astra:venus_orbit ad_astra:mercury_orbit ad_astra:mars_orbit ad_astra:moon_orbit ad_astra:glacio_orbit ad_astra:earth_orbit ad_astra:moon \
|
||||
\
|
||||
minecraft:thermalpoint \
|
||||
\
|
||||
minecraft:tw_end minecraft:fw_end minecraft:za_the_end \
|
||||
\
|
||||
the_deeper_void:void_dimension \
|
||||
\
|
||||
bestest:hyperspace_lumiose bestest:hyperspace_sewers
|
||||
|
||||
|
||||
|
||||
|
||||
# ██╗███████╗ ██╗ ██████╗ ██╗ ██╗███████╗██████╗ ███████╗
|
||||
# ███║╚════██║███║██╔═████╗ ██║ ██║██╔════╝██╔══██╗██╔════╝
|
||||
# ╚██║ ██╔╝╚██║██║██╔██║ ███████║█████╗ ██████╔╝█████╗
|
||||
# ██║ ██╔╝ ██║████╔╝██║ ██╔══██║██╔══╝ ██╔══██╗██╔══╝
|
||||
# ██║██╗██║██╗██║╚██████╔╝ ██║ ██║███████╗██║ ██║███████╗
|
||||
# ╚═╝╚═╝╚═╝╚═╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝
|
||||
# 1.7.10 And Below Mapping (Cap Sensitive!):
|
||||
|
||||
#else
|
||||
|
||||
# Overworld - All unknown dimensions are considered as Overworld because of the * wildcard
|
||||
dimension.world0=*
|
||||
|
||||
# Nether
|
||||
dimension.world-1=Nether minecraft:Nether minecraft:the_nether minecraft:nether minecraft:world-1_the_nether
|
||||
|
||||
# End
|
||||
dimension.world1="The End" minecraft:the_end minecraft:end minecraft:world1_the_end minecraft:world_the_end \
|
||||
\
|
||||
Utumno
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,413 @@
|
||||
### Last updated: January 31, 2026, 19:36 UTC
|
||||
# Copyright (c) 2026 SpacEagle17 – Licensed under the MIT License: https://opensource.org/licenses/MIT
|
||||
#---------------------------------------------------------------------------------------------------------------------
|
||||
# Version 2 - Every time a vanilla block changes this number will go up, modded blocks don't affect the version number
|
||||
# Last Change: 1.21.9 stuff
|
||||
#---------------------------------------------------------------------------------------------------------------------
|
||||
#
|
||||
##### IMPORTANT! WHERE TO CONTRIBUTE: #####
|
||||
# If you want to contribute to the Euphoria Patches modded support library, please only edit the files from GitHub. https://euphoriapatches.com/properties
|
||||
#
|
||||
#---------------------------------------------------------------------------------------------------------------------
|
||||
#### Template for Modded Entities: ####
|
||||
#
|
||||
# # Description of the Entity ID
|
||||
# entity.XXXXX = vanillaId1 vanillaId2 vanillaId3 ... \
|
||||
# \
|
||||
# modName1:modId1 modName1:modId2 modName1:modId3 ... \
|
||||
# \
|
||||
# modName2:modId1 modName2:modId2 modName2:modId3 ... \
|
||||
# ...
|
||||
# lastModInThisIDName:modId1 lastModInThisIDName:modId2 lastModInThisIDName:modId3
|
||||
|
||||
# # Description of the Next Entity ID
|
||||
# entity.YYYYY = ...
|
||||
# ...
|
||||
|
||||
# - The last line of a entity.XXXX does not have a "\"
|
||||
|
||||
# --- IDs should be grouped by mods, for every new mod it should be added in a new line using "\" ---
|
||||
#---------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
# ██╗ ██╗ ██╗ ██╗ ██╗███████╗██████╗ ███████╗
|
||||
# ███║ ███║███║ ██╗ ██║ ██║██╔════╝██╔══██╗██╔════╝
|
||||
# ╚██║ ╚██║╚██║██████╗ ███████║█████╗ ██████╔╝█████╗
|
||||
# ██║ ██║ ██║╚═██╔═╝ ██╔══██║██╔══╝ ██╔══██╗██╔══╝
|
||||
# ██║██╗██║ ██║ ╚═╝ ██║ ██║███████╗██║ ██║███████╗
|
||||
# ╚═╝╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝
|
||||
# 1.11 And Above Mapping:
|
||||
|
||||
#if MC_VERSION >= 11100
|
||||
|
||||
# End Crystal
|
||||
entity.50000 = end_crystal
|
||||
|
||||
# Lightning Bolt
|
||||
entity.50004 = lightning_bolt \
|
||||
\
|
||||
ars_nouveau:an_lightning
|
||||
|
||||
# Item Frames
|
||||
entity.50008 = item_frame glow_item_frame \
|
||||
\
|
||||
tconstruct:fancy_item_frame
|
||||
|
||||
# Iron Golem
|
||||
entity.50012 = iron_golem \
|
||||
\
|
||||
ad_astra:lander ad_astra:tier_1_rocket ad_astra:tier_2_rocket ad_astra:tier_3_rocket ad_astra:tier_4_rocket \
|
||||
\
|
||||
ars_nouveau:amethyst_golem ars_nouveau:familiar_amethyst_golem \
|
||||
\
|
||||
born_in_chaos_v1:door_knight born_in_chaos_v1:door_knight_not_despawn born_in_chaos_v1:fallen_chaos_knight \
|
||||
\
|
||||
createbigcannons:ap_autocannon createbigcannons:ap_shell createbigcannons:ap_shot createbigcannons:cannon_carriage createbigcannons:flak_autocannon createbigcannons:fluid_shell createbigcannons:he_shell createbigcannons:shot createbigcannons:shrapnel_shell createbigcannons:smoke_shell \
|
||||
\
|
||||
grapplemod:grapplehook \
|
||||
\
|
||||
iceandfire:chain_tie iceandfire:hippocampus iceandfire:ice_dragon_charge iceandfire:sea_serpent \
|
||||
\
|
||||
illagerinvasion:hatchet \
|
||||
\
|
||||
man_of_many_planes:scarlet_biplane \
|
||||
\
|
||||
securitycraft:bouncingbetty securitycraft:bullet securitycraft:security_sea_boat securitycraft:securitycamera securitycraft:sentry \
|
||||
\
|
||||
yungscavebiomes:ice_cube
|
||||
|
||||
# Armor Stand
|
||||
entity.50015 = armor_stand
|
||||
|
||||
# Other Players
|
||||
entity.50016 = player mannequin
|
||||
|
||||
# Current Player
|
||||
entity.50017 = current_player
|
||||
|
||||
# Blaze
|
||||
entity.50020 = blaze \
|
||||
\
|
||||
adventurez:blaze_guardian adventurez:blaze_guardian_shield \
|
||||
\
|
||||
aquamirae:golden_moth \
|
||||
\
|
||||
betternether:hydrogen_jellyfish \
|
||||
\
|
||||
burnt:fire_devil
|
||||
|
||||
# Creeper
|
||||
entity.50024 = creeper \
|
||||
\
|
||||
ad_astra:sulfur_creeper \
|
||||
\
|
||||
enderzoology:concussion_creeper
|
||||
|
||||
# Drowned
|
||||
entity.50028 = drowned
|
||||
|
||||
# Gaurdian
|
||||
entity.50032 = guardian
|
||||
|
||||
# Elder Guardian
|
||||
entity.50036 = elder_guardian
|
||||
|
||||
# Endermite
|
||||
entity.50040 = endermite
|
||||
|
||||
# Ghast
|
||||
entity.50044 = ghast \
|
||||
\
|
||||
enderzoology:dire_wolf enderzoology:wither_witch
|
||||
|
||||
# Glow Squid
|
||||
entity.50048 = glow_squid \
|
||||
\
|
||||
betterend:cubozoa \
|
||||
\
|
||||
betternether:firefly \
|
||||
\
|
||||
bosses_of_mass_destruction:comet bosses_of_mass_destruction:lich
|
||||
|
||||
# Magma Cube
|
||||
entity.50052 = magma_cube \
|
||||
\
|
||||
iceandfire:fire_dragon_charge \
|
||||
\
|
||||
illagerinvasion:flying_magma \
|
||||
\
|
||||
wilderwild:scorched
|
||||
|
||||
# Stray
|
||||
entity.50056 = stray
|
||||
|
||||
# Vex
|
||||
entity.50060 = vex \
|
||||
\
|
||||
ad_astra:ice_spit \
|
||||
\
|
||||
adventurez:amethyst_shard adventurez:void_shade adventurez:void_shard \
|
||||
\
|
||||
ars_nouveau:ally_vex \
|
||||
\
|
||||
born_in_chaos_v1:phantom_creeper born_in_chaos_v1:phantom_creeper_copy born_in_chaos_v1:restless_spirit born_in_chaos_v1:scarlet_persecutor \
|
||||
\
|
||||
bosses_of_mass_destruction:blue_fireball bosses_of_mass_destruction:gauntlet \
|
||||
\
|
||||
iceandfire:lightning_dragon_charge \
|
||||
\
|
||||
illagerinvasion:skull_bolt \
|
||||
\
|
||||
tconstruct:crystalshot tconstruct:glow_ball
|
||||
|
||||
# Witch
|
||||
entity.50064 = witch
|
||||
|
||||
# Withers
|
||||
entity.50068 = wither wither_skull \
|
||||
\
|
||||
betternether:naga \
|
||||
\
|
||||
born_in_chaos_v1:lifestealer born_in_chaos_v1:lifestealer_true_form
|
||||
|
||||
# Experience Orbs
|
||||
entity.50072 = experience_orb \
|
||||
\
|
||||
adventurez:void_bullet \
|
||||
\
|
||||
create_enchantment_industry:hyper_experience_orb \
|
||||
\
|
||||
dimdoors:monolith \
|
||||
\
|
||||
drg_flares:drg_flare \
|
||||
\
|
||||
levelz:level_experience_orb
|
||||
|
||||
# Boats
|
||||
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 \
|
||||
\
|
||||
ecologics:boat ecologics:chest_boat \
|
||||
\
|
||||
fixedminecraft:azalea_boat fixedminecraft:azalea_chest_boat \
|
||||
\
|
||||
nekomasfixed:big_acacia_boat nekomasfixed:big_bamboo_boat nekomasfixed:big_birch_boat nekomasfixed:big_cherry_boat nekomasfixed:big_dark_oak_boat nekomasfixed:big_jungle_boat nekomasfixed:big_mangrove_boat nekomasfixed:big_oak_boat nekomasfixed:big_pale_oak_boat nekomasfixed:big_spruce_boat nekomasfixed:fake_boat nekomasfixed:huge_acacia_boat nekomasfixed:huge_bamboo_boat nekomasfixed:huge_birch_boat nekomasfixed:huge_cherry_boat nekomasfixed:huge_dark_oak_boat nekomasfixed:huge_jungle_boat nekomasfixed:huge_mangrove_boat nekomasfixed:huge_oak_boat nekomasfixed:huge_pale_oak_boat nekomasfixed:huge_spruce_boat \
|
||||
\
|
||||
terraform:boat terraform:chest_boat \
|
||||
\
|
||||
tfc:wood/boat/acacia tfc:wood/boat/ash tfc:wood/boat/aspen tfc:wood/boat/birch tfc:wood/boat/blackwood tfc:wood/boat/chestnut tfc:wood/boat/douglas_fir tfc:wood/boat/hickory tfc:wood/boat/kapok tfc:wood/boat/mangrove tfc:wood/boat/maple tfc:wood/boat/oak tfc:wood/boat/palm tfc:wood/boat/pine tfc:wood/boat/rosewood tfc:wood/boat/sequoia tfc:wood/boat/spruce tfc:wood/boat/sycamore tfc:wood/boat/white_cedar tfc:wood/boat/willow tfc:wood/chest_boat/acacia tfc:wood/chest_boat/ash tfc:wood/chest_boat/aspen tfc:wood/chest_boat/birch tfc:wood/chest_boat/blackwood tfc:wood/chest_boat/chestnut tfc:wood/chest_boat/douglas_fir tfc:wood/chest_boat/hickory tfc:wood/chest_boat/kapok tfc:wood/chest_boat/mangrove tfc:wood/chest_boat/maple tfc:wood/chest_boat/oak tfc:wood/chest_boat/palm tfc:wood/chest_boat/pine tfc:wood/chest_boat/rosewood tfc:wood/chest_boat/sequoia tfc:wood/chest_boat/spruce tfc:wood/chest_boat/sycamore tfc:wood/chest_boat/white_cedar tfc:wood/chest_boat/willow \
|
||||
\
|
||||
wilderwild:baobab_boat wilderwild:baobab_chest_boat wilderwild:boat wilderwild:chest_boat wilderwild:cypress_boat wilderwild:cypress_chest_boat wilderwild:maple_boat wilderwild:maple_chest_boat wilderwild:palm_boat wilderwild:palm_chest_boat
|
||||
|
||||
# Allay
|
||||
entity.50080 = allay \
|
||||
\
|
||||
adventurez:amethyst_golem adventurez:blackstone_golem adventurez:nightmare adventurez:soul_reaper adventurez:the_eye adventurez:tiny_eye \
|
||||
\
|
||||
betterend:dragonfly betterend:end_fish \
|
||||
\
|
||||
born_in_chaos_v1:felsteed born_in_chaos_v1:intoxicatind_bomb_projectile born_in_chaos_v1:lord_pumpkinhead born_in_chaos_v1:lord_pumpkinhead_head born_in_chaos_v1:lord_pumpkinhead_withouta_horse born_in_chaos_v1:lord_the_headless born_in_chaos_v1:lords_felsteed born_in_chaos_v1:missionary_charge born_in_chaos_v1:mr_pumpkin born_in_chaos_v1:mr_pumpkin_controlled born_in_chaos_v1:nightmare_stalker born_in_chaos_v1:phantom_bomb_entity born_in_chaos_v1:phantom_bomb_projectile born_in_chaos_v1:pumpkin_bomb born_in_chaos_v1:pumpkin_pistol_2_projectile born_in_chaos_v1:pumpkin_pistol_projectile born_in_chaos_v1:pumpkin_staff_2_projectile born_in_chaos_v1:pumpkin_staff_projectile born_in_chaos_v1:pumpkinhead born_in_chaos_v1:riding_felsteed born_in_chaos_v1:riding_lords_felsteed born_in_chaos_v1:seared_spirit born_in_chaos_v1:seared_spirit_not_despawn born_in_chaos_v1:senor_pumpkin born_in_chaos_v1:sir_pumpkinhead born_in_chaos_v1:sir_pumpkinhead_without_horse born_in_chaos_v1:sir_the_headless born_in_chaos_v1:staffof_blindness_projectile born_in_chaos_v1:stimulating_bombprojectile \
|
||||
\
|
||||
create_enchantment_industry:hyper_experience_bottle \
|
||||
\
|
||||
iceandfire:pixie \
|
||||
\
|
||||
immersive_aircraft:bullet \
|
||||
\
|
||||
ore_creeper:coal_creeper ore_creeper:copper_creeper ore_creeper:diamond_creeper ore_creeper:emerald_creeper ore_creeper:gold_creeper ore_creeper:iron_creeper ore_creeper:lapis_lazuli_creeper ore_creeper:nether_gold_creeper ore_creeper:nether_quartz_creeper ore_creeper:redstone_creeper \
|
||||
\
|
||||
supplementaries:bomb \
|
||||
\
|
||||
tfc:glow_arrow
|
||||
|
||||
# Slimes and Chickens
|
||||
entity.50084 = slime chicken \
|
||||
\
|
||||
betterend:end_slime \
|
||||
\
|
||||
tconstruct:earth_slime tconstruct:ender_slime tconstruct:sky_slime tconstruct:terracube
|
||||
|
||||
# Entity Fire
|
||||
entity.50088 = entity_flame
|
||||
|
||||
# Fire Balls
|
||||
entity.50089 = fireball dragon_fireball small_fireball \
|
||||
\
|
||||
securitycraft:imsbomb
|
||||
|
||||
# Trident
|
||||
entity.50092 = trident \
|
||||
\
|
||||
iceandfire:tide_trident
|
||||
|
||||
# Minecarts
|
||||
entity.50096 = minecart chest_minecart command_block_minecart furnace_minecart hopper_minecart spawner_minecart tnt_minecart \
|
||||
\
|
||||
fixedminecraft:dispenser_minecart \
|
||||
\
|
||||
lootr:lootr_minecart \
|
||||
\
|
||||
railways:benchcart railways:conductor railways:jukeboxcart \
|
||||
\
|
||||
supplementaries:dispenser_minecart \
|
||||
\
|
||||
tfc:chest_minecart tfc:holding_minecart
|
||||
|
||||
# Bogged
|
||||
entity.50100 = bogged
|
||||
|
||||
# Piglins and Hoglins
|
||||
entity.50104 = piglin piglin_brute zombified_piglin hoglin zoglin
|
||||
|
||||
entity.50108 = creaking \
|
||||
\
|
||||
enderzoology:wither_cat \
|
||||
\
|
||||
vanillabackport:creaking
|
||||
|
||||
# Name Tag - Iris Exclusive
|
||||
entity.50112 = name_tag
|
||||
|
||||
# Copper Golems
|
||||
entity.50116 = copper_golem
|
||||
|
||||
# Parched
|
||||
entity.50120 = parched
|
||||
|
||||
# Zombie Nautilus
|
||||
entity.50124 = zombie_nautilus
|
||||
|
||||
# End Crystal Beams
|
||||
entity.50200 = end_crystal_beam
|
||||
|
||||
# Ender Dragon
|
||||
entity.50204 = ender_dragon \
|
||||
\
|
||||
adventurez:dragon adventurez:ender_whale adventurez:enderwarthog adventurez:void_shadow
|
||||
|
||||
|
||||
|
||||
|
||||
# ██╗ ██╗ ██████╗ ██╗ ██╗███████╗██████╗ ███████╗
|
||||
# ███║ ███║██╔═████╗ ██║ ██║██╔════╝██╔══██╗██╔════╝
|
||||
# ╚██║ ╚██║██║██╔██║█████╗ ███████║█████╗ ██████╔╝█████╗
|
||||
# ██║ ██║████╔╝██║╚════╝ ██╔══██║██╔══╝ ██╔══██╗██╔══╝
|
||||
# ██║██╗██║╚██████╔╝ ██║ ██║███████╗██║ ██║███████╗
|
||||
# ╚═╝╚═╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝
|
||||
#1.10 And Below Mapping (Cap Sensitive!):
|
||||
|
||||
#else
|
||||
|
||||
# End Crystal
|
||||
entity.50000 = EnderCrystal
|
||||
|
||||
# Lightning Bolt
|
||||
entity.50004 = lightning_bolt
|
||||
|
||||
# Item Frames
|
||||
entity.50008 = ItemFrame
|
||||
|
||||
# Iron Golem
|
||||
entity.50012 = VillagerGolem
|
||||
|
||||
# Other Players
|
||||
entity.50016 =
|
||||
|
||||
# Current Player
|
||||
entity.50017 = current_player
|
||||
|
||||
# Blaze
|
||||
entity.50020 = Blaze \
|
||||
\
|
||||
BiomesOPlenty.Pixie
|
||||
|
||||
# Creeper
|
||||
entity.50024 = Creeper
|
||||
|
||||
# Drowned
|
||||
entity.50028 =
|
||||
|
||||
# Gaurdian
|
||||
entity.50032 =
|
||||
|
||||
# Elder Guardian
|
||||
entity.50036 =
|
||||
|
||||
# Endermite
|
||||
entity.50040 =
|
||||
|
||||
# Ghast
|
||||
entity.50044 = Ghast
|
||||
|
||||
# Glow Squid
|
||||
entity.50048 =
|
||||
|
||||
# Magma Cube
|
||||
entity.50052 = LavaSlime
|
||||
|
||||
# Stray
|
||||
entity.50056 =
|
||||
|
||||
# Vex
|
||||
entity.50060 =
|
||||
|
||||
# Witch
|
||||
entity.50064 = Witch
|
||||
|
||||
# Withers
|
||||
entity.50068 = WitherBoss WitherSkull
|
||||
|
||||
# Experience Orbs
|
||||
entity.50072 = XPOrb
|
||||
|
||||
# Boats
|
||||
entity.50076 = Boat
|
||||
|
||||
# Allay
|
||||
entity.50080 =
|
||||
|
||||
# Slimes and Chickens
|
||||
entity.50084 = Slime Chicken \
|
||||
\
|
||||
BiomesOPlenty.Rosester BiomesOPlenty.Glob
|
||||
|
||||
# Entity Fire
|
||||
entity.50088 = entity_flame
|
||||
|
||||
# Fire Balls
|
||||
entity.50089 = Fireball
|
||||
|
||||
# Trident
|
||||
entity.50092 =
|
||||
|
||||
# Minecarts
|
||||
entity.50096 = MinecartChest MinecartCommandBlock MinecartFurnace MinecartHopper MinecartRideable MinecartSpawner MinecartTNT
|
||||
|
||||
# Bogged
|
||||
entity.50100 =
|
||||
|
||||
# Piglins and Hoglins
|
||||
entity.50104 =
|
||||
|
||||
# Creaking
|
||||
entity.50108 =
|
||||
|
||||
# Name Tag - Iris Exclusive
|
||||
entity.50112 = name_tag
|
||||
|
||||
# Copper Golems
|
||||
entity.50116 =
|
||||
|
||||
# Parched
|
||||
entity.50120 =
|
||||
|
||||
# Zombie Nautilus
|
||||
entity.50124 =
|
||||
|
||||
# End Crystal Beams
|
||||
entity.50200 = end_crystal_beam
|
||||
|
||||
# Ender Dragon
|
||||
entity.50204 = EnderDragon
|
||||
#endif
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,200 @@
|
||||
#if FXAA_TAA_INTERACTION > 0
|
||||
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)
|
||||
);
|
||||
#endif
|
||||
|
||||
//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;
|
||||
}
|
||||
|
||||
vec3 newColor = texture2D(colortex3, finalUv).rgb;
|
||||
|
||||
#define FXAA_STRENGTH_SKIP 1.0 - FXAA_STRENGTH * 0.01
|
||||
|
||||
#if FXAA_TAA_INTERACTION > 0
|
||||
// Less FXAA when moving
|
||||
float skipFXAA = min(
|
||||
20.0 * length(cameraPosition - previousCameraPosition),
|
||||
FXAA_TAA_INTERACTION * 0.1
|
||||
);
|
||||
|
||||
float z0 = texelFetch(depthtex0, texelCoord, 0).r;
|
||||
float z1 = texelFetch(depthtex1, texelCoord, 0).r;
|
||||
bool edge = false;
|
||||
for (int i = 0; i < 8; i++) {
|
||||
ivec2 texelCoordM = texelCoord + neighbourhoodOffsets[i];
|
||||
|
||||
float z0Check = texelFetch(depthtex0, texelCoordM, 0).r;
|
||||
float z1Check = texelFetch(depthtex1, texelCoordM, 0).r;
|
||||
if (max(abs(GetLinearDepth(z0Check) - GetLinearDepth(z0)), abs(GetLinearDepth(z1Check) - GetLinearDepth(z1))) > 0.09) {
|
||||
edge = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (edge) skipFXAA = 0.0;
|
||||
|
||||
if (dot(texelFetch(colortex2, texelCoord, 0).rgb, vec3(1.0)) < 0.01) skipFXAA = 0.0;
|
||||
|
||||
skipFXAA = mix(skipFXAA, 1.0, FXAA_STRENGTH_SKIP);
|
||||
#else
|
||||
float skipFXAA = FXAA_STRENGTH_SKIP;
|
||||
#endif
|
||||
|
||||
color = mix(newColor, color, skipFXAA);
|
||||
|
||||
// debug
|
||||
//if (skipFXAA > texCoord.y && texCoord.x < 0.02) color.rgb = vec3(1,0,1);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
// 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) {
|
||||
#if TAA_JITTER > 0
|
||||
vec2 offset = jitterOffsets[int(framemod8)] * (w / vec2(viewWidth, viewHeight));
|
||||
#if TAA_JITTER == 1
|
||||
offset *= 0.125;
|
||||
#elif TAA_JITTER == 2
|
||||
offset *= 0.33;
|
||||
#endif
|
||||
return coord + offset;
|
||||
#else
|
||||
return coord;
|
||||
#endif
|
||||
}
|
||||
@@ -0,0 +1,208 @@
|
||||
#if TAA_SMOOTHING == 2
|
||||
float blendMinimum = 0.3;
|
||||
float blendVariable = 0.3;
|
||||
float blendConstant = 0.6;
|
||||
|
||||
float regularEdge = 10.0;
|
||||
float extraEdgeMult = 2.0;
|
||||
|
||||
float farEdgeDist = 128.0;
|
||||
#elif TAA_SMOOTHING == 3
|
||||
float blendMinimum = 0.35;
|
||||
float blendVariable = 0.2;
|
||||
float blendConstant = 0.7;
|
||||
|
||||
float regularEdge = 6.0;
|
||||
float extraEdgeMult = 3.0;
|
||||
|
||||
float farEdgeDist = 112.0;
|
||||
#elif TAA_SMOOTHING == 4
|
||||
float blendMinimum = 0.5;
|
||||
float blendVariable = 0.15;
|
||||
float blendConstant = 0.75;
|
||||
|
||||
float regularEdge = 4.0;
|
||||
float extraEdgeMult = 3.5;
|
||||
|
||||
float farEdgeDist = 96.0;
|
||||
#endif
|
||||
|
||||
#if TAA_MOVEMENT_IMPROVEMENT_FILTER == 1
|
||||
//Catmull-Rom sampling from Filmic SMAA presentation
|
||||
vec3 textureCatmullRom(sampler2D colortex, vec2 texcoord, vec2 view) {
|
||||
vec2 position = texcoord * view;
|
||||
vec2 centerPosition = floor(position - 0.5) + 0.5;
|
||||
vec2 f = position - centerPosition;
|
||||
vec2 f2 = f * f;
|
||||
vec2 f3 = f * f2;
|
||||
|
||||
float c = 0.7;
|
||||
vec2 w0 = -c * f3 + 2.0 * c * f2 - c * f;
|
||||
vec2 w1 = (2.0 - c) * f3 - (3.0 - c) * f2 + 1.0;
|
||||
vec2 w2 = -(2.0 - c) * f3 + (3.0 - 2.0 * c) * f2 + c * f;
|
||||
vec2 w3 = c * f3 - c * f2;
|
||||
|
||||
vec2 w12 = w1 + w2;
|
||||
vec2 tc12 = (centerPosition + w2 / w12) / view;
|
||||
|
||||
vec2 tc0 = (centerPosition - 1.0) / view;
|
||||
vec2 tc3 = (centerPosition + 2.0) / view;
|
||||
vec4 color = vec4(texture2DLod(colortex, vec2(tc12.x, tc0.y ), 0).rgb, 1.0) * (w12.x * w0.y ) +
|
||||
vec4(texture2DLod(colortex, vec2(tc0.x, tc12.y), 0).rgb, 1.0) * (w0.x * w12.y) +
|
||||
vec4(texture2DLod(colortex, vec2(tc12.x, tc12.y), 0).rgb, 1.0) * (w12.x * w12.y) +
|
||||
vec4(texture2DLod(colortex, vec2(tc3.x, tc12.y), 0).rgb, 1.0) * (w3.x * w12.y) +
|
||||
vec4(texture2DLod(colortex, vec2(tc12.x, tc3.y ), 0).rgb, 1.0) * (w12.x * w3.y );
|
||||
return color.rgb / color.a;
|
||||
}
|
||||
#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 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 z0CheckLinear = GetLinearDepth(texelFetch(depthtex0, texelCoordM2, 0).r);
|
||||
float z1CheckLinear = GetLinearDepth(texelFetch(depthtex1, texelCoordM2, 0).r);
|
||||
float z0Linear = GetLinearDepth(z0);
|
||||
float z1Linear = GetLinearDepth(z1);
|
||||
if (max(abs(z0CheckLinear - z0Linear), abs(z1CheckLinear - z1Linear)) > 0.09) {
|
||||
edge = regularEdge;
|
||||
|
||||
float approxClosestDist = min(z0CheckLinear, z0Linear) * far;
|
||||
if (approxClosestDist < farEdgeDist)
|
||||
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;
|
||||
float lViewPos1 = length(viewPos1);
|
||||
|
||||
#ifdef ENTITY_TAA_NOISY_CLOUD_FIX
|
||||
float cloudLinearDepth = texture2D(colortex5, texCoord).a;
|
||||
|
||||
if (pow2(cloudLinearDepth) * renderDistance < min(lViewPos1, renderDistance)) {
|
||||
// Material in question is obstructed by the cloud volume
|
||||
materialMask = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (
|
||||
abs(materialMask - 149.5) < 50.0 // Entity Reflection Handling (see common.glsl for details)
|
||||
|| materialMask == 254 // No SSAO, No TAA, Reduce Reflection
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
/*if (materialMask == 254) { // No SSAO, No TAA, Reduce Reflection
|
||||
#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);
|
||||
|
||||
#if TAA_MOVEMENT_IMPROVEMENT_FILTER == 1
|
||||
vec3 tempColor = textureCatmullRom(colortex2, prvCoord, view);
|
||||
#else
|
||||
vec3 tempColor = texture2D(colortex2, prvCoord).rgb;
|
||||
#endif
|
||||
|
||||
if (tempColor == vec3(0.0) || any(isnan(tempColor))) { // Fixes the first frame and nans
|
||||
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 - min(length(cameraPosition - previousCameraPosition), 0.05) * edge, blendMinimum);
|
||||
|
||||
#ifdef RAIN_ATMOSPHERE
|
||||
blendFactor *= 1.0 - isLightningActive();
|
||||
#endif
|
||||
|
||||
#ifdef MIRROR_DIMENSION
|
||||
blendFactor = 0.0;
|
||||
#endif
|
||||
|
||||
color = mix(color, tempColor, blendFactor);
|
||||
temp = color;
|
||||
|
||||
//if (edge > 0.05) color.rgb = vec3(1.0, 0.0, 1.0);
|
||||
}
|
||||
@@ -0,0 +1,267 @@
|
||||
#if !defined AURORA_BOREALIS_GLSL
|
||||
#define AURORA_BOREALIS_GLSL
|
||||
#ifdef ATM_COLOR_MULTS
|
||||
#include "/lib/colors/colorMultipliers.glsl"
|
||||
#endif
|
||||
#include "/lib/util/colorConversion.glsl"
|
||||
#define AURORA_CONDITION 3 //[-1 0 1 2 3 4]
|
||||
|
||||
#define AURORA_COLOR_PRESET 0 //[-1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14] // 0 is manual and default, 1 is daily, 2 is monthly and 3 is one color preset same with all numbers after
|
||||
|
||||
#define AURORA_UP_R 112 //[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 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 255]
|
||||
#define AURORA_UP_G 36 //[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 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 255]
|
||||
#define AURORA_UP_B 192 //[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 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 255]
|
||||
#define AURORA_UP_I 33 //[0 3 5 8 10 13 15 18 20 23 25 28 30 33 35 38 40 43 45 48 50 53 55 58 60 63 65 68 70 73 75 78 80 83 85 88 90 93 95 98 100]
|
||||
|
||||
#define AURORA_DOWN_R 96 //[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 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 255]
|
||||
#define AURORA_DOWN_G 255 //[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 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 255]
|
||||
#define AURORA_DOWN_B 192 //[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 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 255]
|
||||
#define AURORA_DOWN_I 33 //[0 3 5 8 10 13 15 18 20 23 25 28 30 33 35 38 40 43 45 48 50 53 55 58 60 63 65 68 70 73 75 78 80 83 85 88 90 93 95 98 100]
|
||||
|
||||
#define AURORA_SIZE 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.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]
|
||||
#define AURORA_DRAW_DISTANCE 0.65 //[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 RANDOM_AURORA 0 //[0 1 2 3 4 5 6 7 8 9]
|
||||
|
||||
//#define RGB_AURORA
|
||||
|
||||
#define AURORA_CLOUD_INFLUENCE_INTENSITY 1.00 //[0.00 0.25 0.50 0.75 1.00 1.25 1.50 1.75 2.00 2.50 3.00]
|
||||
#define AURORA_TERRAIN_INFLUENCE_INTENSITY 1.00 //[0.00 0.25 0.50 0.75 1.00 1.25 1.50]
|
||||
|
||||
#define AURORA_NOISE_SCALE 1.00 //[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.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.05 4.10 4.15 4.20 4.25 4.30 4.35 4.40 4.45 4.50 4.55 4.60 4.65 4.70 4.75 4.80 4.85 4.90 4.95 5.00]
|
||||
#define AURORA_PATTERN_WARP 0 //[0 1 2 3 4 5 6 7 8 9 10]
|
||||
#define AURORA_SATURATION 10 //[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20]
|
||||
#define AURORA_COLOR_MIX_POWER 2.0 //[0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0]
|
||||
|
||||
float GetAuroraVisibility(in float VdotU, float VdotUAmount) {
|
||||
float visibility = sqrt1(clamp01(mix(1.0, VdotU, VdotUAmount) * (AURORA_DRAW_DISTANCE * 1.125 + 0.75) - 0.225)) - sunVisibility - maxBlindnessDarkness;
|
||||
|
||||
#ifdef CLEAR_SKY_WHEN_RAINING
|
||||
visibility -= rainFactor * 0.5;
|
||||
#else
|
||||
visibility -= rainFactor;
|
||||
#endif
|
||||
|
||||
visibility *= 1.0 - VdotU * 0.9 * VdotUAmount;
|
||||
|
||||
#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 AURORA_CONDITION == -1 // Always except new moon
|
||||
visibility *= clamp01(max(moonPhase, 1) % 4);
|
||||
#endif
|
||||
|
||||
#if RANDOM_AURORA > 0
|
||||
float randomValue = hash11(float(worldDay));
|
||||
if (randomValue > RANDOM_AURORA * 0.1) {
|
||||
visibility = -1.0; // Disable aurora this day
|
||||
}
|
||||
#endif
|
||||
|
||||
return visibility;
|
||||
}
|
||||
|
||||
vec3 auroraUpA[] = vec3[](
|
||||
vec3(112.0, 36.0, 192.0), // [1] [2] Complementary
|
||||
vec3(112.0, 80.0, 255.0), // [3] Legacy Complementary (v4)
|
||||
vec3(168.0, 36.0, 88.0), // [4] permafrost
|
||||
vec3(255.0, 68.0, 124.0), // [5] Blossoming Lights (Pink)
|
||||
vec3(72.0, 96.0, 192.0), // [6] Nebula
|
||||
vec3(24.0, 255.0, 140.0), // [7] Celestial Dance
|
||||
vec3(255.0, 220.0, 255.0), // [8] Green Flash
|
||||
vec3(64.0, 255.0, 255.0), // [9] Ethereal Lights
|
||||
vec3(0.0, 20.0, 60.0), // [10] Glacial Blessing
|
||||
vec3(132.0, 0.0, 200.0), // [11] Mythical Lights
|
||||
vec3(120.0, 212.0, 56.0), // [12] watermelon
|
||||
vec3(0.0, 255.0, 255.0), // [13] blood bath
|
||||
vec3(255.0, 80.0, 112.0) // [14] Ghost
|
||||
);
|
||||
vec3 auroraDownA[] = vec3[](
|
||||
vec3(96.0, 255.0, 192.0), // [1] [2] Complementary
|
||||
vec3(80.0, 255.0, 180.0), // [3] Legacy Complementary (v4)
|
||||
vec3(60.0, 184.0, 152.0), // [4] permafrost
|
||||
vec3(160.0, 96.0, 255.0), // [5] Blossoming Lights (Pink)
|
||||
vec3(172.0, 44.0, 88.0), // [6] Nebula
|
||||
vec3(108.0, 72.0, 255.0), // [7] Celestial Dance
|
||||
vec3(68.0, 255.0, 72.0), // [8] Green Flash
|
||||
vec3(128.0, 64.0, 128.0), // [9] Ethereal Lights
|
||||
vec3(0.0, 24.0, 36.0), // [10] Glacial Blessing
|
||||
vec3(56.0, 168.0, 255.0), // [11] Mythical Lights
|
||||
vec3(176.0, 88.0, 72.0), // [12] watermelon
|
||||
vec3(180.0, 0.0, 0.0), // [13] blood bath
|
||||
vec3(80.0, 255.0, 180.0) // [14] Ghost
|
||||
);
|
||||
|
||||
vec2 warpAuroraCoords(vec2 coord, float warpAmount) {
|
||||
float angle = texture2D(noisetex, coord * 0.5).r * 6.28318 * warpAmount;
|
||||
float strength = texture2D(noisetex, coord * 0.7 + 0.5).r * warpAmount;
|
||||
vec2 offset = vec2(cos(angle), sin(angle)) * strength;
|
||||
return coord + offset;
|
||||
}
|
||||
|
||||
void GetAuroraColor(in vec2 wpos, out vec3 auroraUp, out vec3 auroraDown) {
|
||||
#ifdef RGB_AURORA
|
||||
auroraUp = getRainbowColor(wpos, 0.06);
|
||||
auroraDown = getRainbowColor(wpos, 0.05);
|
||||
#elif AURORA_COLOR_PRESET == 0
|
||||
auroraUp = vec3(AURORA_UP_R, AURORA_UP_G, AURORA_UP_B);
|
||||
auroraDown = vec3(AURORA_DOWN_R, AURORA_DOWN_G, AURORA_DOWN_B);
|
||||
#elif AURORA_COLOR_PRESET == -1
|
||||
float randomValue = hash11(float(worldDay));
|
||||
randomValue = pow(randomValue, 0.7); // Bias towards higher values (more transitions)
|
||||
float transitionsPerNight = min(randomValue * 2.0, 1.75);
|
||||
float idx, frac = modf(nightFactor * transitionsPerNight, idx);
|
||||
|
||||
int dayOffset = worldDay % auroraUpA.length();
|
||||
|
||||
int colorsCount = auroraUpA.length();
|
||||
int i0 = (int(idx) + dayOffset) % colorsCount;
|
||||
int i1 = (i0 + 1) % colorsCount;
|
||||
|
||||
// Interpolate in OKLab color space for perceptually uniform transitions
|
||||
vec3 oklabUp0 = rgb2oklab(auroraUpA[i0] / 255.0);
|
||||
vec3 oklabUp1 = rgb2oklab(auroraUpA[i1] / 255.0);
|
||||
vec3 oklabDown0 = rgb2oklab(auroraDownA[i0] / 255.0);
|
||||
vec3 oklabDown1 = rgb2oklab(auroraDownA[i1] / 255.0);
|
||||
|
||||
auroraUp = oklab2rgb(mix(oklabUp0, oklabUp1, frac)) * 255.0;
|
||||
auroraDown = oklab2rgb(mix(oklabDown0, oklabDown1, frac)) * 255.0;
|
||||
#else
|
||||
#if AURORA_COLOR_PRESET == 1
|
||||
int p = worldDay % auroraUpA.length();
|
||||
#elif AURORA_COLOR_PRESET == 2
|
||||
int p = worldDay % (auroraUpA.length() * 8) / 8;
|
||||
#else
|
||||
const int p = AURORA_COLOR_PRESET - 2;
|
||||
#endif
|
||||
|
||||
auroraUp = auroraUpA[p];
|
||||
auroraDown = auroraDownA[p];
|
||||
#endif
|
||||
auroraUp = max(auroraUp, vec3(0.001));
|
||||
auroraDown = max(auroraDown, vec3(0.001));
|
||||
|
||||
auroraUp *= (AURORA_UP_I * 0.093 + 3.1) / GetLuminance(auroraUp);
|
||||
auroraDown *= (AURORA_DOWN_I * 0.245 + 8.15) / GetLuminance(auroraDown);
|
||||
|
||||
#if AURORA_SATURATION != 10
|
||||
auroraUp = rgb2hsv(auroraUp);
|
||||
auroraUp.g *= AURORA_SATURATION * 0.1;
|
||||
auroraUp = hsv2rgb(auroraUp);
|
||||
|
||||
auroraDown = rgb2hsv(auroraDown);
|
||||
auroraDown.g *= AURORA_SATURATION * 0.1;
|
||||
auroraDown = hsv2rgb(auroraDown);
|
||||
#endif
|
||||
}
|
||||
|
||||
vec3 getAuroraAmbientColor(vec3 color, vec3 viewPos, float multiplier, float influence, float VdotUAmount) {
|
||||
float visibility = GetAuroraVisibility(0.5, VdotUAmount);
|
||||
if (visibility > 0) {
|
||||
vec3 wpos = (gbufferModelViewInverse * vec4(viewPos, 1.0)).xyz;
|
||||
wpos.xz /= (abs(wpos.y) + length(wpos.xz));
|
||||
|
||||
vec3 auroraUp, auroraDown;
|
||||
GetAuroraColor(wpos.xz, auroraUp, auroraDown);
|
||||
|
||||
vec3 auroraColor = mix(auroraUp, auroraDown, 0.8);
|
||||
#ifdef COMPOSITE1
|
||||
visibility *= influence;
|
||||
return mix(color, auroraColor, visibility);
|
||||
#endif
|
||||
auroraColor *= multiplier;
|
||||
visibility *= influence;
|
||||
#ifdef DEFERRED1
|
||||
return mix(color, saturateColors(auroraColor, 0.8) * visibility * 0.45, visibility);
|
||||
#endif
|
||||
float luminanceColor = GetLuminance(color);
|
||||
vec3 newColor = mix(color, mix(color, vec3(luminanceColor), 0.88), visibility);
|
||||
newColor *= mix(vec3(1.0), auroraColor * luminanceColor * 10.0, visibility);
|
||||
return clamp01(newColor);
|
||||
// return mix(color, color * auroraColor, visibility); // old, keep it for now
|
||||
}
|
||||
return color;
|
||||
}
|
||||
|
||||
vec3 GetAuroraBorealis(vec3 viewPos, float VdotU, float dither) {
|
||||
float visibility = GetAuroraVisibility(VdotU, 1.0);
|
||||
|
||||
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;
|
||||
|
||||
vec3 auroraUp, auroraDown;
|
||||
GetAuroraColor(wpos.xz, auroraUp, auroraDown);
|
||||
|
||||
for (int i = 0; i < sampleCount; i++) {
|
||||
float current = pow2((i + ditherM) / sampleCountP);
|
||||
|
||||
vec2 planePos = wpos.xz * (AURORA_SIZE * 0.8 + current) * 11.0 * AURORA_NOISE_SCALE + cameraPositionM;
|
||||
|
||||
#if AURORA_STYLE == 1
|
||||
planePos = floor(planePos) * 0.0007;
|
||||
|
||||
#if AURORA_PATTERN_WARP > 0
|
||||
planePos = warpAuroraCoords(planePos, AURORA_PATTERN_WARP * 0.0057);
|
||||
#endif
|
||||
|
||||
float noise = texture2DLod(noisetex, planePos, 0.0).b;
|
||||
noise = pow2(pow2(pow2(pow2(1.0 - 2.0 * abs(noise - 0.5)))));
|
||||
|
||||
noise *= pow1_5(texture2DLod(noisetex, planePos * 100.0 + auroraAnimate, 0.0).b);
|
||||
#else
|
||||
planePos *= 0.0007;
|
||||
|
||||
#if AURORA_PATTERN_WARP > 0
|
||||
planePos = warpAuroraCoords(planePos, AURORA_PATTERN_WARP * 0.0082);
|
||||
#endif
|
||||
|
||||
float noise = texture2DLod(noisetex, planePos, 0.0).r;
|
||||
noise = pow2(pow2(pow2(pow2(1.0 - 2.0 * abs(noise - 0.5)))));
|
||||
|
||||
noise *= texture2DLod(noisetex, planePos * 3.0 + auroraAnimate, 0.0).b;
|
||||
noise *= texture2DLod(noisetex, planePos * 5.0 - auroraAnimate, 0.0).b;
|
||||
#endif
|
||||
|
||||
float currentM = 1.0 - current;
|
||||
|
||||
aurora += noise * currentM * mix(auroraUp, auroraDown, pow(pow2(currentM), AURORA_COLOR_MIX_POWER));
|
||||
}
|
||||
|
||||
#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);
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,68 @@
|
||||
vec3 GetBedrockNoise(vec3 viewPos, float VdotU, float dither) {
|
||||
float eyeAltitude1 = eyeAltitude * 0.005;
|
||||
float visibility = clamp01(-VdotU * 1.875 - 0.225) * (1.0 - maxBlindnessDarkness);
|
||||
visibility *= 1.0 + VdotU * 0.75;
|
||||
|
||||
float distanceAboveBedrock = bedrockLevel - eyeAltitude;
|
||||
|
||||
float fadeStart = 180.0;
|
||||
float fadeWidth = 50.0;
|
||||
|
||||
float noiseHeight = 2.0 / (1.0 + exp(-(fadeStart - distanceAboveBedrock) / fadeWidth));
|
||||
|
||||
visibility *= -eyeAltitude1 * 3.0 + (bedrockLevel / 66.6) + 2.0;
|
||||
|
||||
if (visibility >= 0.0) {
|
||||
vec3 wpos = (gbufferModelViewInverse * vec4(viewPos, 1.0)).xyz;
|
||||
wpos /= (abs(wpos.y) + length(wpos.xz) * 0.5);
|
||||
|
||||
vec2 cameraPositionM = cameraPosition.xz * 0.0075;
|
||||
cameraPositionM.x += frameTimeCounter * 0.004;
|
||||
float VdotUM = 1.0 - VdotU * VdotU;
|
||||
|
||||
// Star calculation
|
||||
vec2 starCoord = noiseHeight * wpos.xz * 0.2 + cameraPositionM * 0.1;
|
||||
starCoord = floor(starCoord * 1024.0) / 1024.0;
|
||||
|
||||
float star = GetStarNoise(starCoord.xy) *
|
||||
GetStarNoise(starCoord.xy+0.1) *
|
||||
GetStarNoise(starCoord.xy+0.23);
|
||||
star = max0((star - 0.4) * 6.0);
|
||||
star *= star;
|
||||
|
||||
vec3 stars = star * vec3(0.1765, 0.1569, 0.1804) * (VdotUM + 0.3);
|
||||
|
||||
float wind = fract(frameTimeCounter * 0.0125);
|
||||
const int sampleCount = 1;
|
||||
const int sampleCountP = sampleCount + 5;
|
||||
float ditherM = dither + 5.0;
|
||||
|
||||
vec3 spots = vec3(0.0);
|
||||
|
||||
for (int i = 0; i < sampleCount; i++) {
|
||||
float current = pow2((i + ditherM) / sampleCountP);
|
||||
float currentM = 1.0 - current;
|
||||
|
||||
vec2 planePos = wpos.xz * (0.5 + current) * noiseHeight;
|
||||
planePos = (planePos * 0.5 + cameraPositionM * 0.5) * 20.0;
|
||||
|
||||
float noiseSpots = texture2DLod(noisetex, floor(planePos) * 0.1, 0.0).g;
|
||||
vec3 noise = texture2DLod(noisetex, vec2(noiseSpots) + wind * 0.3, 0.0).b * vec3(0.3);
|
||||
|
||||
spots += noise * currentM * 6.0;
|
||||
}
|
||||
|
||||
#ifdef OVERWORLD
|
||||
spots = (spots - 0.5) * 1.5 + 0.5; // contrast
|
||||
#else
|
||||
spots = (spots - 0.5) * 3.5 + 0.5; // contrast
|
||||
#endif
|
||||
|
||||
spots += stars;
|
||||
|
||||
float clampedNoiseHeight = clamp01(noiseHeight);
|
||||
return spots * visibility / sampleCount * clampedNoiseHeight + clampedNoiseHeight - 1.0;
|
||||
}
|
||||
|
||||
return vec3(0.0);
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
#ifndef INCLUDE_CLOUD_COORD
|
||||
#define INCLUDE_CLOUD_COORD
|
||||
|
||||
#include "/lib/shaderSettings/clouds.glsl"
|
||||
|
||||
const float cloudNarrowness = CLOUD_NARROWNESS;
|
||||
|
||||
// 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.yx + 0.5;
|
||||
#ifdef ROTATE_REIMAGINED_CLOUDS_90_NEW
|
||||
coord = coord.yx;
|
||||
#endif
|
||||
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
|
||||
|
||||
if (cloudAltitude != cloudAlt1i) {
|
||||
wind *= CLOUD_LAYER2_SPEED_MULT;
|
||||
}
|
||||
|
||||
#if CLOUD_DIRECTION == 1
|
||||
tracePos.x -= wind;
|
||||
tracePos.z += cloudAltitude * 64.0;
|
||||
#else
|
||||
tracePos.z -= wind;
|
||||
tracePos.x += cloudAltitude * 64.0;
|
||||
#endif
|
||||
|
||||
tracePos.xz *= cloudNarrowness;
|
||||
return tracePos.xyz;
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,198 @@
|
||||
#include "/lib/shaderSettings/clouds.glsl"
|
||||
#if CLOUD_UNBOUND_SIZE_MULT != 100
|
||||
#define CLOUD_UNBOUND_SIZE_MULT_M CLOUD_UNBOUND_SIZE_MULT * 0.01
|
||||
#endif
|
||||
|
||||
#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 cameraPosOffset, vec3 playerPos, vec3 viewPos,
|
||||
float lViewPos, float VdotS, float VdotU, float dither, vec3 auroraBorealis, vec3 nightNebula, vec3 sunVec) {
|
||||
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);
|
||||
|
||||
#if IRIS_VERSION >= 10800
|
||||
#ifdef CLOUDS_REIMAGINED
|
||||
float modFactor = 1.0 / cloudNarrowness * 256.0;
|
||||
#else
|
||||
#if CLOUD_UNBOUND_SIZE_MULT == 100
|
||||
float modFactor = 1.0 / cloudNarrowness;
|
||||
#else
|
||||
float modFactor = 1.0 / (cloudNarrowness * CLOUD_UNBOUND_SIZE_MULT_M);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
int modFactorM = int(modFactor);
|
||||
|
||||
vec2 cameraPositionBIM = cameraPositionInt.xz - modFactorM * (cameraPositionInt.xz / modFactorM);
|
||||
|
||||
vec3 cameraPos = vec3(
|
||||
cameraPositionBIM.x + cameraPositionBestFract.x,
|
||||
cameraPosition.y,
|
||||
cameraPositionBIM.y + cameraPositionBestFract.z
|
||||
);
|
||||
|
||||
#if defined CLOUDS_UNBOUND && defined DOUBLE_UNBOUND_CLOUDS
|
||||
float layer2ScaleFactor = CLOUD_UNBOUND_LAYER2_SIZE * 10.0 / CLOUD_UNBOUND_SIZE_MULT;
|
||||
#if CLOUD_UNBOUND_SIZE_MULT == 100
|
||||
float modFactor2 = 1.0 / (cloudNarrowness * layer2ScaleFactor);
|
||||
#else
|
||||
float modFactor2 = 1.0 / (cloudNarrowness * CLOUD_UNBOUND_SIZE_MULT_M * layer2ScaleFactor);
|
||||
#endif
|
||||
|
||||
int modFactorM2 = int(modFactor2);
|
||||
|
||||
vec2 cameraPositionBIM2 = cameraPositionInt.xz - modFactorM2 * (cameraPositionInt.xz / modFactorM2);
|
||||
|
||||
vec3 cameraPos2 = vec3(
|
||||
cameraPositionBIM2.x + cameraPositionBestFract.x,
|
||||
cameraPosition.y,
|
||||
cameraPositionBIM2.y + cameraPositionBestFract.z
|
||||
);
|
||||
#endif
|
||||
#else
|
||||
vec3 cameraPos = cameraPosition;
|
||||
#if defined CLOUDS_UNBOUND && defined DOUBLE_UNBOUND_CLOUDS
|
||||
vec3 cameraPos2 = cameraPosition;
|
||||
#endif
|
||||
#endif
|
||||
cameraPos += cameraPosOffset;
|
||||
#if defined CLOUDS_UNBOUND && defined DOUBLE_UNBOUND_CLOUDS
|
||||
cameraPos2 += cameraPosOffset;
|
||||
#endif
|
||||
|
||||
#ifdef CLOUDS_REIMAGINED
|
||||
float thresholdF = 4000.0;
|
||||
#else
|
||||
float thresholdF = 4000.0;
|
||||
#endif
|
||||
|
||||
//float thresholdMix = pow2(clamp01(VdotU * 15.0));
|
||||
//thresholdF = mix(far, thresholdF, thresholdMix * 0.5 + 0.5);
|
||||
thresholdF *= CLOUD_RENDER_DISTANCE;
|
||||
|
||||
#if RAINBOW_CLOUD != 0
|
||||
vec3 wpos = normalize((gbufferModelViewInverse * vec4(viewPos, 1.0)).xyz);
|
||||
wpos /= (abs(wpos.y) + length(wpos.xz));
|
||||
|
||||
vec3 rainbowColor = getRainbowColor(wpos.xz * rainbowCloudDistribution * 0.35, 0.05);
|
||||
cloudRainColor *= rainbowColor;
|
||||
cloudAmbientColor *= rainbowColor;
|
||||
cloudLightColor *= rainbowColor;
|
||||
#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 CLOUDS_REIMAGINED && defined DOUBLE_REIM_CLOUDS
|
||||
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, sunVec, viewPos);
|
||||
if (clouds.a == 0.0) {
|
||||
clouds = GetVolumetricClouds(maxCloudAlt, thresholdF, cloudLinearDepth, skyFade, skyMult0,
|
||||
cameraPos, nPlayerPos, lViewPosM, VdotS, VdotU, dither, sunVec, viewPos);
|
||||
}
|
||||
} else {
|
||||
clouds = GetVolumetricClouds(maxCloudAlt, thresholdF, cloudLinearDepth, skyFade, skyMult0,
|
||||
cameraPos, nPlayerPos, lViewPosM, VdotS, VdotU, dither, sunVec, viewPos);
|
||||
if (clouds.a == 0.0) {
|
||||
clouds = GetVolumetricClouds(minCloudAlt, thresholdF, cloudLinearDepth, skyFade, skyMult0,
|
||||
cameraPos, nPlayerPos, lViewPosM, VdotS, VdotU, dither, sunVec, viewPos);
|
||||
}
|
||||
}
|
||||
|
||||
#elif defined CLOUDS_UNBOUND && defined DOUBLE_UNBOUND_CLOUDS
|
||||
float cloudLinearDepth1 = 1.0;
|
||||
float cloudLinearDepth2 = 1.0;
|
||||
//The order of calculating the clouds actually matters here
|
||||
vec4 clouds1 = GetVolumetricClouds(cloudAlt1i, thresholdF, cloudLinearDepth1, skyFade, skyMult0,
|
||||
cameraPos, nPlayerPos, lViewPosM, VdotS, VdotU, dither, sunVec, viewPos);
|
||||
vec4 clouds2 = GetVolumetricClouds(cloudAlt2i, thresholdF, cloudLinearDepth2, skyFade, skyMult0,
|
||||
cameraPos2, nPlayerPos, lViewPosM, VdotS, VdotU, dither, sunVec, viewPos);
|
||||
|
||||
if (clouds1.a * clouds2.a < 1e-36)
|
||||
clouds = clouds1 * sign(max(0.0, clouds1.a - 1e-36)) + clouds2 * sign(max(0.0, clouds2.a - 1e-36));
|
||||
else {
|
||||
if (cloudLinearDepth1 < cloudLinearDepth2)
|
||||
clouds = vec4(mix(clouds2.rgb, clouds1.rgb, clouds1.w), mix(clouds2.w, 1.0, clouds1.w));
|
||||
else
|
||||
clouds = vec4(mix(clouds1.rgb, clouds2.rgb, clouds2.w), mix(clouds1.w, 1.0, clouds2.w));
|
||||
}
|
||||
|
||||
cloudLinearDepth = min(clouds1.a > 0.5 ? cloudLinearDepth1 : 1.0, clouds2.a > 0.5 ? cloudLinearDepth2 : 1.0);
|
||||
#else
|
||||
clouds = GetVolumetricClouds(cloudAlt1i, thresholdF, cloudLinearDepth, skyFade, skyMult0,
|
||||
cameraPos, nPlayerPos, lViewPosM, VdotS, VdotU, dither, sunVec, viewPos) ;
|
||||
|
||||
#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
|
||||
#if NIGHT_NEBULAE == 1
|
||||
clouds.rgb += nightNebula * 0.2;
|
||||
#endif
|
||||
|
||||
return clouds;
|
||||
}
|
||||
@@ -0,0 +1,236 @@
|
||||
#include "/lib/shaderSettings/cloudsAndLighting.glsl"
|
||||
#include "/lib/atmospherics/clouds/cloudCoord.glsl"
|
||||
|
||||
#ifdef DOUBLE_REIM_CLOUDS
|
||||
const float cloudStretch = CLOUD_STRETCH * 4.2;
|
||||
const float L2cloudStretch = cloudStretch * CLOUD_REIMAGINED_LAYER2_HEIGHT;
|
||||
const float cloudTallness = cloudStretch * 2.0;
|
||||
#else
|
||||
const float cloudStretch = CLOUD_STRETCH * 4.2;
|
||||
const float cloudTallness = cloudStretch * 2.0;
|
||||
#endif
|
||||
const float cloudRoundness = CLOUD_ROUNDNESS;
|
||||
|
||||
bool GetCloudNoise(vec3 tracePos, inout vec3 tracePosM, int cloudAltitude) {
|
||||
tracePosM = ModifyTracePos(tracePos, cloudAltitude);
|
||||
vec2 coord = GetRoundedCloudCoord(tracePosM.xz, cloudRoundness);
|
||||
|
||||
#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;
|
||||
}
|
||||
|
||||
float Get2DCloudSample(vec2 pos) {
|
||||
#ifdef DEFERRED1
|
||||
return texture2D(colortex3, GetRoundedCloudCoord(pos, cloudRoundness)).b;
|
||||
#else
|
||||
return texture2D(gaux4, GetRoundedCloudCoord(pos, cloudRoundness)).b;
|
||||
#endif
|
||||
}
|
||||
|
||||
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, vec3 sunVec, vec3 viewPos) {
|
||||
vec4 volumetricClouds = vec4(0.0);
|
||||
|
||||
// Use local variables to avoid modifying globals
|
||||
float localCloudStretch = cloudStretch;
|
||||
float localCloudTallness = cloudTallness;
|
||||
|
||||
#ifdef DOUBLE_REIM_CLOUDS
|
||||
if (cloudAltitude != cloudAlt1i) { // second layer
|
||||
localCloudStretch = L2cloudStretch;
|
||||
localCloudTallness = 2.0 * localCloudStretch;
|
||||
}
|
||||
#endif
|
||||
|
||||
float higherPlaneAltitude = cloudAltitude + localCloudStretch;
|
||||
float lowerPlaneAltitude = cloudAltitude - localCloudStretch;
|
||||
|
||||
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_INTERNAL == 1 || !defined DEFERRED1
|
||||
int sampleCount = max(int(planeDistanceDif) / 16, 6);
|
||||
#elif CLOUD_QUALITY_INTERNAL == 2
|
||||
int sampleCount = max(int(planeDistanceDif) / 8, 12);
|
||||
#elif CLOUD_QUALITY_INTERNAL == 3 || CLOUD_QUALITY_INTERNAL == 4
|
||||
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
|
||||
|
||||
#ifdef AURORA_INFLUENCE
|
||||
cloudAmbientColor = getAuroraAmbientColor(cloudAmbientColor, viewPos, 0.032, AURORA_CLOUD_INFLUENCE_INTENSITY, 0.75);
|
||||
#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 = shadowDistance * 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
|
||||
|
||||
#ifdef INVERTED_CLOUD_SHADING
|
||||
float cloudShading = (higherPlaneAltitude - tracePos.y) / localCloudTallness;
|
||||
#else
|
||||
float cloudShading = 1.0 - (higherPlaneAltitude - tracePos.y) / localCloudTallness;
|
||||
#endif
|
||||
cloudShading = pow(max0(cloudShading), max0(CLOUD_SHADING_AMOUNT * 0.1 - 0.2));
|
||||
float VdotSM1 = max0(sunVisibility > 0.5 ? VdotS : - VdotS);
|
||||
|
||||
#if CLOUD_QUALITY_INTERNAL >= 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;
|
||||
light -= Get2DCloudSample(cLightPos.xz) * cloudShadingM;
|
||||
cLightPos += gradientNoise * cLightPosAdd;
|
||||
light -= Get2DCloudSample(cLightPos.xz) * cloudShadingM;
|
||||
|
||||
float VdotSM2 = VdotSM1 * shadowTime * 0.25;
|
||||
VdotSM2 += 0.5 * cloudShading + 0.08;
|
||||
cloudShading = VdotSM2 * light * lightMult;
|
||||
#endif
|
||||
|
||||
#if CLOUD_SUN_MOON_SHADING > 0
|
||||
float visibilityFactor = 1.0;
|
||||
#if CLOUD_SUN_MOON_SHADING == 1
|
||||
visibilityFactor = 1.0 - sunVisibility;
|
||||
#elif CLOUD_SUN_MOON_SHADING == 2
|
||||
visibilityFactor = sunVisibility;
|
||||
#endif
|
||||
|
||||
if (visibilityFactor > 0.0) {
|
||||
vec3 worldLightVec = mat3(gbufferModelViewInverse) * sunVec;
|
||||
float cloudLightRadius = 375.0;
|
||||
|
||||
float aboveFade = 1.0 - smoothstep(-20.0, 0.0, cameraPos.y - cloudAltitude);
|
||||
float sunPlaneIntersect = (cloudAltitude - cameraPos.y) / worldLightVec.y;
|
||||
vec2 posVector = cameraPos.xz + worldLightVec.xz * sunPlaneIntersect - tracePos.xz;
|
||||
|
||||
float moonVisibility = abs(1.0 - moonPhase / 4.0);
|
||||
float sunMult = mix(moonVisibility, 0.75, sunVisibility);
|
||||
float falloff = exp((1.0 - max0(1.0 - length(posVector) / cloudLightRadius)) * -6.0) * aboveFade * sunMult;
|
||||
|
||||
float sunCloudMult = clamp01(falloff * 2.5 * mix(1.0, (lTracePos - minPlaneDistance) / (maxPlaneDistance - minPlaneDistance), 0.6));
|
||||
|
||||
vec3 bloodMoonCloudColor = vec3(1.0);
|
||||
#if BLOOD_MOON > 0
|
||||
bloodMoonCloudColor = mix(bloodMoonCloudColor, vec3(0.302, 0.0078, 0.0078) * 5, getBloodMoon(sunVisibility));
|
||||
#endif
|
||||
|
||||
cloudLightColor += bloodMoonCloudColor * sunCloudMult * 0.11 * visibilityFactor;
|
||||
cloudShading += sunCloudMult * 1.5 * visibilityFactor;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if BLOOD_MOON > 0
|
||||
vec3 hsvCloudLightColor = rgb2hsv(cloudLightColor);
|
||||
cloudLightColor = mix(cloudLightColor, hsv2rgb(vec3(0, max(0.66, hsvCloudLightColor.y), hsvCloudLightColor.z)), getBloodMoon(sunVisibility));
|
||||
#endif
|
||||
|
||||
#ifdef AURORA_INFLUENCE
|
||||
cloudLightColor = getAuroraAmbientColor(cloudLightColor, viewPos, 0.1, AURORA_CLOUD_INFLUENCE_INTENSITY, 0.75);
|
||||
#endif
|
||||
|
||||
vec3 colorSample = cloudAmbientColor * 0.95 * (1.0 - 0.35 * cloudShading) + cloudLightColor * (0.1 + cloudShading);
|
||||
|
||||
#ifdef RAIN_ATMOSPHERE
|
||||
// Lightning flashes around lightning bolt position
|
||||
vec3 lightningPos = getLightningPos(tracePos - cameraPos, lightningBoltPosition.xyz, false);
|
||||
vec2 lightningAdd = lightningFlashEffect(lightningPos, vec3(1.0), 450.0, 0.0, 0) * isLightningActive() * 10.0;
|
||||
colorSample += lightningAdd.y;
|
||||
|
||||
// Thunderstorm cloud highlights (randomly appear in stormy weather)
|
||||
float highlightBoost = getThunderstormCloudHighlights(tracePos, cameraPos.xz, lTracePos, minPlaneDistance, maxPlaneDistance, 0.005);
|
||||
colorSample += highlightBoost;
|
||||
#endif
|
||||
|
||||
vec3 cloudSkyColor = GetSky(VdotU, VdotS, dither, isEyeInWater == 0, false);
|
||||
#ifdef ATM_COLOR_MULTS
|
||||
cloudSkyColor *= sqrtAtmColorMult; // C72380KD - Reduced atmColorMult impact on some things
|
||||
#endif
|
||||
float distanceRatio = (distanceThreshold - lTracePosXZ) / distanceThreshold;
|
||||
float cloudFogFactor = pow2(clamp(distanceRatio, 0.0, 1.0)) * 0.75;
|
||||
float nightCloudRemove = NIGHT_CLOUD_UNBOUND_REMOVE * (1.0 - sunVisibility) * -1 + 1.0; // mapped to 1 to 0 range
|
||||
|
||||
#if defined DOUBLE_REIM_CLOUDS && CLOUD_REIMAGINED_LAYER2_TRANSPARENCY != 20
|
||||
if (cloudAltitude != cloudAlt1i) { // second layer uses custom transparency
|
||||
cloudMult *= (CLOUD_REIMAGINED_LAYER2_TRANSPARENCY * 0.05) * nightCloudRemove;
|
||||
} else {
|
||||
cloudMult *= CLOUD_TRANSPARENCY * nightCloudRemove;
|
||||
}
|
||||
#else
|
||||
cloudMult *= CLOUD_TRANSPARENCY * nightCloudRemove;
|
||||
#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);
|
||||
|
||||
float cloudDistanceFactor = clamp(distanceRatio, 0.0, 0.75);
|
||||
//float distanceRatioNew = (2000 - lTracePosXZ) / 2000;
|
||||
//float cloudDistanceFactorNew = clamp(distanceRatioNew, 0.5, 0.75);
|
||||
|
||||
//volumetricClouds.a = pow(cloudDistanceFactor * 1.33333, 0.5 + 10.0 * pow(abs(VdotSM1), 90.0)) * cloudMult;
|
||||
volumetricClouds.a = sqrt(cloudDistanceFactor * 1.33333) * cloudMult;
|
||||
volumetricClouds.rgb = colorSample;
|
||||
|
||||
cloudLinearDepth = sqrt(lTracePos / renderDistance);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return volumetricClouds;
|
||||
}
|
||||
@@ -0,0 +1,376 @@
|
||||
#include "/lib/shaderSettings/cloudsAndLighting.glsl"
|
||||
const float cloudStretchModified = max(0.25, float(CLOUD_STRETCH) * 1.9 - 0.9);
|
||||
#if CLOUD_QUALITY_INTERNAL == 1 || !defined DEFERRED1
|
||||
const float cloudStretchRaw = 11.0 * cloudStretchModified;
|
||||
#elif CLOUD_QUALITY_INTERNAL == 2
|
||||
const float cloudStretchRaw = 16.0 * cloudStretchModified;
|
||||
#elif CLOUD_QUALITY_INTERNAL == 3
|
||||
const float cloudStretchRaw = 18.0 * cloudStretchModified;
|
||||
#elif CLOUD_QUALITY_INTERNAL == 4
|
||||
const float cloudStretchRaw = 20.0 * cloudStretchModified;
|
||||
#endif
|
||||
|
||||
#ifdef DOUBLE_UNBOUND_CLOUDS
|
||||
const float L2cloudStretch = cloudStretchRaw * CLOUD_UNBOUND_LAYER2_HEIGHT / CLOUD_STRETCH;
|
||||
|
||||
#if CLOUD_UNBOUND_SIZE_MULT <= 100
|
||||
float cloudStretch = cloudStretchRaw;
|
||||
#else
|
||||
float cloudStretch = cloudStretchRaw / float(CLOUD_UNBOUND_SIZE_MULT_M);
|
||||
#endif
|
||||
|
||||
float cloudTallness = cloudStretch * 2.0;
|
||||
#else
|
||||
#if CLOUD_UNBOUND_SIZE_MULT <= 100
|
||||
const float cloudStretch = cloudStretchRaw;
|
||||
#else
|
||||
const float cloudStretch = cloudStretchRaw / float(CLOUD_UNBOUND_SIZE_MULT_M);
|
||||
#endif
|
||||
const float cloudTallness = cloudStretch * 2.0;
|
||||
#endif
|
||||
|
||||
#if CLOUD_QUALITY > 1
|
||||
const float cloudNarrowness = 0.00012;
|
||||
#else
|
||||
const float cloudNarrowness = 0.00006;
|
||||
#endif
|
||||
|
||||
|
||||
float GetCloudNoise(vec3 tracePos, int cloudAltitude, float lTracePosXZ, float cloudPlayerPosY) {
|
||||
vec3 tracePosM = tracePos.xyz * cloudNarrowness;
|
||||
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
|
||||
|
||||
#ifdef DOUBLE_UNBOUND_CLOUDS
|
||||
if (cloudAltitude != cloudAlt1i) {
|
||||
tracePosM *= CLOUD_UNBOUND_LAYER2_SIZE * 10.0 / CLOUD_UNBOUND_SIZE_MULT;
|
||||
wind *= CLOUD_UNBOUND_LAYER2_SIZE * 30.0 * CLOUD_LAYER2_SPEED_MULT / CLOUD_UNBOUND_SIZE_MULT;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if CLOUD_QUALITY_INTERNAL == 1
|
||||
int sampleCount = 2;
|
||||
float persistance = 0.6;
|
||||
float noiseMult = 0.95;
|
||||
wind *= 0.5;
|
||||
#elif CLOUD_QUALITY_INTERNAL == 2 || !defined DEFERRED1
|
||||
int sampleCount = 4;
|
||||
float persistance = 0.5;
|
||||
float noiseMult = 1.14;
|
||||
#elif CLOUD_QUALITY_INTERNAL == 3
|
||||
int sampleCount = 4;
|
||||
float persistance = 0.5;
|
||||
float noiseMult = 1.0;
|
||||
#elif CLOUD_QUALITY_INTERNAL == 4
|
||||
int sampleCount = 5;
|
||||
float persistance = 0.5;
|
||||
float noiseMult = 1.05;
|
||||
#endif
|
||||
|
||||
#ifndef DEFERRED1
|
||||
noiseMult *= 1.2;
|
||||
#endif
|
||||
|
||||
#if CLOUD_DIRECTION == 1
|
||||
tracePosM.xz = tracePosM.zx;
|
||||
#endif
|
||||
|
||||
for (int i = 0; i < sampleCount; i++) {
|
||||
#if CLOUD_QUALITY_INTERNAL >= 2
|
||||
noise += Noise3D(tracePosM - vec3(0.0, 0.0, wind)) * currentPersist;
|
||||
#else
|
||||
noise += texture2DLod(noisetex, tracePosM.xz - vec2(0.0, wind), 0.0).b * currentPersist;
|
||||
#endif
|
||||
total += currentPersist;
|
||||
|
||||
tracePosM *= 3.0;
|
||||
wind *= 0.5;
|
||||
currentPersist *= persistance;
|
||||
}
|
||||
noise = pow2(noise / total);
|
||||
|
||||
#define CLOUD_BASE_ADD 0.8
|
||||
//#define CLOUD_FAR_ADD -0.005
|
||||
#define CLOUD_ABOVE_ADD 0.1
|
||||
|
||||
float nightCloudRemove = NIGHT_CLOUD_UNBOUND_REMOVE * (1.0 - sunVisibility) * -0.65 + 1.0; // mapped to 1 to 0.65 range
|
||||
|
||||
float seasonCloudAdd = 0.0;
|
||||
#if SEASONS > 0
|
||||
float autumnOnlyForests = 1.0;
|
||||
#ifdef AUTUMN_CONDITION
|
||||
autumnOnlyForests = inForest;
|
||||
#endif
|
||||
float autumnWinterTime = autumnTime + winterTime;
|
||||
#if SNOW_CONDITION != 2
|
||||
autumnWinterTime *= mix(inSnowy + autumnOnlyForests, inSnowy, winterTime); // make only appear in cold biomes during winter
|
||||
#endif
|
||||
#if SNOW_CONDITION == 0
|
||||
autumnWinterTime *= mix(rainFactor + autumnOnlyForests, rainFactor, winterTime); // make only appear in rain during winter
|
||||
#endif
|
||||
seasonCloudAdd += mix(0.0, 0.35, autumnWinterTime);
|
||||
seasonCloudAdd += mix(0.0, -0.2, summerTime);
|
||||
#endif
|
||||
|
||||
noiseMult *= CLOUD_BASE_ADD
|
||||
//+ CLOUD_FAR_ADD * sqrt(lTracePosXZ + 10.0) // more/less clouds far away
|
||||
+ CLOUD_ABOVE_ADD * clamp01(-cloudPlayerPosY / cloudTallness) // more clouds when camera is above them
|
||||
+ CLOUD_UNBOUND_RAIN_ADD * rainFactor + seasonCloudAdd; // more clouds during rain and seasons
|
||||
|
||||
#ifdef DOUBLE_UNBOUND_CLOUDS
|
||||
if (cloudAltitude != cloudAlt1i)
|
||||
noise *= noiseMult * CLOUD_UNBOUND_LAYER2_AMOUNT * nightCloudRemove;
|
||||
else
|
||||
#endif
|
||||
noise *= noiseMult * CLOUD_UNBOUND_AMOUNT * nightCloudRemove;
|
||||
|
||||
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, vec3 sunVec, vec3 viewPos) {
|
||||
vec4 volumetricClouds = vec4(0.0);
|
||||
|
||||
#ifdef DOUBLE_UNBOUND_CLOUDS
|
||||
float L1cloudStretch = cloudStretch;
|
||||
|
||||
if (cloudAltitude != cloudAlt1i) { // second layer
|
||||
cloudStretch = L2cloudStretch;
|
||||
cloudTallness = 2.0 * cloudStretch;
|
||||
}
|
||||
#endif
|
||||
|
||||
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 = 64.0;
|
||||
#elif CLOUD_QUALITY_INTERNAL == 1
|
||||
float stepMult = 16.0;
|
||||
#elif CLOUD_QUALITY_INTERNAL == 2
|
||||
float stepMult = 32.0;
|
||||
#elif CLOUD_QUALITY_INTERNAL == 3
|
||||
float stepMult = 16.0;
|
||||
#elif CLOUD_QUALITY_INTERNAL == 4
|
||||
float stepMult = 24.0;
|
||||
#endif
|
||||
|
||||
#if defined DOUBLE_UNBOUND_CLOUDS && (CLOUD_UNBOUND_LAYER2_SIZE > 10 || CLOUD_UNBOUND_SIZE_MULT > 100)
|
||||
if (cloudAltitude != cloudAlt1i) {
|
||||
#if CLOUD_UNBOUND_LAYER2_SIZE > 10
|
||||
stepMult = stepMult / sqrt(CLOUD_UNBOUND_LAYER2_SIZE * 0.1);
|
||||
#endif
|
||||
} else {
|
||||
#if CLOUD_UNBOUND_SIZE_MULT > 100
|
||||
stepMult = stepMult / sqrt(float(CLOUD_UNBOUND_SIZE_MULT_M));
|
||||
#endif
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#if CLOUD_UNBOUND_SIZE_MULT > 100
|
||||
stepMult = stepMult / sqrt(float(CLOUD_UNBOUND_SIZE_MULT_M));
|
||||
#endif
|
||||
|
||||
#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;
|
||||
float VdotSM4 = pow(VdotSM1M, 100.0) * sunVisibility;
|
||||
|
||||
#ifdef FIX_AMD_REFLECTION_CRASH
|
||||
sampleCount = min(sampleCount, 30); //BFARC
|
||||
#endif
|
||||
|
||||
#ifdef AURORA_INFLUENCE
|
||||
cloudLightColor = getAuroraAmbientColor(cloudLightColor, viewPos, 0.06, AURORA_CLOUD_INFLUENCE_INTENSITY, 0.75);
|
||||
cloudAmbientColor = getAuroraAmbientColor(cloudAmbientColor, viewPos, 0.03, AURORA_CLOUD_INFLUENCE_INTENSITY, 0.75);
|
||||
#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 DOUBLE_UNBOUND_CLOUDS
|
||||
//Fixes overlapping clouds
|
||||
|
||||
if (CLOUD_UNBOUND_LAYER2_HEIGHT > CLOUD_STRETCH){
|
||||
if (cloudAltitude == cloudAlt1i) {
|
||||
if (abs(tracePos.y - cloudAlt2i) < L2cloudStretch)
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
if (cloudAltitude != cloudAlt1i) {
|
||||
if (abs(tracePos.y - cloudAlt1i) < L1cloudStretch)
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#if defined CLOUD_CLOSED_AREA_CHECK && SHADOW_QUALITY > -1
|
||||
float shadowLength = shadowDistance * 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_INTERNAL == 1 && defined DEFERRED1
|
||||
tracePos.y += 4.0 * (texture2DLod(noisetex, tracePos.xz * cloudNarrowness * 16.0, 0.0).r - 0.5);
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined DOUBLE_UNBOUND_CLOUDS && CLOUD_UNBOUND_LAYER2_TRANSPARENCY != 20
|
||||
float opacityFactor = cloudAltitude != cloudAlt1i
|
||||
? min1(cloudNoise * 8.0) * (CLOUD_UNBOUND_LAYER2_TRANSPARENCY * 0.05)
|
||||
: min1(cloudNoise * 8.0) * CLOUD_TRANSPARENCY;
|
||||
#else
|
||||
float opacityFactor = min1(cloudNoise * 8.0) * CLOUD_TRANSPARENCY;
|
||||
#endif
|
||||
|
||||
#ifdef INVERTED_CLOUD_SHADING
|
||||
float cloudShading = (higherPlaneAltitude - tracePos.y) / cloudTallness;
|
||||
#else
|
||||
float cloudShading = 1.0 - (higherPlaneAltitude - tracePos.y) / cloudTallness;
|
||||
#endif
|
||||
|
||||
cloudShading *= 1.0 + 0.2 * VdotSM3 * (1.0 - opacityFactor) + VdotSM4;
|
||||
#if CLOUD_SHADING_AMOUNT != 10
|
||||
cloudShading = pow(max0(cloudShading), CLOUD_SHADING_AMOUNT * 0.1);
|
||||
#endif
|
||||
|
||||
#ifdef AURORA_INFLUENCE
|
||||
cloudLightColor = getAuroraAmbientColor(cloudLightColor, viewPos, 0.1, AURORA_CLOUD_INFLUENCE_INTENSITY, 0.75);
|
||||
#endif
|
||||
|
||||
#if CLOUD_SUN_MOON_SHADING > 0
|
||||
float visibilityFactor = 1.0;
|
||||
#if CLOUD_SUN_MOON_SHADING == 1
|
||||
visibilityFactor = 1.0 - sunVisibility;
|
||||
#elif CLOUD_SUN_MOON_SHADING == 2
|
||||
visibilityFactor = sunVisibility;
|
||||
#endif
|
||||
|
||||
if (visibilityFactor > 0.0) {
|
||||
vec3 worldLightVec = mat3(gbufferModelViewInverse) * sunVec;
|
||||
float cloudLightRadius = 375.0;
|
||||
|
||||
float aboveFade = clamp01(1.0 - (cameraPos.y - cloudAltitude) / (cloudTallness * 3.0));
|
||||
float radiusFactor = mix(cloudLightRadius * 8.0, cloudLightRadius, aboveFade);
|
||||
float moonVisibility = abs(1.0 - moonPhase / 4.0);
|
||||
float sunMult = mix(moonVisibility, 0.85, sunVisibility);
|
||||
|
||||
float sunPlaneIntersect = (cloudAltitude - cameraPos.y) / worldLightVec.y;
|
||||
vec2 posVector = cameraPos.xz + worldLightVec.xz * sunPlaneIntersect - tracePos.xz;
|
||||
float falloff = exp((1.0 - max0(1.0 - length(posVector) / radiusFactor)) * -6.0) * aboveFade * sunMult;
|
||||
|
||||
float sunShadingFactor = clamp01(falloff * mix(1.0, 2.0, aboveFade) * mix(1.0, (lTracePos - minPlaneDistance) / (maxPlaneDistance - minPlaneDistance), 0.75));
|
||||
|
||||
vec3 bloodMoonCloudColor = vec3(1.0);
|
||||
#if BLOOD_MOON > 0
|
||||
bloodMoonCloudColor = mix(bloodMoonCloudColor, vec3(0.302, 0.0078, 0.0078) * 5, getBloodMoon(sunVisibility));
|
||||
#endif
|
||||
|
||||
cloudLightColor += bloodMoonCloudColor * sunShadingFactor * 0.3 * visibilityFactor;
|
||||
cloudShading += sunShadingFactor * 0.45 * visibilityFactor;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if BLOOD_MOON > 0
|
||||
vec3 hsvCloudLightColor = rgb2hsv(cloudLightColor);
|
||||
cloudLightColor = mix(cloudLightColor, hsv2rgb(vec3(0, max(0.66, hsvCloudLightColor.y), hsvCloudLightColor.z)), getBloodMoon(sunVisibility));
|
||||
#endif
|
||||
|
||||
vec3 colorSample = cloudAmbientColor * (0.4 + 0.6 * cloudShading) + cloudLightColor * cloudShading;
|
||||
//vec3 colorSample = 2.5 * cloudLightColor * pow2(cloudShading); // <-- Used this to take the Unbound logo
|
||||
|
||||
#ifdef RAIN_ATMOSPHERE
|
||||
// Lightning flashes around lightning bolt position
|
||||
vec3 lightningPos = getLightningPos(tracePos - cameraPos, lightningBoltPosition.xyz, false);
|
||||
vec2 lightningAdd = lightningFlashEffect(lightningPos, vec3(1.0), 550.0, 0.0, 0) * isLightningActive() * 10.0;
|
||||
colorSample += lightningAdd.y;
|
||||
|
||||
// Thunderstorm cloud highlights (randomly appear in stormy weather)
|
||||
float highlightBoost = getThunderstormCloudHighlights(tracePos, cameraPos.xz, lTracePos, minPlaneDistance, maxPlaneDistance, 0.004);
|
||||
colorSample += highlightBoost;
|
||||
#endif
|
||||
|
||||
vec3 cloudSkyColor = GetSky(VdotU, VdotS, dither, isEyeInWater == 0, 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;
|
||||
float cloudFogFactor = pow2(pow1_5(clamp(distanceRatio, 0.0, 1.0)));
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef DOUBLE_UNBOUND_CLOUDS
|
||||
if (volumetricClouds.a > 0.5)
|
||||
#endif
|
||||
{ cloudLinearDepth = sqrt(firstHitPos / renderDistance); }
|
||||
|
||||
return volumetricClouds;
|
||||
}
|
||||
@@ -0,0 +1,296 @@
|
||||
#ifndef ENDCRYSTAL_SAMPLER_DEFINE
|
||||
uniform isampler2D endcrystal_sampler;
|
||||
#endif
|
||||
|
||||
const float healing_boundRadius = 6.0;
|
||||
const float healing_ballRadius = 3.5;
|
||||
const float healing_beamRadius = 0.6;
|
||||
const float vortex_cylinderRadius = 3.0;
|
||||
const float vortex_ballRadius = 5.0;
|
||||
const float death_radius = 70.0;
|
||||
|
||||
#ifndef INCLUDE_ENDER_BEAMS
|
||||
#ifdef GBUFFERS_WATER
|
||||
float vlFactor = 0.5;
|
||||
#endif
|
||||
#endif
|
||||
vec3 beamPurple = normalize(endColorBeam * endColorBeam * endColorBeam) * (2.5 - 1.0 * vlFactor) * E_BEAM_I;
|
||||
|
||||
vec3 endDragonColM = sqrt(endOrangeCol);
|
||||
vec3 beamColM = sqrt(beamPurple);
|
||||
|
||||
float GetBallRadius(float state) {
|
||||
return vortex_ballRadius * (1.0 + 4.0 * sqrt(1.0 - state));
|
||||
}
|
||||
|
||||
float VortexWidth(float x, float ballRadius) {
|
||||
if (x > 0.5 * ballRadius) {
|
||||
float expScale = sqrt(0.75) * ballRadius - vortex_cylinderRadius;
|
||||
return vortex_cylinderRadius + expScale * exp( -sqrt(1.0/3.0) / expScale * (x - 0.5 * ballRadius));
|
||||
} else if (x > -ballRadius) {
|
||||
return sqrt(pow2(ballRadius) - pow2(x));
|
||||
}
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
vec4 SampleEndCrystalVortex(vec3 relPos, vec2 state, vec2 noiseOffset) {
|
||||
float thisBallRadius = GetBallRadius(state.x);
|
||||
|
||||
float beamFactor = smoothstep(-thisBallRadius, thisBallRadius, relPos.y);
|
||||
float featureWidth = VortexWidth(relPos.y, thisBallRadius);
|
||||
vec2 horizontalScaledPos = featureWidth > 0.0 ? relPos.xz / featureWidth : vec2(2.0);
|
||||
float featureDist = length(horizontalScaledPos);
|
||||
if (length(relPos.xz) > featureWidth) {
|
||||
return vec4(0);
|
||||
}
|
||||
float beamStrength = 2.5 * beamFactor * (cos(featureDist * 3.1416) * 0.5 + 0.5) * pow2(max(0.0, 1 - pow2(0.005 / (0.9 * state.x + 0.1) / pow2(pow2(state.y)) * relPos.y))) * state.x;
|
||||
float spiralStrength = 200 * beamFactor * pow(featureDist, 7) * pow2(1.0 - featureDist) * pow2(max(0.0, 1 - pow2(0.02 / (0.6 * state.x * state.x + 0.4) / state.y * relPos.y)));
|
||||
float spiralAngle = (0.4 / vortex_cylinderRadius * relPos.y - 0.2 * pow2(min(0.0, -2.5 + relPos.y / thisBallRadius))) / (state.x + 0.2);
|
||||
vec2 spiralPos = mat2(cos(spiralAngle), -sin(spiralAngle), sin(spiralAngle), cos(spiralAngle)) * horizontalScaledPos;
|
||||
vec4 beamNoise = texture2DLod(noisetex, noiseOffset + 5.0 / noiseTextureResolution * horizontalScaledPos, 0.0);
|
||||
vec4 beamNoise2 = texture2DLod(noisetex, noiseOffset + 5.0 / noiseTextureResolution * vec2(relPos.y * 0.02 + 2.7 * beamNoise.gb - 3.6 * frameTimeCounter * 0.5), 0.0);
|
||||
vec4 spiralNoise = texture2DLod(noisetex, noiseOffset + 5.0 / noiseTextureResolution * spiralPos, 0.0);
|
||||
vec4 spiralNoise2 = texture2DLod(noisetex, noiseOffset + 20.0 / noiseTextureResolution * spiralPos, 0.0);
|
||||
return vec4(beamStrength * beamNoise.r * beamNoise2.r * endDragonColM + spiralStrength * pow2(spiralNoise.r) * (0.5 + spiralNoise2.r) * beamColM, beamStrength + spiralStrength) * 0.3;
|
||||
}
|
||||
|
||||
vec4 SingleEndCrystalVortex(vec3 start, vec3 direction, vec3 center, vec2 state, float dither) {
|
||||
const float stepSize = 0.5;
|
||||
float invHorizontalDirLen = 1.0 / length(direction.xz);
|
||||
float thisBallRadius = GetBallRadius(state.x);
|
||||
float closestProgress = clamp(
|
||||
dot(center.xz - start.xz, direction.xz) * pow2(invHorizontalDirLen),
|
||||
-thisBallRadius * invHorizontalDirLen,
|
||||
1.0 + thisBallRadius * invHorizontalDirLen);
|
||||
vec3 closestPos = start + closestProgress * direction;
|
||||
float closestDist = length(closestPos.xz - center.xz);
|
||||
if (closestDist > thisBallRadius) {
|
||||
return vec4(0);
|
||||
}
|
||||
float startProgress = closestProgress - sqrt((thisBallRadius * thisBallRadius - closestDist * closestDist)) * invHorizontalDirLen;
|
||||
float endProgress = min(1.0, 2 * closestProgress - startProgress);
|
||||
startProgress = max(0.0, startProgress);
|
||||
vec2 noiseOffset = (center.xz + cameraPosition.xz + vec2(3.0, 1.6) * frameTimeCounter) * 0.005;
|
||||
vec4 colour = vec4(0);
|
||||
float dist = startProgress + dither * invHorizontalDirLen * stepSize;
|
||||
for (int k = 0; k < 100; k++) {
|
||||
if (dist > endProgress) break;
|
||||
colour += SampleEndCrystalVortex(start + dist * direction - center, state, noiseOffset);
|
||||
dist += invHorizontalDirLen * stepSize;
|
||||
}
|
||||
return colour * stepSize * smoothstep(0.0, 1.0, state.x);
|
||||
}
|
||||
|
||||
float EndCrystalBeamWidth(float x, float len) {
|
||||
x = 0.5 * len - abs(x - 0.5 * len);
|
||||
if (x <= -healing_ballRadius) return 0.0;
|
||||
if (x < 0.5 * healing_ballRadius) return sqrt(pow2(healing_ballRadius) - pow2(x));
|
||||
float expScale = sqrt(0.75) * healing_ballRadius - healing_beamRadius;
|
||||
return healing_beamRadius + expScale * exp( -sqrt(1.0/3.0) / expScale * (x - 0.5 * healing_ballRadius));
|
||||
}
|
||||
|
||||
vec4 SampleEndCrystalBeam(vec3 relPos, float len) {
|
||||
float beamWidth = EndCrystalBeamWidth(relPos.x, len);
|
||||
|
||||
if (beamWidth > 0.0001) {
|
||||
float beamFactor = smoothstep(0.0, 2.0 * healing_ballRadius, 0.5 * len - abs(relPos.x - 0.5 * len));
|
||||
float noisyTime = frameTimeCounter + 0.4 * texture2DLod(noisetex, vec2(3.0 / noiseTextureResolution, frameTimeCounter / (0.45 * noiseTextureResolution)), 0.0).r;
|
||||
|
||||
relPos.yz /= beamWidth;
|
||||
float strength = 0.0;
|
||||
vec3 healBeamColor = vec3(0);
|
||||
for (int k = 0; k < 3; k++) {
|
||||
vec2 noiseCoords = vec2(0.2 / noiseTextureResolution * relPos.x, 0 + vec2(k, 6 * k) / noiseTextureResolution);
|
||||
vec4 zapNoise0 = texture2DLod(noisetex, noiseCoords + floor(8.0 * noisyTime) / noiseTextureResolution, 0.0);
|
||||
vec4 zapNoise1 = texture2DLod(noisetex, 3.3 * noiseCoords + floor(8.0 * noisyTime) / noiseTextureResolution, 0.0);
|
||||
vec4 zapNoise2 = texture2DLod(noisetex, 6.8 * noiseCoords + (15.0 * frameTimeCounter) / noiseTextureResolution, 0.0);
|
||||
vec2 thisRelPos = relPos.yz + beamFactor / beamWidth * (6.0 * zapNoise0.rb + 1.6 * zapNoise1.rb + 1.2 * zapNoise2.rb - (3.0 + 0.8 + 0.6));
|
||||
vec4 sideNoise = texture2DLod(noisetex, (7.0 * thisRelPos.xy) / noiseTextureResolution, 0.0);
|
||||
vec3 colorNoise = texture2DLod(noisetex, 4.0 * noiseCoords + floor(12.0 * noisyTime) / noiseTextureResolution, 0.0).rgb;
|
||||
float centerDist0 = length(thisRelPos.xy);
|
||||
|
||||
float centerDist = centerDist0 - 1.2;
|
||||
strength = max(strength, clamp( -centerDist, 0.0, 0.2) * pow2(max(0.0, 1.0 - pow2((centerDist0 - 1.0) * beamWidth * 0.5))) * mix(1.0, sideNoise.b, beamWidth / healing_ballRadius));
|
||||
healBeamColor = mix(clamp01(saturateColors(beamColM, 0.8) - sideNoise.rgb * 0.08), saturateColors(beamColM, 1.3) * 1.3, colorNoise);
|
||||
}
|
||||
return strength / beamWidth * vec4(healBeamColor * 0.5, 1.0) + 0.2 * beamFactor * exp(-6.0 * dot(relPos.yz, relPos.yz)) * vec4(endDragonColM * 2.2, 1.0);
|
||||
}
|
||||
return vec4(0.0);
|
||||
}
|
||||
|
||||
|
||||
vec4 EndCrystalBeam(vec3 start, vec3 direction, vec3 startPos, vec3 endPos, float dither) {
|
||||
vec3 startDiff = start - startPos;
|
||||
vec3 beamDirection = endPos - startPos;
|
||||
mat3 rotMat;
|
||||
rotMat[0] = normalize(beamDirection);
|
||||
rotMat[1] = normalize(cross(beamDirection, vec3(-2e-4, 1, 1e-5)));
|
||||
rotMat[2] = cross(rotMat[0], rotMat[1]);
|
||||
start *= rotMat;
|
||||
startPos *= rotMat;
|
||||
beamDirection *= rotMat;
|
||||
direction *= rotMat;
|
||||
const float stepSize = 0.5;
|
||||
float invHorizontalDirLen = 1.0 / length(direction.yz);
|
||||
float closestProgress = clamp(
|
||||
dot(startPos.yz - start.yz, direction.yz) * pow2(invHorizontalDirLen),
|
||||
-healing_boundRadius * invHorizontalDirLen,
|
||||
1.0 + healing_boundRadius * invHorizontalDirLen);
|
||||
vec3 closestPos = start + closestProgress * direction;
|
||||
float closestDist = length(closestPos.yz - startPos.yz);
|
||||
if (closestDist > healing_boundRadius) {
|
||||
return vec4(0);
|
||||
}
|
||||
float startProgress = closestProgress - sqrt((healing_boundRadius * healing_boundRadius - closestDist * closestDist)) * invHorizontalDirLen;
|
||||
float endProgress = min(1.0, 2 * closestProgress - startProgress);
|
||||
startProgress = max(0.0, startProgress);
|
||||
vec4 colour = vec4(0);
|
||||
float dist = startProgress + dither * invHorizontalDirLen * stepSize;
|
||||
for (int k = 0; k < 100; k++) {
|
||||
if (dist > endProgress) break;
|
||||
colour += SampleEndCrystalBeam(start + dist * direction - startPos, beamDirection.x);
|
||||
dist += invHorizontalDirLen * stepSize;
|
||||
}
|
||||
return 3.0 * log(length(colour) * stepSize + 1.0) * normalize(colour + 0.0000001);
|
||||
}
|
||||
|
||||
float GetDragonDeathFactor(float dragonDeathTime) {
|
||||
return 0.02 * dragonDeathTime * exp(0.1 * dragonDeathTime);
|
||||
}
|
||||
|
||||
vec4 SampleDeathBuildup(vec3 relPos, float dragonDeathTime) {
|
||||
float effectFactor = GetDragonDeathFactor(dragonDeathTime);
|
||||
float effectRadius = death_radius * effectFactor;
|
||||
float sizeNoiseFactor = 1.0 + 0.3 * texture2DLod(noisetex, vec2(0.2, dragonDeathTime * 5.0 / noiseTextureResolution), 0.0).r;
|
||||
float centerDist = length(relPos) / effectRadius;
|
||||
relPos *= sizeNoiseFactor;
|
||||
float angle = centerDist * 5.0 / log(dragonDeathTime * 0.6 + 1.0);
|
||||
mat2 rotMat = mat2(
|
||||
cos(angle), sin(angle),
|
||||
-sin(angle), cos(angle)
|
||||
);
|
||||
relPos.xz = rotMat * relPos.xz;
|
||||
vec2 val = pow(fract(hash23(floor(0.8 * relPos + 2.7 * sign(relPos) * exp(0.3 * dragonDeathTime)))), vec2(40.0 * pow2(centerDist))) * (1.0 - centerDist);
|
||||
return 0.1 * (vec4(beamColM, 1.0) * (val.x + 0.4 * exp(-8.0 * pow2(centerDist))) + vec4(endDragonColM, 1.0) * (val.y + 0.1 * exp(-3.0 * pow2(centerDist))));
|
||||
}
|
||||
|
||||
vec4 DragonDeathAnimation(vec3 start, vec3 direction, vec3 dragonPos, float dragonDeathTime, float dragonDeathFactor, float dither) {
|
||||
float dirLen = length(direction);
|
||||
float closestProgress = dot(dragonPos - start, direction) / pow2(dirLen);
|
||||
vec4 colour = vec4(0);
|
||||
if (dragonDeathFactor >= 0.99) {
|
||||
float effectRadius = death_radius * GetDragonDeathFactor(dragonDeathTime);
|
||||
vec3 closestPos = start + closestProgress * direction;
|
||||
float closestDist = length(closestPos - dragonPos);
|
||||
if (closestDist >= effectRadius) return vec4(0.0);
|
||||
float stepSize = 0.5 / dirLen;
|
||||
float startProgress = closestProgress - sqrt(pow2(effectRadius) - pow2(closestDist)) / dirLen;
|
||||
float endProgress = min(1.0, 2.0 * closestProgress - startProgress);
|
||||
startProgress = max(0.0, startProgress);
|
||||
float dist = startProgress + stepSize * dither;
|
||||
for (int k = 0; k < 150; k++) {
|
||||
if (dist > endProgress) break;
|
||||
colour += SampleDeathBuildup(start + dist * direction - dragonPos, dragonDeathTime);
|
||||
dist += stepSize;
|
||||
}
|
||||
colour *= stepSize * dirLen;
|
||||
} else {
|
||||
vec3 closestPos = start + clamp(closestProgress, 0.0, 1.0) * direction;
|
||||
float closestDist = length(dragonPos - closestPos);
|
||||
colour = vec4(endDragonColM + 0.5 * beamColM, 1.0) * (0.4 * death_radius * (1.0 - exp(-dirLen/(4.0 * death_radius))) * exp(-10.0 * (1.0 - dragonDeathFactor) - closestDist * closestDist / (death_radius * death_radius)) * dragonDeathFactor);
|
||||
}
|
||||
return colour;
|
||||
}
|
||||
|
||||
vec4 EndCrystalVortices(vec3 start, vec3 direction, float dither) {
|
||||
vec4 color = vec4(0);
|
||||
#if END_CRYSTAL_VORTEX_INTERNAL / 2 == 1 || DRAGON_DEATH_EFFECT_INTERNAL > 0
|
||||
ivec4 rawDragonPos = ivec4(
|
||||
texelFetch(endcrystal_sampler, ivec2(35, 5), 0).r,
|
||||
texelFetch(endcrystal_sampler, ivec2(35, 6), 0).r,
|
||||
texelFetch(endcrystal_sampler, ivec2(35, 7), 0).r,
|
||||
texelFetch(endcrystal_sampler, ivec2(35, 8), 0).r
|
||||
);
|
||||
vec3 dragonPos = rawDragonPos.xyz != ivec3(0) ? 0.0001 * rawDragonPos.xyz : vec3(0.5, 80.5, 0.5) - cameraPosition;
|
||||
#endif
|
||||
#if END_CRYSTAL_VORTEX_INTERNAL / 2 == 1
|
||||
vec3[15] healBeamEndPositions;
|
||||
int isTarget = 0;
|
||||
int healBeamCount = 15;
|
||||
for (int k = 0; k < 15; k++) {
|
||||
ivec4 rawPos = ivec4(
|
||||
texelFetch(endcrystal_sampler, ivec2(20 + k, 5), 0).r,
|
||||
texelFetch(endcrystal_sampler, ivec2(20 + k, 6), 0).r,
|
||||
texelFetch(endcrystal_sampler, ivec2(20 + k, 7), 0).r,
|
||||
texelFetch(endcrystal_sampler, ivec2(20 + k, 8), 0).r
|
||||
);
|
||||
if (rawPos.w == 0) {
|
||||
healBeamCount = k;
|
||||
break;
|
||||
}
|
||||
healBeamEndPositions[k] = vec3(rawPos.xyz) / rawPos.w;
|
||||
isTarget |= (length(healBeamEndPositions[k].xz + cameraPosition.xz - 0.5) < 4.5 || length(dragonPos - healBeamEndPositions[k]) < 5.0) ? 1 << k : 0;
|
||||
}
|
||||
#endif
|
||||
#if END_CRYSTAL_VORTEX_INTERNAL % 2 == 1
|
||||
for (int k = 0; k < 20; k++) {
|
||||
if (texelFetch(endcrystal_sampler, ivec2(k, 8), 0).r <= 0) continue;
|
||||
ivec4 rawPos = ivec4(
|
||||
texelFetch(endcrystal_sampler, ivec2(k, 5), 0).r,
|
||||
texelFetch(endcrystal_sampler, ivec2(k, 6), 0).r,
|
||||
texelFetch(endcrystal_sampler, ivec2(k, 7), 0).r,
|
||||
texelFetch(endcrystal_sampler, ivec2(k, 8), 0).r
|
||||
);
|
||||
if (rawPos.w <= 0) {
|
||||
continue;
|
||||
}
|
||||
int age = texelFetch(endcrystal_sampler, ivec2(k, 9), 0).r;
|
||||
vec3 pos = rawPos.xyz * 0.0001;
|
||||
#if END_CRYSTAL_VORTEX_INTERNAL / 2 == 1
|
||||
for (int i = 0; i < healBeamCount; i++) {
|
||||
isTarget |= length(pos - healBeamEndPositions[i]) < 4.5 ? 1<<(i+15) : 0;
|
||||
}
|
||||
#endif
|
||||
vec2 state = vec2(clamp(rawPos.w / 15000.0, 0.0, 1.0), 1.00001 - exp(-0.0001 * age));
|
||||
if (length(pos) > min(shadowDistance, far) * 0.9 && state.x < 0.999) {
|
||||
state.y = state.x;
|
||||
state.x = 1.0;
|
||||
}
|
||||
vec4 thisVortexCol = pow2(SingleEndCrystalVortex(start, direction, pos, state, dither));
|
||||
color += thisVortexCol;
|
||||
}
|
||||
#endif
|
||||
#if END_CRYSTAL_VORTEX_INTERNAL / 2 == 1
|
||||
for (int k = 0; k < healBeamCount; k++) {
|
||||
for (int l = k+1; l < healBeamCount; l++) {
|
||||
if (
|
||||
((isTarget >> k & 1) == 0 ^^ (isTarget >> l & 1) == 0)
|
||||
#if END_CRYSTAL_VORTEX_INTERNAL % 2 == 1
|
||||
&& ((isTarget >> k + 15 & 1) == 0 ^^ (isTarget >> l + 15 & 1) == 0)
|
||||
#endif
|
||||
) {
|
||||
vec3 pos0 = healBeamEndPositions[k];
|
||||
vec3 pos1 = healBeamEndPositions[l];
|
||||
if (pos0.y > pos1.y) {
|
||||
vec3 tmp = pos0;
|
||||
pos0 = pos1;
|
||||
pos1 = tmp;
|
||||
}
|
||||
color += pow2(EndCrystalBeam(start, direction, pos0, pos1, dither));
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#if DRAGON_DEATH_EFFECT_INTERNAL > 0
|
||||
int isDying = texelFetch(endcrystal_sampler, ivec2(35, 0), 0).r;
|
||||
float dragonDeathTime = 0.0001 * rawDragonPos.w;
|
||||
float dragonDeathFactor = 0.0001 * isDying;
|
||||
// dragonDeathTime = mod(frameTimeCounter, 22.0);
|
||||
// dragonDeathFactor = 2.2 - 0.1 * dragonDeathTime;
|
||||
// dragonPos = vec3(0, 80, 0) - cameraPosition;
|
||||
if (dragonDeathFactor > 0.001) {
|
||||
color += pow2(DragonDeathAnimation(start, direction, dragonPos, dragonDeathTime, dragonDeathFactor, dither));
|
||||
}
|
||||
#endif
|
||||
return sqrt(color) * (1.0 - maxBlindnessDarkness);
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
vec3 DrawEndFlash(vec3 nViewPos, float VdotU, float dither) {
|
||||
vec3 worldEndFlashPosition = mat3(gbufferModelViewInverse) * endFlashPosition;
|
||||
worldEndFlashPosition = normalize(worldEndFlashPosition);
|
||||
vec3 nViewPosWorld = mat3(gbufferModelViewInverse) * nViewPos;
|
||||
nViewPosWorld = normalize(nViewPosWorld);
|
||||
|
||||
vec3 horizontalEndPos = normalize(vec3(worldEndFlashPosition.x, 0.0, worldEndFlashPosition.z));
|
||||
vec3 horizontalViewPos = normalize(vec3(nViewPosWorld.x, 0.0, nViewPosWorld.z));
|
||||
float horizDirFactor = pow(max0(dot(horizontalEndPos, horizontalViewPos)), 0.2);
|
||||
|
||||
float dirFactor = pow(max0(dot(worldEndFlashPosition, nViewPosWorld)), 10.0);
|
||||
|
||||
float verticalDist = abs(nViewPosWorld.y - worldEndFlashPosition.y);
|
||||
float verticalFalloff = exp(-pow2(verticalDist * 5.5));
|
||||
|
||||
float endFlashFactor = endFlashIntensity * dirFactor * verticalFalloff;
|
||||
|
||||
if (endFlashFactor < 0.001) return vec3(0.0);
|
||||
|
||||
float time = frameTimeCounter * 0.05;
|
||||
float pulse = sin(time * 3.0) * 0.5 + 0.5;
|
||||
|
||||
vec2 noiseCoord = horizontalViewPos.xz * 0.5 + time * 0.05;
|
||||
float noise1 = texture2DLod(noisetex, noiseCoord, 0).r;
|
||||
float noise2 = texture2DLod(noisetex, noiseCoord * 2.7 - time * 0.17, 0).g;
|
||||
float noise3 = texture2DLod(noisetex, noiseCoord * 0.5 + time * 0.05, 0).b;
|
||||
|
||||
float rayFactor = pow(noise1 * noise2, 1.5) * 2.0;
|
||||
|
||||
float stripeFactor = pow(horizDirFactor, 2.0 + 4.0 * pulse);
|
||||
|
||||
// Inner core and wave animations
|
||||
float radius = 1.0 + sin(time * 2.0) * 0.1;
|
||||
float distFromCenter = length(dot(horizontalEndPos, horizontalViewPos));
|
||||
float waveFront = smoothstep(0.0, 0.2, 1.0 - abs(distFromCenter - radius) * (4.0 + pulse * 4.0));
|
||||
float core = pow(horizDirFactor, 1.0 + pulse * 2.0) * (1.0 + noise3 * 0.5);
|
||||
|
||||
float flashIntensity = mix(core, waveFront, 0.5) * endFlashFactor * (0.6 + rayFactor * 0.8);
|
||||
flashIntensity *= stripeFactor;
|
||||
|
||||
vec3 orangeColor = mix(endOrangeCol, vec3(1.0), 0.3) * (1.2 + noise2 * 1.3);
|
||||
|
||||
vec3 finalColor = saturateColors(orangeColor, 0.8) * flashIntensity * 0.7;
|
||||
|
||||
return finalColor;
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
#ifndef ENDCRYSTAL_SAMPLER_DEFINE
|
||||
uniform isampler2D endcrystal_sampler;
|
||||
#endif
|
||||
|
||||
vec2 RayAABoxIntersection(vec2 start, vec2 dir, vec2 lower, vec2 upper) {
|
||||
dir += 0.000001 * vec2(equal(dir, vec2(0)));
|
||||
vec2 front = mix(upper, lower, 0.5 * sign(dir) + 0.5);
|
||||
vec2 back = mix(lower, upper, 0.5 * sign(dir) + 0.5);
|
||||
vec2 front_iscts = (front - start) / dir;
|
||||
vec2 back_iscts = (back - start) / dir;
|
||||
float front_isct = max(front_iscts.x, front_iscts.y);
|
||||
float back_isct = min(back_iscts.x , back_iscts.y );
|
||||
return front_isct < back_isct ? vec2(front_isct, back_isct) : vec2(-1);
|
||||
}
|
||||
|
||||
vec4 GetEndPortalBeamNoise(vec3 relPos) {
|
||||
float colMixFactor = texture2DLod(noisetex, (relPos.xz + 0.1 * frameTimeCounter * vec2(-0.5, 1.5)) * 10.0 / noiseTextureResolution, 0.0).r;
|
||||
float strengthMul = texture2DLod(noisetex, (relPos.xz + 0.1 * frameTimeCounter * vec2(1.5, -1.0)) * 5.0 / noiseTextureResolution + 0.2, 0.0).r;
|
||||
colMixFactor = pow2(pow2(colMixFactor));
|
||||
strengthMul = pow2(strengthMul);
|
||||
vec3 col = mix(vec3(0.1137, 0.5569, 0.5255), vec3(0.3725, 0.8863, 0.749), colMixFactor);
|
||||
float strength
|
||||
= float(relPos.y > 0 && relPos.y < 2)
|
||||
* (2 - relPos.y)
|
||||
/ (3 * relPos.y*relPos.y*relPos.y + 1)
|
||||
* (strengthMul + 0.5);
|
||||
return pow2(vec4(col, 1) * strength);
|
||||
}
|
||||
|
||||
vec4 GetEndPortalBeam(vec3 start, vec3 dir) {
|
||||
if (texelFetch(endcrystal_sampler, ivec2(35, 4), 0).r == 1) {
|
||||
ivec4 rawPortalPos = ivec4(
|
||||
texelFetch(endcrystal_sampler, ivec2(35, 5), 0).r,
|
||||
texelFetch(endcrystal_sampler, ivec2(35, 6), 0).r,
|
||||
texelFetch(endcrystal_sampler, ivec2(35, 7), 0).r,
|
||||
texelFetch(endcrystal_sampler, ivec2(35, 8), 0).r
|
||||
);
|
||||
if (rawPortalPos.w > 0) {
|
||||
vec3 portalPos = floor(vec3(rawPortalPos.xyz) / max(1, rawPortalPos.w) + 0.5) + 0.5 - cameraPositionFract;
|
||||
vec2 iscts = RayAABoxIntersection(start.xz, dir.xz, portalPos.xz - 1.49, portalPos.xz + 1.49);
|
||||
int validIsctCount = 0;
|
||||
vec3[2] isctPositions;
|
||||
for (int k = 0; k < 2; k++) {
|
||||
if (iscts[k] > 0.0 && iscts[k] < 1.0) {
|
||||
isctPositions[validIsctCount++] = start + iscts[k] * dir;
|
||||
}
|
||||
}
|
||||
vec4 col = vec4(0.0);
|
||||
for (int k = 0; k < validIsctCount; k++) {
|
||||
col += GetEndPortalBeamNoise(isctPositions[k] - portalPos);
|
||||
}
|
||||
|
||||
vec3 absDir = abs(dir);
|
||||
float maxDir = max(absDir.x, max(absDir.y, absDir.z));
|
||||
float transition = 1.0 - pow3(min1(maxDir / mix(40, 10, maxBlindnessDarkness) * 2.0)); // fade to 0 when close to the range limit (32 blocks)
|
||||
|
||||
col *= transition;
|
||||
|
||||
return col;
|
||||
}
|
||||
}
|
||||
return vec4(0.0);
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
#ifndef INCLUDE_ENDER_BEAMS
|
||||
#define INCLUDE_ENDER_BEAMS
|
||||
|
||||
#include "/lib/colors/lightAndAmbientColors.glsl"
|
||||
|
||||
vec2 wind = vec2(syncedTime * 0.00);
|
||||
|
||||
float BeamNoise(vec2 planeCoord, vec2 wind) {
|
||||
float noise = texture2DLod(noisetex, planeCoord * 0.175 - wind * 0.0625, 0.0).b;
|
||||
noise+= texture2DLod(noisetex, planeCoord * 0.04375 + wind * 0.0375, 0.0).b * 5.0;
|
||||
|
||||
return noise;
|
||||
}
|
||||
|
||||
vec3 DrawEnderBeams(float VdotU, vec3 playerPos, vec3 nViewPos) {
|
||||
int sampleCount = 8;
|
||||
float beamMult = 1.0;
|
||||
float beamPow = 3.0;
|
||||
float beamPurpleReducer = vlFactor;
|
||||
float beamOrangeIncreaser = vlFactor;
|
||||
|
||||
float VdotUM = 1.0 - pow2(VdotU);
|
||||
float VdotUM2 = sqrt(VdotUM) + 0.15 * smoothstep1(pow2(pow2(1.0 - abs(VdotU))));
|
||||
|
||||
#if defined IS_IRIS && MC_VERSION >= 12109 && EP_END_FLASH % 2 == 0
|
||||
vec3 worldEndFlashPosition = mat3(gbufferModelViewInverse) * endFlashPosition;
|
||||
worldEndFlashPosition = normalize(vec3(worldEndFlashPosition.x, 0.0, worldEndFlashPosition.z));
|
||||
vec3 nViewPosWorld = mat3(gbufferModelViewInverse) * nViewPos;
|
||||
vec3 nViewPosWorldM = normalize(vec3(nViewPosWorld.x, 0.0, nViewPosWorld.z));
|
||||
|
||||
float endFlashDirectionFactor = pow(max0(dot(worldEndFlashPosition, nViewPosWorldM)), 12.0);
|
||||
float endFlashFactor = endFlashIntensity * endFlashDirectionFactor;
|
||||
|
||||
beamOrangeIncreaser = mix(beamOrangeIncreaser, 1.0, endFlashFactor);
|
||||
beamPurpleReducer = mix(beamPurpleReducer, 1.6, endFlashFactor);
|
||||
beamPow = mix(beamPow, 0.7, endFlashFactor * (pow(VdotUM, 8.0) * 0.75 + 0.25 * pow(1.0 - abs(VdotU) * 0.1 - 0.9 * pow2(VdotU), 30.0)));
|
||||
//beamPow = max(beamPow, 0.0001); // fix NaNs
|
||||
VdotUM = mix(VdotUM, sqrt2(VdotUM), endFlashFactor);
|
||||
#endif
|
||||
|
||||
vec3 beamPurple = normalize(endColorBeam * endColorBeam * endColorBeam) * (2.5 - beamPurpleReducer) * E_BEAM_I;
|
||||
vec3 beamOrange = endOrangeCol * (300.0 + 700.0 * beamOrangeIncreaser);
|
||||
|
||||
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);
|
||||
#ifndef BEAMS_NEAR_PLAYER
|
||||
noise = max(0.75 - 1.0 / abs(noise - (4.0 + VdotUM * 2.0)), 0.0) * 3.0;
|
||||
#else
|
||||
noise = max(0.75 - 1.0 / abs(noise - (4.0 + dot(upVec, upVec) * 2.0)), 0.0) * 3.0;
|
||||
#endif
|
||||
|
||||
|
||||
if (noise > 0.0) {
|
||||
noise *= 0.65;
|
||||
float fireNoise = texture2DLod(noisetex, abs(planeCoord * 0.2) - wind, 0.0).b;
|
||||
noise *= 0.5 * fireNoise + 0.75;
|
||||
//noise = max0(noise); // fix NaNs
|
||||
noise = pow(noise, 1.75) * 2.9 / sampleCount;
|
||||
#ifndef BEAMS_NEAR_PLAYER
|
||||
noise *= VdotUM2;
|
||||
#endif
|
||||
|
||||
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;
|
||||
}
|
||||
#ifdef RAIN_ATMOSPHERE
|
||||
beams.rgb += 0.2 * isLightningActive();
|
||||
#endif
|
||||
beamMult *= pow(beams.a, beamPow) * 3.5;
|
||||
beams.rgb = sqrt(beams.rgb) * beamMult;
|
||||
|
||||
if(any(isnan(beams.rgb))) beams.rgb = vec3(0.0);
|
||||
|
||||
return beams.rgb;
|
||||
}
|
||||
|
||||
#endif //INCLUDE_ENDER_BEAMS
|
||||
@@ -0,0 +1,48 @@
|
||||
#include "/lib/shaderSettings/enderStars.glsl"
|
||||
vec3 GetEnderStars(vec3 viewPos, float VdotU, float sizeMult, float starAmount) {
|
||||
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 / (END_STAR_SIZE * sizeMult);
|
||||
starCoord2 += VdotU < 0.0 ? 100.0 : 0.0;
|
||||
|
||||
const float starFactor = 1024.0;
|
||||
vec2 fractPart = fract(starCoord2 * starFactor);
|
||||
starCoord2 = floor(starCoord2 * starFactor) / starFactor;
|
||||
|
||||
float star = GetStarNoise(starCoord2.xy) * GetStarNoise(starCoord2.xy+0.1) * GetStarNoise(starCoord2.xy+0.23);
|
||||
|
||||
#if END_STAR_AMOUNT == 0
|
||||
star = max0(star - 0.77);
|
||||
#elif END_STAR_AMOUNT == 2
|
||||
star = max0((star + 0.15) * 0.9 - 0.7);
|
||||
#elif END_STAR_AMOUNT == 3
|
||||
star = max0((star + 0.4) * 0.8 - 0.7);
|
||||
#elif END_STAR_AMOUNT == 4
|
||||
star = max0((star + 0.5) * 0.8 - 0.7);
|
||||
#else
|
||||
star = max0(star - 0.7);
|
||||
#endif
|
||||
|
||||
star *= getStarEdgeFactor(fractPart, STAR_ROUNDNESS_END / 10.0, STAR_SOFTNESS_END);
|
||||
star = max0(star - starAmount * 0.1);
|
||||
star *= star;
|
||||
|
||||
vec3 starColor = GetStarColor(starCoord2,
|
||||
endSkyColor,
|
||||
vec3(STAR_COLOR_1_END_R, STAR_COLOR_1_END_G, STAR_COLOR_1_END_B),
|
||||
vec3(STAR_COLOR_2_END_R, STAR_COLOR_2_END_G, STAR_COLOR_2_END_B),
|
||||
vec3(STAR_COLOR_3_END_R, STAR_COLOR_3_END_G, STAR_COLOR_3_END_B),
|
||||
float(STAR_COLOR_VARIATION_END));
|
||||
|
||||
vec3 enderStars = star * starColor * 3000.0 * END_STAR_BRIGHTNESS;
|
||||
|
||||
float VdotUM1 = abs(VdotU);
|
||||
float VdotUM2 = pow2(1.0 - VdotUM1);
|
||||
enderStars *= VdotUM1 * VdotUM1 * (VdotUM2 + 0.015) + 0.015;
|
||||
|
||||
#if END_TWINKLING_STARS > 0
|
||||
enderStars *= getTwinklingStars(starCoord2, float(END_TWINKLING_STARS));
|
||||
#endif
|
||||
|
||||
return enderStars;
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
#include "/lib/shaderSettings/bloom.glsl"
|
||||
#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;
|
||||
#else
|
||||
float bloomFog = 0.0;
|
||||
float bloomFogMult = 0.0;
|
||||
#endif
|
||||
|
||||
bloomFogMult *= BLOOM_STRENGTH * 8.33333;
|
||||
|
||||
return 1.0 + bloomFog * bloomFogMult;
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
#ifndef INCLUDE_CAVE_FACTOR
|
||||
#define INCLUDE_CAVE_FACTOR
|
||||
#define CAVE_FOG_R_NEW 0.13 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.20 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.30 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.40 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.50 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.60 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 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]
|
||||
#define CAVE_FOG_G_NEW 0.13 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.20 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.30 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.40 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.50 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.60 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 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]
|
||||
#define CAVE_FOG_B_NEW 0.15 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.20 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.30 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.40 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.50 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.60 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 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]
|
||||
#define CAVE_FOG_I 1.00 //[0.20 0.25 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.0]
|
||||
|
||||
float GetCaveFactor() {
|
||||
return clamp(1.0 - cameraPosition.y / oceanAltitude, 0.0, 1.0 - eyeBrightnessM);
|
||||
}
|
||||
|
||||
vec3 caveFogColorRaw = vec3(CAVE_FOG_R_NEW, CAVE_FOG_G_NEW, CAVE_FOG_B_NEW) * CAVE_FOG_I;
|
||||
#if CAVE_LIGHTING < 100
|
||||
vec3 caveFogColor = caveFogColorRaw * 0.7;
|
||||
#elif CAVE_LIGHTING == 100
|
||||
vec3 caveFogColor = caveFogColorRaw * (0.7 + 0.3 * vsBrightness); // Default
|
||||
#elif CAVE_LIGHTING > 100
|
||||
vec3 caveFogColor = caveFogColorRaw;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
vec3 GetColoredLightFog(vec3 nPlayerPos, vec3 translucentMult, float lViewPos, float lViewPos1, float dither, float vlFactor) {
|
||||
vec3 lightFog = vec3(0.0);
|
||||
|
||||
float stepMult = 8.0;
|
||||
|
||||
#ifdef CAVE_SMOKE
|
||||
float caveFactor = GetCaveFactor() * (1.0 - clamp01(isEyeInWater));
|
||||
#endif
|
||||
|
||||
float maxDist = min(effectiveACTdistance * 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++) {
|
||||
tracePos += traceAdd;
|
||||
|
||||
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;
|
||||
|
||||
#if defined END && END_CENTER_LIGHTING > 0 && MC_VERSION >= 10900 && defined END_CENTER_LIGHTING_AFFECT_BLOCKLIGHT
|
||||
vec3 endCenterCol = saturateColors(vec3(END_CENTER_LIGHTING_R, END_CENTER_LIGHTING_G, END_CENTER_LIGHTING_B), 1.1);
|
||||
vec3 endCenterPos = vec3(0.5, 60.5, 0.5) - (tracePos + cameraPositionBest);
|
||||
endCenterPos.y *= 0.66; // Make it a pill-shaped point light
|
||||
float rawDistance = length(endCenterPos);
|
||||
float endCenterLightDist = exp(-rawDistance * 0.62) * 100;
|
||||
lightSample = mix(lightSample, clamp01(saturateColors(endCenterCol, 1.3)), clamp01(endCenterLightDist) * (1.0 - vlFactor));
|
||||
#endif
|
||||
|
||||
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));
|
||||
|
||||
#ifdef CAVE_SMOKE
|
||||
if (caveFactor > 0.00001) {
|
||||
vec3 smokePos = 0.0025 * (tracePos + cameraPosition);
|
||||
vec3 smokeWind = frameTimeCounter * vec3(0.006, 0.003, 0.0);
|
||||
float smoke = Noise3D(smokePos + smokeWind)
|
||||
* Noise3D(smokePos * 3.0 - smokeWind)
|
||||
* Noise3D(smokePos * 9.0 + smokeWind);
|
||||
smoke = smoothstep1(smoke);
|
||||
lightSample *= mix(1.0, smoke * 16.0, caveFactor);
|
||||
lightSample += caveFogColor * pow2(smoke) * 0.05 * caveFactor;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (lTracePos > lViewPos) lightSample *= translucentMult;
|
||||
lightFog += lightSample;
|
||||
}
|
||||
|
||||
#ifdef NETHER
|
||||
lightFog *= netherColor * 5.0;
|
||||
#endif
|
||||
|
||||
lightFog *= 1.0 - maxBlindnessDarkness;
|
||||
lightFog = pow(lightFog / sampleCount, vec3(0.25));
|
||||
|
||||
return lightFog;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
#if !defined END_CENTER_FOG
|
||||
#define END_CENTER_FOG
|
||||
float doEndCenterFog(vec3 ro, vec3 rayDir, float wsdist, float falloff) { // Thanks to FoZy STYLE
|
||||
vec3 d = ro - vec3(0.5, 60.5, 0.5); // Light source vector
|
||||
d.y *= 0.7;
|
||||
rayDir.y *= 0.7;
|
||||
|
||||
float a = falloff * dot(rayDir, rayDir);
|
||||
float b = 2.0 * falloff * dot(rayDir, d);
|
||||
float c = 1.0 + falloff * dot(d, d);
|
||||
|
||||
float sqrtDiscr = max(0.001, sqrt(4.0 * a * c - b * b));
|
||||
float upper = (2.0 * a * wsdist + b) / sqrtDiscr;
|
||||
float lower = b / sqrtDiscr;
|
||||
|
||||
return 2.0 * (atan(upper) - atan(lower)) / sqrtDiscr;
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,277 @@
|
||||
#include "/lib/shaderSettings/mainFog.glsl"
|
||||
#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 || defined END
|
||||
#include "/lib/colors/skyColors.glsl"
|
||||
#endif
|
||||
|
||||
void DoBorderFog(inout vec4 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(-BORDER_FOG_DISTANCE_OVERWORLD * fog);
|
||||
#endif
|
||||
#ifdef NETHER
|
||||
float farM = min(renderDistance, NETHER_VIEW_LIMIT); // consistency9023HFUE85JG
|
||||
float fog = lPos / farM;
|
||||
fog = fog * 0.3 + 0.7 * pow(fog * BORDER_FOG_DISTANCE_NETHER / 3, 256.0 / max(farM, 256.0));
|
||||
#endif
|
||||
#ifdef END
|
||||
float fog = lPos / renderDistance;
|
||||
fog = pow2(pow2(fog));
|
||||
fog = 1.0 - exp(-BORDER_FOG_DISTANCE_END * fog);
|
||||
#endif
|
||||
|
||||
#ifdef IRIS_FEATURE_FADE_VARIABLE
|
||||
#if defined GBUFFERS_WATER || defined DEFERRED1
|
||||
float chunkFadeM = mix(1.0, chunkFade, pow2(clamp01(lPos * 0.015))); // don't do fade very close to the player
|
||||
fog = mix(1.0, fog, chunkFadeM);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
if (fog > 0.0) {
|
||||
fog = clamp(fog, 0.0, 1.0);
|
||||
|
||||
#ifdef OVERWORLD
|
||||
vec3 fogColorM = GetSky(VdotU, VdotS, dither, true, false);
|
||||
#define BORDER_FOG_DENSITY BORDER_FOG_DENSITY_OVERWORLD
|
||||
#elif defined NETHER
|
||||
vec3 fogColorM = netherColor;
|
||||
#define BORDER_FOG_DENSITY BORDER_FOG_DENSITY_NETHER
|
||||
#else
|
||||
vec3 fogColorM = endSkyColor;
|
||||
#define BORDER_FOG_DENSITY BORDER_FOG_DENSITY_END
|
||||
#endif
|
||||
|
||||
#ifdef ATM_COLOR_MULTS
|
||||
fogColorM *= atmColorMult;
|
||||
#endif
|
||||
#ifdef MOON_PHASE_INF_ATMOSPHERE
|
||||
fogColorM *= moonPhaseInfluence;
|
||||
#endif
|
||||
|
||||
fog *= BORDER_FOG_DENSITY;
|
||||
color = mix(color, vec4(fogColorM, 0.0), 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 vec4 color, float lViewPos) {
|
||||
float fog = GetCaveFactor() * (0.9 - 0.9 * exp(- lViewPos * 0.015 * CAVE_FOG_DENSITY));
|
||||
|
||||
color = mix(color, vec4(caveFogColor, 0.0), 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) {
|
||||
vec3 atmFogColor = vec3(ATMOSPHERIC_FOG_R_NEW, ATMOSPHERIC_FOG_G_NEW, ATMOSPHERIC_FOG_B_NEW) * ATMOSPHERIC_FOG_I;
|
||||
#ifdef RADIOACTIVE_ATMOSPHERIC_FOG
|
||||
atmFogColor *= GetLuminance(atmFogColor) * 10;
|
||||
#endif
|
||||
|
||||
float nightFogMult = 2.5 - 0.625 * max(pow2(pow2(altitudeFactorRaw)), rainFactor);
|
||||
float dayNightFogBlend = pow(invNightFactor, 4.0 - VdotS - 2.5 * sunVisibility2);
|
||||
return atmFogColor * mix(
|
||||
nightUpSkyColor * (nightFogMult - dayNightFogBlend * nightFogMult),
|
||||
dayDownSkyColor * (0.9 + 0.3 * 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 vec4 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
|
||||
|
||||
float atmFogA = 1.0;
|
||||
atmFogA *= ATMOSPHERIC_FOG_DENSITY * ATM_FOG_MULT;
|
||||
fog *= atmFogA - 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 (isEyeInWater == 0) {
|
||||
#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
|
||||
fogFactor *= 0.5 + 0.5 * sunVisibility;
|
||||
|
||||
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, vec4(fogColorM, 0.0), fog);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#include "/lib/atmospherics/fog/waterFog.glsl"
|
||||
|
||||
void DoWaterFog(inout vec4 color, float lViewPos) {
|
||||
float fog = GetWaterFog(lViewPos);
|
||||
color = mix(color, vec4(waterFogColor, 0), fog);
|
||||
}
|
||||
|
||||
void DoLavaFog(inout vec4 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, vec4(fogColor * 5.0, 0.0), fog);
|
||||
}
|
||||
|
||||
void DoPowderSnowFog(inout vec4 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, vec4(fogColor, 0.0), fog);
|
||||
}
|
||||
|
||||
void DoBlindnessFog(inout vec4 color, float lViewPos) {
|
||||
float fog = lViewPos * 0.3 * blindness;
|
||||
fog *= fog;
|
||||
fog = 1.0 - exp(-fog);
|
||||
|
||||
fog = clamp(fog, 0.0, 1.0);
|
||||
color *= 1.0 - fog;
|
||||
}
|
||||
|
||||
void DoDarknessFog(inout vec4 color, float lViewPos) {
|
||||
float fog = lViewPos * 0.075 * darknessFactor;
|
||||
fog *= fog;
|
||||
fog *= fog;
|
||||
color *= exp(-fog);
|
||||
}
|
||||
|
||||
void DoFog(inout vec4 color, inout float skyFade, float lViewPos, vec3 playerPos, float VdotU, float VdotS, float dither, bool isReflection, float lBlockPos) {
|
||||
#ifdef CAVE_FOG
|
||||
DoCaveFog(color, lViewPos);
|
||||
#endif
|
||||
#ifdef ATMOSPHERIC_FOG
|
||||
float lViewPosAtm = lViewPos;
|
||||
// Reduce fog if the reflecting block is already behind fog, and fogging the reflection would result in too much fog
|
||||
if (isReflection) lViewPosAtm *= 0.2 + 0.8 * sqrt1(max0(1.0 - lBlockPos / lViewPos));
|
||||
DoAtmosphericFog(color, playerPos, lViewPosAtm, 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);
|
||||
}
|
||||
@@ -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
|
||||
@@ -0,0 +1,43 @@
|
||||
vec3 GetNetherNoise(vec3 viewPos, float VdotU, float dither) {
|
||||
float visibility = clamp01(VdotU * 1.875 - 0.225);
|
||||
visibility *= 1.0 - VdotU * 0.75 - maxBlindnessDarkness;
|
||||
|
||||
if (visibility > 0.0) {
|
||||
vec3 spots = vec3(0.0);
|
||||
|
||||
float eyeAltitude1 = eyeAltitude * 0.005;
|
||||
float noiseHeightFactor = max(0.0, 1.5 - eyeAltitude1 / (eyeAltitude1 + 1.0));
|
||||
noiseHeightFactor *= noiseHeightFactor;
|
||||
float noiseHeight = noiseHeightFactor * 0.5;
|
||||
|
||||
vec3 wpos = (gbufferModelViewInverse * vec4(viewPos, 1.0)).xyz;
|
||||
wpos.xz /= wpos.y;
|
||||
|
||||
vec2 cameraPositionM = cameraPosition.xz * 0.0075;
|
||||
cameraPositionM.x += frameTimeCounter * 0.004;
|
||||
|
||||
int sampleCount = 10;
|
||||
int sampleCountP = sampleCount + 5;
|
||||
float ditherM = dither + 5.0;
|
||||
float wind = fract(frameTimeCounter * 0.0125);
|
||||
for (int i = 0; i < sampleCount; i++) {
|
||||
float current = pow2((i + ditherM) / sampleCountP);
|
||||
|
||||
vec2 planePos = wpos.xz * (0.8 + current) * noiseHeight;
|
||||
planePos = (planePos * 0.5 + cameraPositionM * 0.5) * 1.5;
|
||||
float noiseSpots = texture2DLod(noisetex, planePos * 0.5, 0.0).g;
|
||||
vec3 noise = texture2DLod(noisetex, vec2(noiseSpots) + wind, 0.0).g * netherColor * 2.5 - netherColor * 1.3;
|
||||
|
||||
float currentM = 1.0 - current;
|
||||
spots += noise * currentM * 6.0;
|
||||
}
|
||||
|
||||
#ifdef RAIN_ATMOSPHERE
|
||||
spots += 2.0 * isLightningActive();
|
||||
#endif
|
||||
|
||||
return spots * visibility / sampleCount;
|
||||
}
|
||||
|
||||
return vec3(0.0);
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
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;
|
||||
}
|
||||
|
||||
#ifdef RAIN_ATMOSPHERE
|
||||
vec3 lightningPos = getLightningPos(tracePos - cameraPosition, lightningBoltPosition.xyz, false);
|
||||
vec2 lightningAdd = lightningFlashEffect(lightningPos, vec3(1.0), 150.0, 0.0, 0) * isLightningActive() * 8.0;
|
||||
netherStorm.rgb += lightningAdd.y;
|
||||
#endif
|
||||
|
||||
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;
|
||||
}
|
||||
@@ -0,0 +1,199 @@
|
||||
#include "/lib/atmospherics/stars.glsl"
|
||||
|
||||
// Nebula implementation by flytrap https://godotshaders.com/shader/2d-nebula-shader/
|
||||
#include "/lib/shaderSettings/stars.glsl"
|
||||
#include "/lib/shaderSettings/nightNebula.glsl"
|
||||
|
||||
#ifndef HQ_NIGHT_NEBULA
|
||||
const int OCTAVE = 5;
|
||||
#else
|
||||
const int OCTAVE = 8;
|
||||
#endif
|
||||
|
||||
const float timescale = 5.0;
|
||||
const float zoomScale = NEBULA_ZOOM_LEVEL;
|
||||
|
||||
const vec4 CLOUD1_COL = vec4(NEBULA_R_1, NEBULA_G_1, NEBULA_B_1, 0.4);
|
||||
const vec4 CLOUD2_COL = vec4(NEBULA_R_2, NEBULA_G_2, NEBULA_B_2, 0.2);
|
||||
const vec4 CLOUD3_COL = vec4(NEBULA_R_3, NEBULA_G_3, NEBULA_B_3, 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 = NEBULA_AMOUNT * 0.1 + 0.45;
|
||||
|
||||
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 = (NEBULA_AMOUNT + 0.1) * 0.25 + 0.35;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
vec2 warpCoords(vec2 coord, float warpAmount) {
|
||||
float angle = perlin(coord * 0.5) * 6.28318 * warpAmount;
|
||||
float strength = perlin(coord * 0.7 + 0.5) * warpAmount;
|
||||
vec2 offset = vec2(cos(angle), sin(angle)) * strength;
|
||||
return coord + offset;
|
||||
}
|
||||
|
||||
vec3 GetNightNebula(vec3 viewPos, float VdotU, float VdotS) {
|
||||
float VdotUFactor = max0(VdotU);
|
||||
float starsAroundSun = 1.0;
|
||||
#ifdef CELESTIAL_BOTH_HEMISPHERES
|
||||
VdotUFactor = VdotU;
|
||||
#ifdef SUN_MOON_HORIZON
|
||||
starsAroundSun = max0(sign(VdotU));
|
||||
#endif
|
||||
#endif
|
||||
float originalVdotUFactor = VdotUFactor;
|
||||
float horizonPower = NEBULA_HORIZON_STRENGTH * 0.05 + 0.5;
|
||||
|
||||
#if NEBULA_HORIZON_STRENGTH < 10
|
||||
VdotUFactor = pow(VdotUFactor, horizonPower);
|
||||
#endif
|
||||
|
||||
float nebulaFactor = pow2(VdotUFactor * min1(nightFactor * 2.0));
|
||||
|
||||
#if NEBULA_HORIZON_STRENGTH < 10
|
||||
float brightnessCompensation = 1.0 - (1.0 - horizonPower) * 0.5 * max0(originalVdotUFactor);
|
||||
nebulaFactor *= brightnessCompensation;
|
||||
#endif
|
||||
|
||||
#ifdef CLEAR_SKY_WHEN_RAINING
|
||||
nebulaFactor *= min1(invRainFactor + 0.4);
|
||||
#else
|
||||
nebulaFactor *= invRainFactor;
|
||||
#endif
|
||||
|
||||
nebulaFactor -= maxBlindnessDarkness;
|
||||
|
||||
#if NEBULA_MOON_CONDITION == 1
|
||||
if (moonPhase != 4) return vec3(0.0);
|
||||
#elif NEBULA_MOON_CONDITION == 2
|
||||
if (moonPhase != 0) return vec3(0.0);
|
||||
#elif NEBULA_MOON_CONDITION == 3
|
||||
if (moonPhase == 0 || moonPhase == 4) return vec3(0.0);
|
||||
#elif NEBULA_MOON_CONDITION == 4
|
||||
nebulaFactor *= step(0.5, hash11(float(worldDay) + float(moonPhase) * 37.0));
|
||||
#elif NEBULA_MOON_CONDITION == 5
|
||||
nebulaFactor *= clamp01(max(moonPhase, 1) % 4);
|
||||
#endif
|
||||
|
||||
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;
|
||||
|
||||
float sinTime = sinM(0.07 * timescaled);
|
||||
float cosTime06 = cosM(0.06 * timescaled);
|
||||
float cosTime07 = 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));
|
||||
|
||||
#if PIXELATED_NEBULA > 0
|
||||
float pixelFactor = PIXELATED_NEBULA * 2.0;
|
||||
vec2 baseUV = floor(UV * pixelFactor) / pixelFactor;
|
||||
#else
|
||||
vec2 baseUV = UV;
|
||||
#endif
|
||||
|
||||
vec2 scaledUV = baseUV * zoomScale;
|
||||
vec2 cloudUV2 = vec2(scaledUV.x + 0.03 * timescaled * sinTime, scaledUV.y + 0.03 * timescaled * cosTime06);
|
||||
vec2 cloudUV3 = vec2(scaledUV.x + 0.027 * timescaled * sinTime, scaledUV.y + 0.025 * timescaled * cosTime06);
|
||||
vec2 cloudUV4 = vec2(scaledUV.x + 0.021 * timescaled * sinTime, scaledUV.y + 0.021 * timescaled * cosTime07);
|
||||
|
||||
#if NEBULA_PATTERN_WARP > 0
|
||||
cloudUV2 = warpCoords(cloudUV2, NEBULA_PATTERN_WARP * 0.1);
|
||||
cloudUV3 = warpCoords(cloudUV3, NEBULA_PATTERN_WARP * 0.1);
|
||||
cloudUV4 = warpCoords(cloudUV4, NEBULA_PATTERN_WARP * 0.1);
|
||||
#endif
|
||||
|
||||
nebulaTexture += fbmCloud2(cloudUV3, 0.24 + tide) * CLOUD1_COL;
|
||||
nebulaTexture += fbmCloud(cloudUV2 * 0.9, 0.33 - tide) * CLOUD2_COL;
|
||||
nebulaTexture = mix(nebulaTexture, CLOUD3_COL, fbmCloud(vec2(0.9 * cloudUV4.x, 0.9 * cloudUV4.y), 0.25 + tide2));
|
||||
|
||||
nebulaFactor *= 1.0 - pow2(pow2(pow2(abs(VdotS)))) * starsAroundSun;
|
||||
nebulaTexture.a *= min1(pow2(pow2(nebulaTexture.a))) * nebulaFactor;
|
||||
|
||||
float starFactor = 1024.0;
|
||||
UV /= STAR_SIZE * (0.75 + 0.25 * NEBULA_STAR_SIZE);
|
||||
vec2 starCoord = floor(UV * 0.25 * starFactor) / starFactor;
|
||||
vec2 fractPart = fract(UV * 0.25 * starFactor);
|
||||
|
||||
float starAmount = (2.0 - NEBULA_STAR_AMOUNT) * 0.1;
|
||||
float starIntensity = GetStarNoise(starCoord) * GetStarNoise(starCoord + 0.1) - (starAmount + 0.5);
|
||||
starIntensity *= getStarEdgeFactor(fractPart, STAR_ROUNDNESS_OW / 10.0, STAR_SOFTNESS_OW);
|
||||
|
||||
#if TWINKLING_STARS > 0
|
||||
starIntensity *= getTwinklingStars(starCoord * 4, float(TWINKLING_STARS));
|
||||
#endif
|
||||
|
||||
float starGlow = pow2(clamp(starIntensity, 0.0, 0.3 + starAmount)) * starBrightness * NEBULA_STAR_BRIGHTNESS;
|
||||
|
||||
#ifdef NEBULA_ONLY_STARS
|
||||
nebulaTexture.a = step(0.15, nebulaTexture.a);
|
||||
nebulaTexture.rgb = vec3(3.0 * starGlow);
|
||||
#else
|
||||
nebulaTexture.rgb *= 1.5 + 10.0 * starGlow;
|
||||
#endif
|
||||
|
||||
#if NIGHT_NEBULA_I != 100
|
||||
#define NIGHT_NEBULA_IM NIGHT_NEBULA_I * 0.01
|
||||
nebulaTexture.a *= NIGHT_NEBULA_IM;
|
||||
#endif
|
||||
|
||||
#if NEBULA_SATURATION != 10
|
||||
nebulaTexture.rgb = rgb2hsv(nebulaTexture.rgb);
|
||||
nebulaTexture.g *= NEBULA_SATURATION * 0.1;
|
||||
nebulaTexture.rgb = hsv2rgb(nebulaTexture.rgb);
|
||||
#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));
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
#include "/lib/colors/lightAndAmbientColors.glsl"
|
||||
|
||||
vec3 beamCol = normalize(ColorBeam) * 3.0 * (2.5 - 1.0 * vlFactor) * OVERWORLD_BEAMS_INTENSITY;
|
||||
|
||||
vec2 wind = vec2(syncedTime * 0.0056);
|
||||
|
||||
float BeamNoise(vec2 planeCoord, vec2 wind) {
|
||||
float noise = texture2DLod(noisetex, planeCoord * 0.275 - wind * 0.0625, 0.0).b;
|
||||
noise+= texture2DLod(noisetex, planeCoord * 0.34375 + wind * 0.0575, 0.0).b * 10.0;
|
||||
|
||||
return noise;
|
||||
}
|
||||
|
||||
vec4 DrawOverworldBeams(float VdotU, vec3 playerPos, vec3 viewPos) {
|
||||
float visibility = 1.0 - sunVisibility - maxBlindnessDarkness;
|
||||
#if OVERWORLD_BEAMS_CONDITION == 0
|
||||
visibility -= moonPhase;
|
||||
#endif
|
||||
if (visibility > 0.0) {
|
||||
vec3 result = vec3(0.0);
|
||||
|
||||
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;
|
||||
|
||||
#ifdef AURORA_INFLUENCE
|
||||
beamCol = getAuroraAmbientColor(beamCol, viewPos, 1.0, AURORA_CLOUD_INFLUENCE_INTENSITY, 0.85) * OVERWORLD_BEAMS_INTENSITY;
|
||||
#endif
|
||||
|
||||
for(int i = 0; i < sampleCount; i++) {
|
||||
vec2 planeCoord = (playerPos.xz + cameraPosition.xz) * (1.0 + i * 6.0 / sampleCount) * 0.0014;
|
||||
|
||||
float noise = BeamNoise(planeCoord, wind);
|
||||
noise = max(0.92 - 1.0 / abs(noise - (2.5 + VdotUM * 2.0)), 0.0) * 2.5;
|
||||
|
||||
if (noise > 0.0) {
|
||||
noise *= 0.55;
|
||||
float fireNoise = texture2DLod(noisetex, abs(planeCoord * 0.2) - wind, 0.0).b;
|
||||
noise *= 0.5 * fireNoise + 0.75;
|
||||
noise = noise * noise * 3.0 / sampleCount;
|
||||
noise *= mix(1.0, sqrt3(VdotUM2), 0.25);
|
||||
|
||||
vec3 beamColor = beamCol;
|
||||
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 * 5000.0;
|
||||
beams.rgb *= sqrt(beams.rgb);
|
||||
result = sqrt(beams.rgb);
|
||||
|
||||
if(any(isnan(result.rgb))) result.rgb = vec3(0.0);
|
||||
|
||||
return vec4(result * visibility / sampleCount, beams.a);
|
||||
}
|
||||
return vec4(1.0);
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
#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]
|
||||
|
||||
vec3 GetRainbow(vec3 translucentMult, vec3 nViewPos, float z0, float z1, float lViewPos, float lViewPos1, float VdotL, float VdotU, 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 rainbowLength = far * 0.9;
|
||||
if (z1 == 1.0) lViewPos1 = rainbowLength;
|
||||
|
||||
float cloudLinearDepth = texelFetch(colortex5, texelCoord, 0).a;
|
||||
float cloudDisMult = pow2(cloudLinearDepth + OSIEBCA * dither);
|
||||
lViewPos1 *= cloudDisMult;
|
||||
|
||||
#if RAINBOW_STYLE == 1
|
||||
float pixelScale = 45.0;
|
||||
vec3 shadowDir = mat3(shadowModelView) * mat3(gbufferModelViewInverse) * nViewPos;
|
||||
|
||||
shadowDir.z += 0.0065 * (dither - 0.5); // Blurs the pixelation
|
||||
|
||||
shadowDir /= abs(shadowDir.z); // Corrects distortion
|
||||
shadowDir.xy = floor(shadowDir.xy * pixelScale) / pixelScale;
|
||||
|
||||
VdotL = shadowDir.z * inversesqrt(dot(shadowDir, shadowDir));
|
||||
#endif
|
||||
|
||||
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(lViewPos1 / rainbowLength));
|
||||
rainbowFactor *= rainbowTime;
|
||||
rainbowFactor *= 1.0 - GetCaveFactor();
|
||||
|
||||
if (rainbowFactor > 0.0) {
|
||||
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;
|
||||
|
||||
if (z1 > z0 && lViewPos < rainbowLength)
|
||||
rainbow *= mix(translucentMult, vec3(1.0), lViewPos / rainbowLength);
|
||||
|
||||
if (isEyeInWater != 0) rainbow *= sqrt1(VdotU);
|
||||
|
||||
rainbow *= rainbowFactor;
|
||||
}
|
||||
}
|
||||
|
||||
return rainbow;
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
// Shooting stars implementation based on https://www.shadertoy.com/view/ttVXDy and also based on https://github.com/OUdefie17/Photon-GAMS
|
||||
|
||||
#define SHOOTING_STARS_SIZE 0.50 //[0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75]
|
||||
#define SHOOTING_STARS_SPEED 8.0 //[4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0 10.5 11.0 11.5 12.0 12.5 13.0 13.5 14.0 14.5 15.0]
|
||||
#define SHOOTING_STARS_CHANCE 0.5 //[0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
|
||||
#define SHOOTING_STARS_COUNT 4 //[1 2 3 4 5 6 7 8 9 10]
|
||||
#define SHOOTING_STARS_LINE_THICKNESS 0.60 //[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]
|
||||
#define SHOOTING_STARS_TRAIL_LENGTH 0.60 //[0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85]
|
||||
|
||||
// Calculate distance from point p to line segment from a to b
|
||||
float DistLine(vec2 p, vec2 a, vec2 b) {
|
||||
vec2 pa = p - a;
|
||||
vec2 ba = b - a;
|
||||
float t = clamp01(dot(pa, ba) / dot(ba, ba));
|
||||
return length(pa - ba * t);
|
||||
}
|
||||
|
||||
// Draw a line with smooth edges
|
||||
float DrawLine(vec2 p, vec2 a, vec2 b) {
|
||||
float d = DistLine(p, a, b);
|
||||
float m = smoothstep(SHOOTING_STARS_LINE_THICKNESS * 0.01, 0.00001, d);
|
||||
float d2 = length(a - b);
|
||||
m *= smoothstep(1.0, 0.5, d2) + smoothstep(0.04, 0.03, abs(d2 - 0.75));
|
||||
return m;
|
||||
}
|
||||
|
||||
// Generate a single shooting star
|
||||
float ShootingStar(vec2 uv, vec2 startPos, vec2 direction) {
|
||||
vec2 id = floor(uv * 0.5);
|
||||
float h = hash12(id);
|
||||
|
||||
float newMoonVisibility = 1.0 - abs(moonPhase - 4) / 4.0;
|
||||
float moonPhaseFactor = mix(0.8, 1.5, newMoonVisibility);
|
||||
|
||||
if (h >= pow1_5(SHOOTING_STARS_CHANCE * 0.065) * moonPhaseFactor) return 0.0;
|
||||
|
||||
vec2 gv = fract(uv * 0.5) * 2.0 - 1.0;
|
||||
float line = DrawLine(gv, startPos, startPos + direction * 0.9);
|
||||
|
||||
vec2 toStart = gv - startPos;
|
||||
float alongTrail = dot(toStart, direction);
|
||||
float trail = smoothstep(SHOOTING_STARS_TRAIL_LENGTH, -0.1, alongTrail);
|
||||
|
||||
float headBrightness = 1.0 + 3.0 / (1.0 + pow2((alongTrail - 1.0) * 8.0));
|
||||
|
||||
return line * trail * headBrightness;
|
||||
}
|
||||
|
||||
vec3 GetShootingStars(vec2 starCoord, float VdotU, float VdotS) {
|
||||
float starsAroundSun = 1.0;
|
||||
#ifdef CELESTIAL_BOTH_HEMISPHERES
|
||||
float starBelowHorizonBrightness = 1.0;
|
||||
float horizonFactor = exp(-pow(VdotU / 0.1, 2.0));
|
||||
#ifdef SUN_MOON_HORIZON
|
||||
starsAroundSun = max0(sign(VdotU));
|
||||
#endif
|
||||
#else
|
||||
if (VdotU < 0.0) return vec3(0.0);
|
||||
float starBelowHorizonBrightness = min1(VdotU * 3.0);
|
||||
float horizonFactor = 0.0;
|
||||
#endif
|
||||
|
||||
float visibility = max0(1.0 - 1.0 / (1.0 + abs(VdotS) * 1000.0) * starsAroundSun) * starBelowHorizonBrightness - horizonFactor * 0.5;
|
||||
|
||||
#ifndef DAYLIGHT_STARS
|
||||
visibility *= pow2(pow2(invNoonFactor2)) * (1.0 - 0.5 * sunVisibility);
|
||||
#endif
|
||||
|
||||
#ifdef CLEAR_SKY_WHEN_RAINING
|
||||
visibility *= min1(invRainFactor + 0.4);
|
||||
#else
|
||||
visibility *= invRainFactor;
|
||||
#endif
|
||||
|
||||
if (visibility <= 0.01) return vec3(0.0);
|
||||
|
||||
vec2 uv = starCoord * 6.0 * (1.0 - SHOOTING_STARS_SIZE);
|
||||
float speed = frameTimeCounter * SHOOTING_STARS_SPEED;
|
||||
|
||||
vec2 startPositions[10] = vec2[](
|
||||
vec2(-0.4, 0.3),
|
||||
vec2(0.2, 0.4),
|
||||
vec2(-0.1, -0.3),
|
||||
vec2(0.3, -0.2),
|
||||
vec2(-0.3, 0.1),
|
||||
vec2(0.5, 0.2),
|
||||
vec2(-0.5, -0.1),
|
||||
vec2(0.1, 0.5),
|
||||
vec2(-0.2, -0.4),
|
||||
vec2(0.4, -0.3)
|
||||
);
|
||||
|
||||
vec2 directions[10] = vec2[](
|
||||
vec2(0.7071, 0.7071),
|
||||
vec2(0.7071, -0.7071),
|
||||
vec2(-1.0, 0.0),
|
||||
vec2(1.0, 0.0),
|
||||
vec2(0.5299, 0.8480),
|
||||
vec2(-0.6000, 0.8000),
|
||||
vec2(0.9134, -0.4067),
|
||||
vec2(-0.8000, -0.6000),
|
||||
vec2(0.3015, 0.9535),
|
||||
vec2(-0.2000, -0.9798)
|
||||
);
|
||||
|
||||
float stars = 0.0;
|
||||
int dayIndex = int(worldDay) % 10;
|
||||
vec2 todayDirection = directions[dayIndex];
|
||||
|
||||
for (int i = 0; i < SHOOTING_STARS_COUNT; i++) {
|
||||
float offsetAngle = (hash12(vec2(i, worldDay)) - 0.5) * 0.66;
|
||||
vec2 starDirection = rotate(offsetAngle) * todayDirection;
|
||||
|
||||
vec2 offsetUV = uv + starDirection * speed * (0.8 + 0.04 * float(i));
|
||||
stars += ShootingStar(offsetUV, startPositions[i], starDirection);
|
||||
}
|
||||
|
||||
vec3 shootingStarColor = vec3(0.38, 0.4, 0.5) * 2.0 * starBrightness;
|
||||
float intensity = min(stars * visibility * 10.0, 1.0);
|
||||
return shootingStarColor * intensity;
|
||||
}
|
||||
@@ -0,0 +1,161 @@
|
||||
#ifndef INCLUDE_SKY
|
||||
#define INCLUDE_SKY
|
||||
|
||||
#define SUN_GLARE_AMOUNT 10 // [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30]
|
||||
#define MOON_GLARE_AMOUNT 10 // [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30]
|
||||
|
||||
#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 scatteredGroundMixerMult = 1.0;
|
||||
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 * scatteredGroundMixerMult);
|
||||
//
|
||||
|
||||
// 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 SUN_GLARE_AMOUNT > 0 || MOON_GLARE_AMOUNT > 0
|
||||
if (doGlare) {
|
||||
if (0.0 < VdotSML) {
|
||||
float glareScatter = 3.0 * (2.0 - clamp01(VdotS * 1000.0));
|
||||
#ifndef SUN_MOON_DURING_RAIN
|
||||
glareScatter *= 1.0 - 0.75 * rainFactor2;
|
||||
#endif
|
||||
float VdotSM4 = pow(abs(VdotS), glareScatter);
|
||||
|
||||
float visfactor = 0.075;
|
||||
float glare = visfactor / (1.0 - (1.0 - visfactor) * VdotSM4) - visfactor;
|
||||
glare *= 0.7;
|
||||
|
||||
float glareWaterFactor = isEyeInWater * sunVisibility;
|
||||
vec3 glareColor = mix(vec3(0.38, 0.4, 0.5) * 0.3, vec3(1.5, 0.7, 0.3) + vec3(0.0, 0.5, 0.5) * noonFactor, sunVisibility);
|
||||
#if BLOOD_MOON > 0
|
||||
glareColor = mix(glareColor, vec3(0.6314, 0.0431, 0.0431), getBloodMoon(sunVisibility));
|
||||
#endif
|
||||
glareColor = glareColor + glareWaterFactor * vec3(7.0);
|
||||
|
||||
#ifdef SUN_MOON_DURING_RAIN
|
||||
glare *= 1.0 - 0.6 * rainFactor;
|
||||
#else
|
||||
glare *= 1.0 - 0.8 * rainFactor;
|
||||
#endif
|
||||
#if RAIN_STYLE == 1
|
||||
float glareDesaturateFactor = 0.5 * rainFactor;
|
||||
#elif RAIN_STYLE == 2
|
||||
float glareDesaturateFactor = rainFactor;
|
||||
#endif
|
||||
glareColor = mix(glareColor, vec3(GetLuminance(glareColor)), glareDesaturateFactor);
|
||||
|
||||
glare *= mix(MOON_GLARE_AMOUNT * 0.1, SUN_GLARE_AMOUNT * 0.1, sunVisibility);
|
||||
|
||||
finalSky += glare * shadowTime * glareColor;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CAVE_FOG
|
||||
// Apply Cave Fog
|
||||
finalSky = mix(finalSky, caveFogColor, GetCaveFactor() * VdotUmax0M);
|
||||
#endif
|
||||
|
||||
// Dither to fix banding
|
||||
finalSky += (dither - 0.5) / 128.0;
|
||||
|
||||
#if RETRO_LOOK == 1
|
||||
finalSky = vec3(0.0);
|
||||
#elif RETRO_LOOK ==2
|
||||
finalSky = mix(finalSky, vec3(0.0), nightVision);
|
||||
#endif
|
||||
|
||||
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
|
||||
|
||||
#if RETRO_LOOK == 1 || RETRO_LOOK == 2
|
||||
finalSky = vec3(0.0);
|
||||
#endif
|
||||
|
||||
return finalSky;
|
||||
}
|
||||
|
||||
#endif //INCLUDE_SKY
|
||||
@@ -0,0 +1,94 @@
|
||||
#if !defined STARS_FILE_INCLUDED
|
||||
#define STARS_FILE_INCLUDED
|
||||
#include "/lib/colors/skyColors.glsl"
|
||||
#include "/lib/shaderSettings/stars.glsl"
|
||||
|
||||
vec2 GetStarCoord(vec3 viewPos, float sphereness) {
|
||||
vec3 wpos = normalize((gbufferModelViewInverse * vec4(viewPos * 1000.0, 1.0)).xyz);
|
||||
float ySign = sign(wpos.y);
|
||||
float yMagnitude = abs(wpos.y);
|
||||
|
||||
vec3 adjustedWpos = vec3(wpos.x, yMagnitude, wpos.z);
|
||||
vec3 starCoord = adjustedWpos / (adjustedWpos.y + length(adjustedWpos.xz) * sphereness);
|
||||
|
||||
if (ySign >= 0.0) {
|
||||
starCoord.x += 0.006 * syncedTime; // Top hemisphere (original direction)
|
||||
} else {
|
||||
starCoord.x = starCoord.x - 0.006 * syncedTime + 0.37; // Bottom hemisphere with offset
|
||||
starCoord.z += 0.21;
|
||||
}
|
||||
|
||||
return starCoord.xz;
|
||||
}
|
||||
|
||||
vec3 GetStars(vec2 starCoord, float VdotU, float VdotS, float sizeMult, float starAmount) {
|
||||
#if NIGHT_STAR_AMOUNT == 0
|
||||
return vec3(0.0, 0.0, 0.0);
|
||||
#endif
|
||||
float starsAroundSun = 1.0;
|
||||
#ifdef CELESTIAL_BOTH_HEMISPHERES
|
||||
float starBelowHorizonBrightness = 1.0;
|
||||
float horizonFactor = exp(-pow(VdotU / 0.1, 2.0));
|
||||
#ifdef SUN_MOON_HORIZON
|
||||
starsAroundSun = max0(sign(VdotU));
|
||||
#endif
|
||||
#else
|
||||
if (VdotU < 0.0) return vec3(0.0);
|
||||
float starBelowHorizonBrightness = min1(VdotU * 3.0);
|
||||
float horizonFactor = 0.0;
|
||||
#endif
|
||||
|
||||
starCoord *= 0.2 / (STAR_SIZE * sizeMult);
|
||||
|
||||
const float starFactor = 1024.0;
|
||||
|
||||
vec2 fractPart = fract(starCoord * starFactor);
|
||||
|
||||
starCoord = floor(starCoord * starFactor) / starFactor;
|
||||
|
||||
float star = GetStarNoise(starCoord.xy) * GetStarNoise(starCoord.xy+0.1) * GetStarNoise(starCoord.xy+0.23);
|
||||
|
||||
#if NIGHT_STAR_AMOUNT == 1
|
||||
star -= 0.82;
|
||||
star *= 2.0;
|
||||
#elif NIGHT_STAR_AMOUNT == 2
|
||||
star -= 0.7;
|
||||
#elif NIGHT_STAR_AMOUNT == 3
|
||||
star -= 0.62;
|
||||
star *= 0.75;
|
||||
#elif NIGHT_STAR_AMOUNT == 4
|
||||
star -= 0.52;
|
||||
star *= 0.55;
|
||||
#endif
|
||||
|
||||
star = max0(star - starAmount * 0.1);
|
||||
star *= getStarEdgeFactor(fractPart, STAR_ROUNDNESS_OW / 10.0, STAR_SOFTNESS_OW);
|
||||
star *= star;
|
||||
|
||||
star *= max0(1.0 - pow(abs(VdotS) * 1.002, 100.0) * starsAroundSun) * starBelowHorizonBrightness - horizonFactor * 0.5;
|
||||
#ifndef DAYLIGHT_STARS
|
||||
star *= pow2(pow2(invNoonFactor2)) * (1.0 - 0.5 * sunVisibility);
|
||||
#endif
|
||||
|
||||
#ifdef CLEAR_SKY_WHEN_RAINING
|
||||
star *= min1(invRainFactor + 0.4);
|
||||
#else
|
||||
star *= invRainFactor;
|
||||
#endif
|
||||
|
||||
vec3 starColor = GetStarColor(starCoord,
|
||||
vec3(0.38, 0.4, 0.5),
|
||||
vec3(STAR_COLOR_1_OW_R, STAR_COLOR_1_OW_G, STAR_COLOR_1_OW_B),
|
||||
vec3(STAR_COLOR_2_OW_R, STAR_COLOR_2_OW_G, STAR_COLOR_2_OW_B),
|
||||
vec3(STAR_COLOR_3_OW_R, STAR_COLOR_3_OW_G, STAR_COLOR_3_OW_B),
|
||||
float(STAR_COLOR_VARIATION_OW));
|
||||
|
||||
vec3 stars = 40.0 * star * starColor * starBrightness;
|
||||
|
||||
#if TWINKLING_STARS > 0
|
||||
stars *= getTwinklingStars(starCoord, float(TWINKLING_STARS));
|
||||
#endif
|
||||
|
||||
return stars;
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,375 @@
|
||||
// Volumetric tracing from Robobo1221, highly modified
|
||||
#include "/lib/shaderSettings/volumetricLight.glsl"
|
||||
#include "/lib/shaderSettings/endBeams.glsl"
|
||||
#include "/lib/shaderSettings/endFlash.glsl"
|
||||
#include "/lib/colors/lightAndAmbientColors.glsl"
|
||||
//#define BEDROCK_NOISE
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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);
|
||||
#if defined BEDROCK_NOISE && defined OVERWORLD
|
||||
if ((cameraPosition.y < bedrockLevel) && (eyeBrightnessM < 0.4)) return vec4(0.0);
|
||||
#endif
|
||||
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 IRIS_FEATURE_FADE_VARIABLE
|
||||
vec3 texture6 = texelFetch(colortex6, texelCoord, 0).rgb;
|
||||
float chunkFade = texture6.b > 0.50001 ? (1.0 - texture6.b) * 2.0 : 1.0;
|
||||
float chunkFadeM = mix(1.0, chunkFade, pow2(clamp01(lViewPos0 * 0.015))); // don't do fade very close to the player
|
||||
lViewPos1 = mix(far, lViewPos1, chunkFadeM);
|
||||
#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);
|
||||
vlColor *= 1.0 + 0.6 * inDry * rainFactor;
|
||||
#endif
|
||||
|
||||
if (sunVisibility < 0.5) {
|
||||
vlSceneIntensity = 0.0;
|
||||
|
||||
float vlMultNightModifier = (0.3 + 0.4 * rainFactor2 + 0.5 * 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) + rainFactor)));
|
||||
vlColor *= 0.0766 + 0.0766 * vsBrightness;
|
||||
} else {
|
||||
vlColorReducer = 1.0 / sqrt(vlColor);
|
||||
}
|
||||
|
||||
#if BLOOD_MOON > 0
|
||||
vec3 hsvVlColor = rgb2hsv(vlColor);
|
||||
vlColor = mix(vlColor, hsv2rgb(vec3(0, max(0.8, hsvVlColor.y), hsvVlColor.z * 1.7)), getBloodMoon(sunVisibility));
|
||||
#endif
|
||||
|
||||
#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
|
||||
|
||||
#ifndef TAA
|
||||
sampleCount *= 2;
|
||||
#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 IRIS_FEATURE_FADE_VARIABLE
|
||||
depth1 = mix(depth1, far, pow2(pow2(1.0 - chunkFadeM)));
|
||||
#endif
|
||||
|
||||
#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;
|
||||
#if defined END && defined END_BEAMS
|
||||
playerPos *= 512.0 / far;
|
||||
vec4 enderBeamSample = vec4(DrawEnderBeams(VdotU, playerPos, nViewPos), 1.0);
|
||||
enderBeamSample /= sampleCount;
|
||||
#endif
|
||||
#if defined OVERWORLD && defined OVERWORLD_BEAMS
|
||||
vec4 overworldBeamSample = DrawOverworldBeams(VdotU, playerPos, viewPos.xyz);
|
||||
#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);
|
||||
|
||||
#ifdef END_FLASH_SHADOW_INTERNAL
|
||||
vlSample = mix(vec3(1.0), vlSample, endFlashIntensity);
|
||||
#endif
|
||||
|
||||
#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.0, 0.001, -0.002);
|
||||
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
|
||||
vec4 volumetricLightAdd = vec4(vlSample, shadowSample) * sampleMult;
|
||||
#ifdef OVERWORLD_BEAMS
|
||||
volumetricLight += volumetricLightAdd * mix(vec4(1.0), overworldBeamSample, overworldBeamSample.a);
|
||||
#else
|
||||
volumetricLight += volumetricLightAdd;
|
||||
#endif
|
||||
#else
|
||||
#ifdef END_BEAMS
|
||||
volumetricLight += vec4(vlSample, shadowSample) * enderBeamSample;
|
||||
#endif
|
||||
#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 + LIGHTSHAFT_SUNSET_SATURATION * sunVisibility) * invNoonFactor * invRainFactor + 0.3 * rainFactor));
|
||||
vlColor *= 1.0 - (0.3 + 0.3 * noonFactor) * rainFactor - 0.5 * rainyNight + sunVisibility * pow2(invNoonFactor) * invRainFactor;
|
||||
|
||||
#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));
|
||||
|
||||
#if defined DISTANT_HORIZONS && defined OVERWORLD
|
||||
if (isEyeInWater == 0) {
|
||||
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);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef END
|
||||
#ifndef DISTANT_HORIZONS
|
||||
volumetricLight *= sqrt1(min1(lViewPos1 * 2.0 / 512.0));
|
||||
#else
|
||||
volumetricLight *= min1(lViewPos1 * 3.0 / renderDistance);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if RETRO_LOOK == 1
|
||||
volumetricLight *= vec4(0.0);
|
||||
#elif RETRO_LOOK == 2
|
||||
volumetricLight *= mix(vec4(1.0), vec4(0.0), nightVision);
|
||||
#endif
|
||||
|
||||
return volumetricLight;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
#include "/lib/shaderSettings/materials.glsl"
|
||||
#define BASE_BLOCKLIGHT (vec3(0.1775, 0.104, 0.077) * vec3(XLIGHT_R, XLIGHT_G, XLIGHT_B))
|
||||
|
||||
#define SOUL_VALLEY_COLOR vec3(0.05, 0.22, 0.25)
|
||||
|
||||
#ifdef SOUL_SAND_VALLEY_OVERHAUL_INTERNAL
|
||||
vec3 blocklightCol = mix(BASE_BLOCKLIGHT, SOUL_VALLEY_COLOR, inSoulValley);
|
||||
#else
|
||||
vec3 blocklightCol = BASE_BLOCKLIGHT;
|
||||
#endif
|
||||
|
||||
#if COLORED_LIGHTING_INTERNAL > 0
|
||||
#include "/lib/colors/blocklightColorsACT.glsl"
|
||||
#endif
|
||||
@@ -0,0 +1,305 @@
|
||||
#ifdef SOUL_SAND_VALLEY_OVERHAUL_INTERNAL
|
||||
vec3 fireSpecialLightColorGradient = mix(vec3(2.0, 0.87, 0.27) * 3.8, mix(vec3(2.5, 0.87, 0.27), vec3(0.5, 1.9, 2.1) * 3.8, 0.3), inSoulValley);
|
||||
vec3 torchBlockSpecialLightColor = mix(vec3(2.0, 0.87, 0.27) * 3.8, mix(vec3(2.5, 0.87, 0.27), vec3(0.5, 1.9, 2.1) * 3.8, 0.5), inSoulValley);
|
||||
vec3 lanternBlockSpecialLightColor = mix(vec3(2.0, 0.87, 0.27) * 3.8, mix(vec3(2.5, 0.87, 0.27), vec3(0.5, 1.9, 2.1) * 3.8, 0.4), inSoulValley);
|
||||
vec3 fireSpecialLightColor = mix(vec3(2.25, 0.83, 0.27) * 3.7, vec3(0.5, 1.9, 2.1) * 3.8, inSoulValley);
|
||||
vec4 lavaSpecialLightColor = vec4(mix(vec3(3.25, 0.9, 0.2) * 3.9, vec3(0.5, 1.9, 2.1) * 4.0, inSoulValley), 0.8);
|
||||
vec4 brewingStandSpecialLightColor = vec4(mix(vec3(2.5, 1.2, 0.4) * 0.1, vec3(0.5, 1.9, 2.1) * 0.1, inSoulValley), 0.1);
|
||||
#elif defined PURPLE_END_FIRE_INTERNAL
|
||||
vec3 fireSpecialLightColor = vec3(0.6, 0.3, 2.4) * 3.8;
|
||||
vec3 fireSpecialLightColorGradient = mix(vec3(2.0, 0.77, 0.17) * 3.8, fireSpecialLightColor, clamp01(0.7 + max(0.0, clamp01(sin(pow2(texture2DLod(noisetex, vec2(frameTimeCounter * 0.01), 0.0).r))))));
|
||||
vec3 torchBlockSpecialLightColor = mix(vec3(2.0, 0.87, 0.27), fireSpecialLightColor, clamp01(0.75)); // Super odd intel nan fix
|
||||
vec3 lanternBlockSpecialLightColor = fireSpecialLightColor;
|
||||
vec4 lavaSpecialLightColor = vec4(vec3(1.0, 0.5, 4.0) * 4.0, 0.8);
|
||||
vec4 brewingStandSpecialLightColor = vec4(vec3(0.10, 0.05, 0.4) * 0.4, 0.1);
|
||||
#else
|
||||
vec3 fireSpecialLightColor = vec3(2.25, 0.83, 0.27) * 3.7;
|
||||
vec3 fireSpecialLightColorGradient = fireSpecialLightColor;
|
||||
vec3 torchBlockSpecialLightColor = fireSpecialLightColor;
|
||||
vec3 lanternBlockSpecialLightColor = fireSpecialLightColor;
|
||||
vec4 lavaSpecialLightColor = vec4(vec3(3.25, 0.9, 0.2) * 3.9, 0.8);
|
||||
vec4 brewingStandSpecialLightColor = vec4(vec3(2.5, 1.2, 0.4) * 0.1, 0.1);
|
||||
#endif
|
||||
#if defined NETHER && defined BIOME_COLORED_NETHER_PORTALS
|
||||
vec3 netherPortalSpecialLightColor = normalize(netherColor) * 2.0;
|
||||
vec3 respawnAnchorSpecialLightColor = normalize(netherColor) * 2.0;
|
||||
#else
|
||||
vec3 netherPortalSpecialLightColor = vec3(1.8, 0.4, 2.2) * 0.8;
|
||||
vec3 respawnAnchorSpecialLightColor = vec3(1.7, 0.9, 0.4) * 2.0;
|
||||
#endif
|
||||
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;
|
||||
#if END_ROD_COLOR_PROFILE == 1
|
||||
vec3 endRodSpacialColor = vec3(END_ROD_R, END_ROD_G, END_ROD_B) / 255 * END_ROD_I;
|
||||
#elif (END_ROD_COLOR_PROFILE == 2 || (END_ROD_COLOR_PROFILE == 3 && defined OVERWORLD)) && COLORED_LIGHTING_INTERNAL > 0
|
||||
vec3 endRodSpacialColor = vec3(pow2(getRainbowColor(vec2(0.0), float(END_ROD_RAINBOW_ANIMATE))));
|
||||
#else
|
||||
#ifdef END
|
||||
vec3 endRodSpacialColor = vec3(1.25, 0.5, 1.25); // End Rod in the End dimension
|
||||
#else
|
||||
vec3 endRodSpacialColor = vec3(1.0, 1.0, 1.0);
|
||||
#endif
|
||||
#endif
|
||||
#ifdef EMISSIVE_ENCHANTING_TABLE
|
||||
vec3 enchantingTableSpecialLightColor = vec3(0.5, 2.0, 2.0) * 0.4;
|
||||
#else
|
||||
vec3 enchantingTableSpecialLightColor = vec3(1.4, 1.1, 0.5);
|
||||
#endif
|
||||
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));
|
||||
}
|
||||
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 < 5) {
|
||||
if (mat == 2) return vec4(torchBlockSpecialLightColor, 0.0); // Torch
|
||||
if (mat == 3) return vec4(endRodSpacialColor * 4.0, 0.0); // End Rod - This is the base for all lights. Total value 12. vec3(1.0, 1.0, 1.0) * 4.0
|
||||
if (mat == 4) return vec4(vec3(0.7, 1.5, 2.0) * 3.0, 0.0); // Beacon
|
||||
} else {
|
||||
if (mat == 5) return vec4(fireSpecialLightColorGradient, 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(pow(vec3(1.1, 0.85, 0.35), vec3(FROGLIGHT_SATURATION * 0.5 + 0.5)) * 5.0, 0.0); // Ochre Froglight
|
||||
}
|
||||
} else {
|
||||
if (mat < 11) {
|
||||
if (mat == 8) return vec4(pow(vec3(0.6, 1.3, 0.6), vec3(FROGLIGHT_SATURATION * 0.5 + 0.5)) * 4.5, 0.0); // Verdant Froglight
|
||||
if (mat == 9) return vec4(pow(vec3(1.1, 0.5, 0.9), vec3(FROGLIGHT_SATURATION * 0.5 + 0.5)) * 4.5, 0.0); // Pearlescent Froglight
|
||||
if (mat == 10) return vec4(vec3(1.7, 0.9, 0.4) * 4.0, 0.0); // Glowstone
|
||||
} else {
|
||||
if (mat == 11) return vec4(fireSpecialLightColor, 0.0); // Jack o'Lantern
|
||||
if (mat == 12) return vec4(lanternBlockSpecialLightColor, 0.0); // Lantern
|
||||
if (mat == 13) return lavaSpecialLightColor; // Lava
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (mat < 20) {
|
||||
if (mat < 17) {
|
||||
if (mat == 14) return vec4(lavaSpecialLightColor.rgb, 0.0); // Lava Cauldron
|
||||
if (mat == 15) return vec4(fireSpecialLightColorGradient, 0.0); // Campfire:Lit
|
||||
if (mat == 16) return vec4(vec3(1.7, 0.9, 0.4) * 4.0, 0.0); // Redstone Lamp:Lit
|
||||
} else {
|
||||
if (mat == 17) return vec4(respawnAnchorSpecialLightColor, 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 < 23) {
|
||||
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
|
||||
} else {
|
||||
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 < 29) {
|
||||
if (mat == 26) return vec4(netherPortalSpecialLightColor, 0.0); // Crying Obsidian
|
||||
if (mat == 27) return soulFireSpecialColor; // Soul Fire
|
||||
if (mat == 28) return soulFireSpecialColor; // Soul Torch
|
||||
} else {
|
||||
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 * ACT_ORE_INTENSITY); // Redstone Ores:Lit
|
||||
}
|
||||
} else {
|
||||
if (mat < 35) {
|
||||
if (mat == 32) return vec4(redstoneSpecialLightColor * 0.3, 0.1 * ACT_ORE_INTENSITY) * GLOWING_ORE_MULT; // Redstone Ores:Unlit
|
||||
if (mat == 33) return vec4(enchantingTableSpecialLightColor, 0.05); // 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
|
||||
} else {
|
||||
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.rgb * 0.1, 0.1); // Magma Block
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (mat < 44) {
|
||||
if (mat < 41) {
|
||||
#ifdef EMISSIVE_DRAGON_EGG
|
||||
if (mat == 38) return vec4(vec3(2.0, 0.5, 1.5) * 0.3, 0.1); // Dragon Egg
|
||||
#endif
|
||||
if (mat == 39) return vec4(vec3(2.0, 1.0, 1.5) * 0.25, 0.1); // Chorus Flower
|
||||
if (mat == 40) return brewingStandSpecialLightColor; // Brewing Stand
|
||||
} else {
|
||||
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 * ACT_ORE_INTENSITY) * GLOWING_ORE_MULT; // Iron Ores
|
||||
}
|
||||
} else {
|
||||
if (mat < 47) {
|
||||
if (mat == 44) return vec4(vec3(1.7, 1.1, 0.2) * 0.45, 0.1 * ACT_ORE_INTENSITY) * GLOWING_ORE_MULT; // Gold Ores
|
||||
if (mat == 45) return vec4(vec3(1.7, 0.8, 0.4) * 0.45, 0.05 * ACT_ORE_INTENSITY) * GLOWING_ORE_MULT; // Copper Ores
|
||||
if (mat == 46) return vec4(vec3(0.75, 0.75, 3.0) * 0.2, 0.1 * ACT_ORE_INTENSITY) * GLOWING_ORE_MULT; // Lapis Ores
|
||||
} else {
|
||||
if (mat == 47) return vec4(vec3(0.5, 3.5, 0.5) * 0.3, 0.1 * ACT_ORE_INTENSITY) * GLOWING_ORE_MULT; // Emerald Ores
|
||||
if (mat == 48) return vec4(vec3(0.5, 2.0, 2.0) * 0.4, 0.15 * ACT_ORE_INTENSITY) * GLOWING_ORE_MULT; // Diamond Ores
|
||||
if (mat == 49) return vec4(vec3(1.5, 1.5, 1.5) * 0.3, 0.05 * ACT_ORE_INTENSITY) * GLOWING_ORE_MULT; // Nether Quartz Ore
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (mat < 74) {
|
||||
if (mat < 62) {
|
||||
if (mat < 56) {
|
||||
if (mat < 53) {
|
||||
if (mat == 50) return vec4(vec3(1.7, 1.1, 0.2) * 0.45, 0.05 * ACT_ORE_INTENSITY) * GLOWING_ORE_MULT; // 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
|
||||
} else {
|
||||
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 < 59) {
|
||||
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
|
||||
} else {
|
||||
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 < 65) {
|
||||
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.0, 1.0, 1.0) * 0.45, 0.1); // Structure Block, Jigsaw Block, Test Block, Test Instance Block
|
||||
} else {
|
||||
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 < 71) {
|
||||
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
|
||||
} else {
|
||||
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 < 77) {
|
||||
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
|
||||
} else {
|
||||
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 < 83) {
|
||||
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
|
||||
} else {
|
||||
if (mat == 83) return vec4(vec3(1.6, 1.6, 0.7) * 0.3, 0.05); // Firefly Bush
|
||||
if (mat == 84) return vec4(vec3(0.85, 1.3, 1.0) * 3.9, 0.0); // Copper Torch, Copper Lantern
|
||||
if (mat == 85) return vec4(0.0);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (mat < 92) {
|
||||
if (mat < 89) {
|
||||
if (mat == 86) return vec4(0.0);
|
||||
if (mat == 87) return vec4(0.0);
|
||||
if (mat == 88) return vec4(0.0);
|
||||
} else {
|
||||
if (mat == 89) return vec4(0.0);
|
||||
if (mat == 90) return vec4(0.0);
|
||||
if (mat == 91) return vec4(0.0);
|
||||
}
|
||||
} else {
|
||||
if (mat < 95) {
|
||||
if (mat == 92) return vec4(0.0);
|
||||
if (mat == 93) return vec4(0.0);
|
||||
if (mat == 94) return vec4(0.0);
|
||||
} else {
|
||||
if (mat == 95) return vec4(0.0);
|
||||
if (mat == 96) return vec4(0.0);
|
||||
if (mat == 97) return vec4(vec3(1.0, 1.0, 1.0) * 4.0, candleExtraLight); // Modded White Light Source
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
);
|
||||
@@ -0,0 +1,7 @@
|
||||
vec3 cloudRainColor = mix(nightMiddleSkyColor, dayMiddleSkyColor, sunFactor);
|
||||
vec3 cloudAmbientColor = mix(ambientColor * (sunVisibility2 * (0.55 + 0.17 * noonFactor) + 0.35), cloudRainColor * 0.5, rainFactor) * CLOUD_AMBIENT_MULTIPLIER;
|
||||
vec3 cloudLightColor = mix(
|
||||
lightColor * 1.3,
|
||||
cloudRainColor * 0.45,
|
||||
noonFactor * rainFactor
|
||||
) * CLOUD_LIGHT_MULTIPLIER;
|
||||
@@ -0,0 +1,68 @@
|
||||
#ifndef INCLUDE_LIGHT_AND_AMBIENT_MULTIPLIERS
|
||||
#define INCLUDE_LIGHT_AND_AMBIENT_MULTIPLIERS
|
||||
|
||||
#include "/lib/shaderSettings/colorMult.glsl"
|
||||
|
||||
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
|
||||
|
||||
#ifdef COLOR_MULTIPLIER_COMPARISON
|
||||
return gl_FragCoord.x < mix(0.5, 0.0, isSneaking) * viewWidth ? vec3(1.0) : lightColorMult;
|
||||
#else
|
||||
return lightColorMult;
|
||||
#endif
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
#ifdef COLOR_MULTIPLIER_COMPARISON
|
||||
return gl_FragCoord.x < mix(0.5, 0.0, isSneaking) * viewWidth ? vec3(1.0) : atmColorMult;
|
||||
#else
|
||||
return atmColorMult;
|
||||
#endif
|
||||
}
|
||||
|
||||
vec3 lightColorMult;
|
||||
vec3 atmColorMult;
|
||||
vec3 sqrtAtmColorMult;
|
||||
|
||||
#endif //INCLUDE_LIGHT_AND_AMBIENT_MULTIPLIERS
|
||||
@@ -0,0 +1,110 @@
|
||||
#ifndef INCLUDE_LIGHT_AND_AMBIENT_COLORS
|
||||
#define INCLUDE_LIGHT_AND_AMBIENT_COLORS
|
||||
|
||||
#include "/lib/shaderSettings/endBeams.glsl"
|
||||
#include "/lib/shaderSettings/lightAndAmbientColors.glsl"
|
||||
#include "/lib/shaderSettings/overworldBeams.glsl"
|
||||
|
||||
#if defined OVERWORLD
|
||||
#ifndef COMPOSITE1
|
||||
vec3 noonClearLightColor = vec3(0.65, 0.55, 0.375) * 2.05; //ground and cloud color
|
||||
#else
|
||||
vec3 noonClearLightColor = vec3(0.4, 0.75, 1.3); //light shaft color
|
||||
#endif
|
||||
vec3 noonClearAmbientColor = pow(skyColor, vec3(0.75)) * 0.85;
|
||||
|
||||
#ifndef COMPOSITE1
|
||||
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 COMPOSITE1 && !defined DEFERRED1
|
||||
vec3 nightClearLightColor = 0.9 * vec3(0.15, 0.14, 0.20) * (0.4 + vsBrightness * 0.4); //ground color
|
||||
#elif defined DEFERRED1
|
||||
vec3 nightClearLightColor = 0.9 * vec3(0.11, 0.14, 0.20); //cloud color
|
||||
#else
|
||||
vec3 nightClearLightColor = vec3(0.08, 0.12, 0.23); //light shaft color
|
||||
#endif
|
||||
vec3 nightClearAmbientColor = 0.9 * 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.01, -0.035, -0.06);
|
||||
#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)
|
||||
+ 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 COMPOSITE1
|
||||
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);
|
||||
|
||||
float rainShadowVisReduce = 0.0
|
||||
#ifdef SUN_MOON_DURING_RAIN
|
||||
#ifdef SPECIAL_BIOME_WEATHER
|
||||
+ 0.2 * inSnowy + 0.2 * inDry
|
||||
#elif RAIN_STYLE == 2
|
||||
+ 0.2
|
||||
#endif
|
||||
#else
|
||||
+ 0.4
|
||||
#endif
|
||||
;
|
||||
|
||||
vec3 rainLightColor = mix(nightRainLightColor, dayRainLightColor * (1.0 - rainShadowVisReduce), sunVisibility2) * 2.5;
|
||||
vec3 rainAmbientColor = mix(nightRainAmbientColor, dayRainAmbientColor * (1.0 + rainShadowVisReduce), sunVisibility2);
|
||||
|
||||
vec3 lightColor = mix(clearLightColor, rainLightColor, rainFactor);
|
||||
#if SILHOUETTE == 0
|
||||
vec3 ambientColor = mix(clearAmbientColor, rainAmbientColor, rainFactor);
|
||||
#elif SILHOUETTE == 1
|
||||
vec3 ambientColor = mix(clearAmbientColor, rainAmbientColor, rainFactor) * mix(SILHOUETTE_BRIGHTNESS, 1.0, sunVisibility);
|
||||
#else
|
||||
vec3 ambientColor = mix(clearAmbientColor, rainAmbientColor, rainFactor) * SILHOUETTE_BRIGHTNESS;
|
||||
#endif
|
||||
|
||||
#ifdef OVERWORLD_BEAMS
|
||||
vec3 ambientColorBeam = mix(clearAmbientColor, rainAmbientColor, rainFactor);
|
||||
vec3 ColorBeam = mix(vec3(OW_BEAM_R_NEW, OW_BEAM_G_NEW, OW_BEAM_B_NEW), ambientColorBeam, BEAMS_AMBIENT_INFLUENCE);
|
||||
#else
|
||||
vec3 ColorBeam = vec3(0.0);
|
||||
#endif
|
||||
#elif defined NETHER
|
||||
vec3 lightColor = vec3(0.0);
|
||||
vec3 ambientColor = (netherColor + 0.5 * lavaLightColor) * (0.9 + 0.45 * vsBrightness);
|
||||
#elif defined END
|
||||
float fogLuminance = dot(fogColor, vec3(0.299, 0.587, 0.114));
|
||||
vec3 endLightColor = clamp(mix(fogColor * 0.6 + 0.3 * normalize(fogColor + 0.0001) + 0.25 * (1.0 - fogLuminance), vec3(0.68, 0.51, 1.07), inVanillaEnd * float(END_SKY_FOG_INFLUENCE)), 0.0, 1.0);
|
||||
vec3 endOrangeCol = vec3(E_DRAGON_BEAM_R_NEW, E_DRAGON_BEAM_G_NEW, E_DRAGON_BEAM_B_NEW) * E_DRAGON_BEAM_I;
|
||||
float endLightBalancer = 0.2 * vsBrightness;
|
||||
vec3 lightColor = endLightColor * (0.35 - endLightBalancer);
|
||||
vec3 ambientCol = endLightColor * (0.2 + endLightBalancer);
|
||||
vec3 ambientColor = mix(ambientCol, vec3(END_AMBIENT_R_NEW, END_AMBIENT_G_NEW, END_AMBIENT_B_NEW), END_AMBIENT_INFLUENCE) * END_AMBIENT_I;
|
||||
vec3 endColorBeam = mix(vec3(E_BEAM_R_NEW, E_BEAM_G_NEW, E_BEAM_B_NEW), ambientCol, E_BEAMS_AMBIENT_INFLUENCE);
|
||||
|
||||
#endif
|
||||
|
||||
#endif //INCLUDE_LIGHT_AND_AMBIENT_COLORS
|
||||
@@ -0,0 +1,24 @@
|
||||
#ifndef INCLUDE_MOON_PHASE_INF
|
||||
#define INCLUDE_MOON_PHASE_INF
|
||||
|
||||
#ifdef OVERWORLD
|
||||
#if SUN_MOON_STYLE == 1
|
||||
float moonPhaseFactor = abs(moonPhase - 4.0) * 0.25;
|
||||
|
||||
float halfCheck = step(0.5, moonPhaseFactor);
|
||||
float firstHalf = mix(MOON_PHASE_DARK, MOON_PHASE_PARTIAL, smoothstep(0.0, 0.5, moonPhaseFactor));
|
||||
float secondHalf = mix(MOON_PHASE_PARTIAL, MOON_PHASE_FULL, smoothstep(0.5, 1.0, moonPhaseFactor));
|
||||
|
||||
float moonPhaseFactor2 = mix(firstHalf, secondHalf, halfCheck);
|
||||
float moonPhaseInfluence = mix(1.0, moonPhaseFactor2, 1.0 - sunVisibility2);
|
||||
#else
|
||||
float moonPhaseInfluence = mix(
|
||||
1.0,
|
||||
moonPhase == 0 ? MOON_PHASE_FULL : moonPhase != 4 ? MOON_PHASE_PARTIAL : MOON_PHASE_DARK,
|
||||
1.0 - sunVisibility2
|
||||
);
|
||||
#endif
|
||||
#else
|
||||
float moonPhaseInfluence = 1.0;
|
||||
#endif
|
||||
#endif
|
||||
@@ -0,0 +1,57 @@
|
||||
#ifndef INCLUDE_SKY_COLORS
|
||||
#define INCLUDE_SKY_COLORS
|
||||
|
||||
#ifdef OVERWORLD
|
||||
vec3 skyColorSqrt = sqrt(skyColor);
|
||||
// Doing these things because vanilla skyColor gets to 0 during a thunderstorm
|
||||
float invRainStrength2 = (1.0 - rainStrength) * (1.0 - rainStrength);
|
||||
vec3 skyColorM = mix(max(skyColorSqrt, vec3(0.63, 0.67, 0.73)), skyColorSqrt, invRainStrength2);
|
||||
vec3 skyColorM2 = mix(max(skyColor, sunFactor * vec3(0.265, 0.295, 0.35)), skyColor, invRainStrength2);
|
||||
|
||||
#ifdef SPECIAL_BIOME_WEATHER
|
||||
vec3 nmscSnowM = inSnowy * vec3(-0.1, 0.3, 0.6);
|
||||
vec3 nmscDryM = inDry * vec3(-0.1, -0.2, -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 nuscWeatherM = vec3(0.1, 0.0, 0.1);
|
||||
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(skyColorM, vec3(2.9)) * (vec3(0.85, 0.92, 0.81) + rainFactor * nuscWeatherM);
|
||||
vec3 noonMiddleSkyColor = pow(skyColorM, vec3(1.5)) * (vec3(1.3) + rainFactor * (nmscWeatherM + nmscRainM + nmscSnowM + nmscDryM))
|
||||
+ noonUpSkyColor * 0.65;
|
||||
vec3 noonDownSkyColor = skyColorM * (vec3(0.9) + rainFactor * (ndscWeatherM + ndscRainM + ndscSnowM + ndscDryM))
|
||||
+ noonUpSkyColor * 0.25;
|
||||
|
||||
vec3 sunsetUpSkyColor = skyColorM2 * (vec3(0.72, 0.522, 0.47) + vec3(0.1, 0.2, 0.35) * rainFactor2);
|
||||
vec3 sunsetMiddleSkyColor = skyColorM2 * (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 = 0.9 * vec3(0.07, 0.14, 0.24) * (1.0 - 0.5 * rainFactor) + skyColor;
|
||||
vec3 nightUpSkyColor = pow(nightColFactor, vec3(0.90)) * 0.45;
|
||||
vec3 nightMiddleSkyColor = sqrt(nightUpSkyColor) * 0.65;
|
||||
vec3 nightDownSkyColor = nightMiddleSkyColor * vec3(0.82, 0.82, 0.88);
|
||||
#endif
|
||||
|
||||
#endif //INCLUDE_SKY_COLORS
|
||||
@@ -0,0 +1,403 @@
|
||||
vec3 DoBSLTonemap(vec3 color) {
|
||||
color = TM_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)));
|
||||
|
||||
return pow(color, vec3(1.0 / 2.2));
|
||||
}
|
||||
|
||||
void linearToRGB(inout vec3 color) {
|
||||
const vec3 k = vec3(0.055);
|
||||
color = mix((vec3(1.0) + k) * pow(color, vec3(1.0 / 2.4)) - k, 12.92 * color, lessThan(color, vec3(0.0031308)));
|
||||
}
|
||||
|
||||
void doColorAdjustmentsWithoutExposure(inout vec3 color) {
|
||||
color = pow(color, mix(vec3(T_LOWER_CURVE - 0.10), vec3(T_UPPER_CURVE - 0.30), sqrt(color)));
|
||||
}
|
||||
|
||||
void doColorAdjustments(inout vec3 color) {
|
||||
color = TM_EXPOSURE * color;
|
||||
doColorAdjustmentsWithoutExposure(color);
|
||||
}
|
||||
|
||||
vec3 DoCompTonemap(inout vec3 color) {
|
||||
// Lottes tonemap modified for Complementary Shaders
|
||||
// Lottes 2016, "Advanced Techniques and Optimization of HDR Color Pipelines"
|
||||
// http://32ipi028l5q82yhj72224m8j.wpengine.netdna-cdn.com/wp-content/uploads/2016/03/GdcVdrLottes.pdf
|
||||
color = TM_EXPOSURE * color;
|
||||
|
||||
float colorMax = max(color.r, max(color.g, color.b));
|
||||
float initialLuminance = GetLuminance(color);
|
||||
|
||||
vec3 a = vec3(TM_CONTRAST); // General Contrast
|
||||
vec3 d = vec3(1.0); // Roll-off control
|
||||
vec3 hdrMax = vec3(8.0); // Maximum input brightness
|
||||
vec3 midIn = vec3(0.25); // Input middle gray
|
||||
vec3 midOut = vec3(0.25); // Output middle gray
|
||||
|
||||
vec3 a_d = a * d;
|
||||
vec3 hdrMaxA = pow(hdrMax, a);
|
||||
vec3 hdrMaxAD = pow(hdrMax, a_d);
|
||||
vec3 midInA = pow(midIn, a);
|
||||
vec3 midInAD = pow(midIn, a_d);
|
||||
vec3 HM1 = hdrMaxA * midOut;
|
||||
vec3 HM2 = hdrMaxAD - midInAD;
|
||||
|
||||
vec3 b = (-midInA + HM1) / (HM2 * midOut);
|
||||
vec3 c = (hdrMaxAD * midInA - HM1 * midInAD) / (HM2 * midOut);
|
||||
|
||||
vec3 colorOut = pow(color, a) / (pow(color, a_d) * b + c);
|
||||
|
||||
linearToRGB(colorOut);
|
||||
|
||||
// Remove tonemapping from darker colors for better readability
|
||||
const float darkLiftStart = 0.1;
|
||||
const float darkLiftMix = 0.75;
|
||||
float darkLift = smoothstep(darkLiftStart, 0.0, initialLuminance);
|
||||
vec3 smoothColor = pow(color, vec3(1.0 / 2.2));
|
||||
colorOut = mix(colorOut, smoothColor, darkLift * darkLiftMix * max0(0.55 - abs(1.05 - TM_CONTRAST)) / 0.55);
|
||||
|
||||
// Path to White
|
||||
const float wpInputCurveStart = 0.0;
|
||||
const float wpInputCurveMax = 16.0; // Increase this value to reduce the effect of white path
|
||||
float modifiedLuminance = pow(initialLuminance / wpInputCurveMax, 2.0 - TM_WHITE_PATH) * wpInputCurveMax;
|
||||
float whitePath = smoothstep(wpInputCurveStart, wpInputCurveMax, modifiedLuminance);
|
||||
colorOut = mix(colorOut, vec3(1.0), whitePath);
|
||||
|
||||
// Desaturate dark colors
|
||||
const float dpInputCurveStart = 0.1;
|
||||
const float dpInputCurveMax = 0.0;
|
||||
float desaturatePath = smoothstep(dpInputCurveStart, dpInputCurveMax, initialLuminance);
|
||||
colorOut = mix(colorOut, vec3(GetLuminance(colorOut)), desaturatePath * TM_DARK_DESATURATION);
|
||||
|
||||
doColorAdjustmentsWithoutExposure(colorOut);
|
||||
|
||||
color = clamp01(colorOut);
|
||||
return color;
|
||||
}
|
||||
|
||||
float rollOffBrightValues(vec3 color, float intensity) {
|
||||
float luminance = GetLuminance(color);
|
||||
float rolled = luminance / (1.0 + luminance * intensity);
|
||||
return rolled / max(luminance, 0.0001);
|
||||
}
|
||||
|
||||
float saturationTM = T_SATURATION;
|
||||
|
||||
vec3 LottesTonemap(vec3 color) {
|
||||
// Lottes 2016, "Advanced Techniques and Optimization of HDR Color Pipelines"
|
||||
// http://32ipi028l5q82yhj72224m8j.wpengine.netdna-cdn.com/wp-content/uploads/2016/03/GdcVdrLottes.pdf
|
||||
const vec3 a = vec3(1.3);
|
||||
const vec3 d = vec3(0.95);
|
||||
const vec3 hdrMax = vec3(8.0);
|
||||
const vec3 midIn = vec3(0.25);
|
||||
const vec3 midOut = vec3(0.25);
|
||||
|
||||
const vec3 a_d = a * d;
|
||||
const vec3 hdrMaxA = pow(hdrMax, a);
|
||||
const vec3 hdrMaxAD = pow(hdrMax, a_d);
|
||||
const vec3 midInA = pow(midIn, a);
|
||||
const vec3 midInAD = pow(midIn, a_d);
|
||||
const vec3 HM1 = hdrMaxA * midOut;
|
||||
const vec3 HM2 = hdrMaxAD - midInAD;
|
||||
|
||||
const vec3 b = (-midInA + HM1) / (HM2 * midOut);
|
||||
const vec3 c = (hdrMaxAD * midInA - HM1 * midInAD) / (HM2 * midOut);
|
||||
|
||||
color = pow(color, a) / (pow(color, a_d) * b + c);
|
||||
|
||||
doColorAdjustments(color);
|
||||
|
||||
linearToRGB(color);
|
||||
return color;
|
||||
}
|
||||
|
||||
// From https://github.com/godotengine/godot/blob/master/servers/rendering/renderer_rd/shaders/effects/tonemap.glsl
|
||||
// Adapted from https://github.com/TheRealMJP/BakingLab/blob/master/BakingLab/ACES.hlsl
|
||||
// (MIT License).
|
||||
vec3 ACESTonemap(vec3 color) {
|
||||
float white = ACES_WHITE;
|
||||
const float exposure_bias = ACES_EXPOSURE;
|
||||
|
||||
color *= rollOffBrightValues(color, ACES_BRIGHTNESS_ROLLOFF);
|
||||
|
||||
const float A = 0.0245786f;
|
||||
const float B = 0.000090537f;
|
||||
const float C = 0.983729f;
|
||||
const float D = 0.432951f;
|
||||
const float E = 0.238081f;
|
||||
|
||||
const mat3 rgb_to_rrt = mat3(
|
||||
vec3(0.59719f * exposure_bias, 0.35458f * exposure_bias, 0.04823f * exposure_bias),
|
||||
vec3(0.07600f * exposure_bias, 0.90834f * exposure_bias, 0.01566f * exposure_bias),
|
||||
vec3(0.02840f * exposure_bias, 0.13383f * exposure_bias, 0.83777f * exposure_bias));
|
||||
|
||||
const mat3 odt_to_rgb = mat3(
|
||||
vec3(1.60475f, -0.53108f, -0.07367f),
|
||||
vec3(-0.10208f, 1.10813f, -0.00605f),
|
||||
vec3(-0.00327f, -0.07276f, 1.07602f));
|
||||
color *= rgb_to_rrt;
|
||||
vec3 color_tonemapped = (color * (color + A) - B) / (color * (C * color + D) + E);
|
||||
color_tonemapped *= odt_to_rgb;
|
||||
|
||||
white *= exposure_bias;
|
||||
float white_tonemapped = (white * (white + A) - B) / (white * (C * white + D) + E);
|
||||
|
||||
color = color_tonemapped / white_tonemapped;
|
||||
color = clamp(color, vec3(0.0), vec3(1.0));
|
||||
doColorAdjustments(color);
|
||||
linearToRGB(color);
|
||||
return color;
|
||||
}
|
||||
|
||||
vec3 ACESRedModified(vec3 color) {
|
||||
float white = ACES_WHITE;
|
||||
const float exposure_bias = ACES_EXPOSURE;
|
||||
|
||||
color *= rollOffBrightValues(color, ACES_BRIGHTNESS_ROLLOFF);
|
||||
|
||||
const float A = 0.0245786f;
|
||||
const float B = 0.000090537f;
|
||||
const float C = 0.983729f;
|
||||
const float D = 0.432951f;
|
||||
const float E = 0.238081f;
|
||||
|
||||
const mat3 rgb_to_rrt = mat3(
|
||||
vec3(0.50719f * exposure_bias, 0.40458f * exposure_bias, 0.03823f * exposure_bias),
|
||||
vec3(0.01300f * exposure_bias, 0.90834f * exposure_bias, 0.00966f * exposure_bias),
|
||||
vec3(0.00200f * exposure_bias, 0.15383f * exposure_bias, 0.83777f * exposure_bias));
|
||||
|
||||
const mat3 odt_to_rgb = mat3(
|
||||
vec3(1.60475f, -0.53108f, -0.07367f),
|
||||
vec3(-0.10208f, 1.10813f, -0.00605f),
|
||||
vec3(-0.00327f, -0.07276f, 1.07602f));
|
||||
color *= rgb_to_rrt;
|
||||
vec3 color_tonemapped = (color * (color + A) - B) / (color * (C * color + D) + E);
|
||||
color_tonemapped *= odt_to_rgb;
|
||||
|
||||
white *= exposure_bias;
|
||||
float white_tonemapped = (white * (white + A) - B) / (white * (C * white + D) + E);
|
||||
|
||||
color = color_tonemapped / white_tonemapped;
|
||||
color = clamp(color, vec3(0.0), vec3(1.0));
|
||||
doColorAdjustments(color);
|
||||
linearToRGB(color);
|
||||
return color;
|
||||
}
|
||||
|
||||
// Filmic tonemapping operator made by Jim Hejl and Richard Burgess
|
||||
// Modified by Tech to not lose color information below 0.004
|
||||
vec3 BurgessTonemap(vec3 rgb) {
|
||||
rgb = rgb * min(vec3(1.0), 1.0 - 0.8 * exp(1.0/-0.004 * rgb));
|
||||
rgb = (rgb * (6.2 * rgb + 0.5)) / (rgb * (6.2 * rgb + 1.7) + 0.06);
|
||||
doColorAdjustments(rgb);
|
||||
return rgb;
|
||||
}
|
||||
|
||||
// Hable 2010, "Filmic Tonemapping Operators"
|
||||
vec3 Uncharted2(vec3 x) {
|
||||
x *= 16.0;
|
||||
const float A = 0.15;
|
||||
const float B = 0.50;
|
||||
const float C = 0.10;
|
||||
const float D = 0.20;
|
||||
const float E = 0.02;
|
||||
const float F = 0.30;
|
||||
|
||||
return ((x*(A*x+C*B)+D*E)/(x*(A*x+B)+D*F))-E/F;
|
||||
}
|
||||
|
||||
// Filmic tonemapping operator made by John Hable for Uncharted 2
|
||||
vec3 uncharted2_tonemap_partial(vec3 color) {
|
||||
const float a = 0.15;
|
||||
const float b = 0.50;
|
||||
const float c = 0.10;
|
||||
const float d = 0.20;
|
||||
const float e = 0.02;
|
||||
const float f = 0.30;
|
||||
color = ((color * (a * color + (c * b)) + (d * e)) / (color * (a * color + b) + d * f)) - e / f;
|
||||
doColorAdjustments(color);
|
||||
linearToRGB(color);
|
||||
return color;
|
||||
}
|
||||
|
||||
vec3 uncharted2_filmic(vec3 v) {
|
||||
float exposure_bias = 1.0f;
|
||||
vec3 curr = uncharted2_tonemap_partial(v * exposure_bias);
|
||||
|
||||
vec3 W = vec3(11.2f);
|
||||
vec3 white_scale = vec3(1.0f) / uncharted2_tonemap_partial(W);
|
||||
v = curr * white_scale;
|
||||
doColorAdjustments(v);
|
||||
linearToRGB(v);
|
||||
return v;
|
||||
}
|
||||
|
||||
vec3 reinhard2(vec3 x) {
|
||||
const float L_white = 4.0;
|
||||
linearToRGB(x);
|
||||
x = (x * (1.1 + x / (L_white * L_white))) / (1.0 + x);
|
||||
doColorAdjustments(x);
|
||||
return x;
|
||||
}
|
||||
|
||||
vec3 filmic(vec3 x) {
|
||||
linearToRGB(x);
|
||||
vec3 X = max(vec3(0.0), x - 0.004);
|
||||
vec3 result = (X * (6.2 * X + 0.5)) / (X * (6.2 * X + 1.7) + 0.06);
|
||||
x = pow(result, vec3(2.2));
|
||||
doColorAdjustments(x);
|
||||
return x;
|
||||
}
|
||||
|
||||
float GTTonemap(float x) { // source https://gist.github.com/shakesoda/1dcb3e159f586995ca076c8b21f05a67
|
||||
float m = 0.22; // linear section start
|
||||
float a = 1.0; // contrast
|
||||
float c = 1.33; // black brightness
|
||||
float P = 1.0; // maximum brightness
|
||||
float l = 0.4; // linear section length
|
||||
float l0 = ((P-m)*l) / a; // 0.312
|
||||
float S0 = m + l0; // 0.532
|
||||
float S1 = m + a * l0; // 0.532
|
||||
float C2 = (a*P) / (P - S1); // 2.13675213675
|
||||
float L = m + a * (x - m);
|
||||
float T = m * pow(x/m, c);
|
||||
float S = P - (P - S1) * exp(-C2*(x - S0)/P);
|
||||
float w0 = 1 - smoothstep(0.0, m, x);
|
||||
float w2 = (x < m+l)?0:1;
|
||||
float w1 = 1 - w0 - w2;
|
||||
return float(T * w0 + L * w1 + S * w2);
|
||||
}
|
||||
|
||||
// this costs about 0.2-0.3ms more than aces, as-is
|
||||
vec3 GTTonemap(vec3 x) {
|
||||
linearToRGB(x);
|
||||
x = vec3(GTTonemap(x.r), GTTonemap(x.g), GTTonemap(x.b));
|
||||
doColorAdjustments(x);
|
||||
return x;
|
||||
}
|
||||
|
||||
vec3 uchimura(vec3 x, float P, float a, float m, float l, float c, float b) { //Uchimura, H. (2017). HDR Theory and practice. https://www.slideshare.net/nikuque/hdr-theory-and-practicce-jp; https://github.com/dmnsgn/glsl-tone-map/blob/main/uchimura.glsl
|
||||
float l0 = ((P - m) * l) / a;
|
||||
float L0 = m - m / a;
|
||||
float L1 = m + (1.0 - m) / a;
|
||||
float S0 = m + l0;
|
||||
float S1 = m + a * l0;
|
||||
float C2 = (a * P) / (P - S1);
|
||||
float CP = -C2 / P;
|
||||
|
||||
vec3 w0 = vec3(1.0 - smoothstep(0.0, m, x));
|
||||
vec3 w2 = vec3(step(m + l0, x));
|
||||
vec3 w1 = vec3(1.0 - w0 - w2);
|
||||
|
||||
vec3 T = vec3(m * pow(x / m, vec3(c)) + b);
|
||||
vec3 S = vec3(P - (P - S1) * exp(CP * (x - S0)));
|
||||
vec3 L = vec3(m + a * (x - m));
|
||||
|
||||
return T * w0 + L * w1 + S * w2;
|
||||
}
|
||||
|
||||
vec3 uchimura(vec3 color) {
|
||||
const float P = 1.0; // max display brightness
|
||||
const float a = 1.0; // contrast
|
||||
const float m = 0.22; // linear section start
|
||||
const float l = 0.4; // linear section length
|
||||
const float c = 1.33; // black
|
||||
const float b = 0.0; // pedestal
|
||||
linearToRGB(color);
|
||||
color = uchimura(color, P, a, m, l, c, b);
|
||||
doColorAdjustments(color);
|
||||
return color;
|
||||
}
|
||||
|
||||
vec3 agxDefaultContrastApprox(vec3 x) {
|
||||
vec3 x2 = x * x;
|
||||
vec3 x4 = x2 * x2;
|
||||
|
||||
return x*(+0.12410293f
|
||||
+x*(+0.2078625f
|
||||
+x*(-5.9293431f
|
||||
+x*(+30.376821f
|
||||
+x*(-38.901506f
|
||||
+x*(+15.122061f))))));
|
||||
}
|
||||
|
||||
vec3 agx(vec3 val) {
|
||||
const mat3 agx_mat = mat3(
|
||||
0.842479062253094, 0.0423282422610123, 0.0423756549057051,
|
||||
0.0784335999999992, 0.878468636469772, 0.0784336,
|
||||
0.0792237451477643, 0.0791661274605434, 0.879142973793104);
|
||||
const float minEv = -12.47393f;
|
||||
const float maxEv = 4.026069f;
|
||||
|
||||
// Input transform
|
||||
val = agx_mat * val;
|
||||
|
||||
// Log2 space encoding
|
||||
val = clamp(log2(val), minEv, maxEv);
|
||||
val = (val - minEv) / (maxEv - minEv);
|
||||
|
||||
// Apply sigmoid function approximation
|
||||
val = agxDefaultContrastApprox(val);
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
vec3 inv_agx(vec3 val) {
|
||||
const mat3 inv_agx_mat = mat3(
|
||||
1.1968790051201738155, -0.052896851757456180321, -0.052971635514443794537,
|
||||
-0.098020881140136776078, 1.1519031299041727435, -0.098043450117124120312,
|
||||
-0.099029744079720471434, -0.098961176844843346553, 1.1510736726411610622);
|
||||
|
||||
// Input transform
|
||||
val = inv_agx_mat * val;
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
vec3 agxLook(vec3 val) {
|
||||
const vec3 lw = vec3(0.2126, 0.7152, 0.0722);
|
||||
float luma = dot(val, lw);
|
||||
|
||||
vec3 offset = vec3(0.0);
|
||||
|
||||
#if AGX_LOOK == 0
|
||||
// Default
|
||||
const vec3 slope = vec3(1.0);
|
||||
const vec3 power = vec3(1.0);
|
||||
const float sat = 1.0;
|
||||
#elif AGX_LOOK == 1
|
||||
// Golden
|
||||
const vec3 slope = vec3(1.0, 0.9, 0.5);
|
||||
const vec3 power = vec3(0.8);
|
||||
const float sat = 0.8;
|
||||
#elif AGX_LOOK == 2
|
||||
// Punchy
|
||||
const vec3 slope = vec3(1.0);
|
||||
const vec3 power = vec3(1.35, 1.35, 1.35);
|
||||
const float sat = 1.4;
|
||||
#else
|
||||
const vec3 slope = vec3(AGX_R, AGX_G, AGX_B) / 256;
|
||||
const vec3 power = vec3(AGX_POWER);
|
||||
const float sat = AGX_SATURATION;
|
||||
#endif
|
||||
|
||||
// ASC CDL
|
||||
val = pow(val * slope + offset, power);
|
||||
return luma + sat * (val - luma);
|
||||
}
|
||||
|
||||
vec3 agxTonemap(vec3 color) { // Minimal version of Troy Sobotka's AgX by bwrensch https://www.shadertoy.com/view/mdcSDH
|
||||
color = agx(color);
|
||||
color = agxLook(color);
|
||||
color = inv_agx(color);
|
||||
doColorAdjustments(color);
|
||||
return color;
|
||||
}
|
||||
|
||||
vec3 unreal(vec3 x) { // source: https://mini.gmshaders.com/p/tonemaps
|
||||
// Unreal 3, Documentation: "Color Grading"
|
||||
// Adapted to be close to Tonemap_ACES, with similar range
|
||||
// Gamma 2.2 correction is baked in, don't use with sRGB conversion!
|
||||
return x / (x + 0.155) * 1.019;
|
||||
}
|
||||
@@ -0,0 +1,877 @@
|
||||
/*---------------------------------------------------------------------
|
||||
___ __ __ ____ ___ ____ _____ _ _ _ _____
|
||||
|_ _| \/ | _ \ / _ \| _ \_ _|/ \ | \ | |_ _|
|
||||
| || |\/| | |_) | | | | |_) || | / _ \ | \| | | |
|
||||
| || | | | __/| |_| | _ < | |/ ___ \| |\ | | |
|
||||
|___|_| |_|_| \___/|_| \_\|_/_/ \_\_| \_| |_|
|
||||
|
||||
-> -> -> 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
|
||||
---------------------------------------------------------------------*/
|
||||
|
||||
// PLEASE NOTE:
|
||||
// Euphoria Patches moves a lot of the shader settings to the shaderSettings folder.
|
||||
|
||||
//User Settings//
|
||||
#define SHADER_STYLE 1 //[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 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 3]
|
||||
#define ANISOTROPIC_FILTER 0 //[0 4 8 16]
|
||||
#define ENTITY_SHADOW 1 //[-1 1 2]
|
||||
|
||||
#define COLORED_LIGHTING 0 //[128 192 256 384 512 768 1024]
|
||||
#define WORLD_SPACE_REFLECTIONS -1 //[-1 1]
|
||||
#if defined IRIS_FEATURE_CUSTOM_IMAGES && SHADOW_QUALITY > -1 && !defined MC_OS_MAC && !(defined DH_TERRAIN || defined DH_WATER)
|
||||
#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]
|
||||
|
||||
#if WORLD_SPACE_REFLECTIONS > 0
|
||||
#define WORLD_SPACE_REFLECTIONS_INTERNAL 1
|
||||
#define WORLD_SPACE_PLAYER_REF -1 //[-1 1]
|
||||
#else
|
||||
#define WORLD_SPACE_REFLECTIONS_INTERNAL -1
|
||||
#endif
|
||||
#define WORLD_SPACE_REF_MODE 2 //[1 2]
|
||||
//#define VISUALIZE_WORLD_SPACE_REF
|
||||
|
||||
#define PORTAL_EDGE_EFFECT
|
||||
#ifndef IRIS_HAS_CONNECTED_TEXTURES
|
||||
#define CONNECTED_GLASS_EFFECT
|
||||
#endif
|
||||
#define LAVA_EDGE_EFFECT 0 //[0 1 2]
|
||||
//#define CAVE_SMOKE
|
||||
#else
|
||||
#define WORLD_SPACE_REFLECTIONS_INTERNAL -1
|
||||
#endif
|
||||
#else
|
||||
#define COLORED_LIGHTING_INTERNAL 0
|
||||
#define WORLD_SPACE_REFLECTIONS_INTERNAL -1
|
||||
#endif
|
||||
|
||||
//#define COLORED_CANDLE_LIGHT
|
||||
|
||||
#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_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 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_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 SHADOW_SMOOTHING 4 //[1 2 3 4]
|
||||
#define RAIN_PUDDLES 0 //[0 1 2 3 4]
|
||||
|
||||
#define AURORA_STYLE_DEFINE -1 //[-1 0 1 2]
|
||||
#define NIGHT_NEBULAE -1 //[-1 1]
|
||||
#define NIGHT_NEBULA_I 100 //[10 12 15 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 RAINBOW_STYLE_DEFINE -1 //[-1 1 4]
|
||||
#define CLOUD_STYLE_DEFINE -1 //[-1 0 1 3 50]
|
||||
//#define CLOUD_SHADOWS
|
||||
#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_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 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 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 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 DISTANT_LIGHT_BOKEH
|
||||
#define TAA_MODE 1 //[0 1]
|
||||
#define TAA_SMOOTHING 3 //[2 3 4]
|
||||
#define TAA_JITTER 1 //[0 1 2 3]
|
||||
#define TAA_MOVEMENT_IMPROVEMENT_FILTER 1 //[0 1]
|
||||
#define FXAA_TAA_INTERACTION 10 //[0 2 4 6 8 10]
|
||||
#define FXAA_STRENGTH 75 //[-1 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100]
|
||||
|
||||
#define IPBR_EMISSIVE_MODE 1 //[1 3 2]
|
||||
//#define IPBR_COMPAT_MODE_DEFINE
|
||||
#ifdef IPBR_COMPAT_MODE_DEFINE
|
||||
#define IPBR_COMPAT_MODE
|
||||
#endif
|
||||
|
||||
#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 CAVE_LIGHTING 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 950 1000 1100 1200 1300 1400 1500 1600]
|
||||
|
||||
#define WAVING_RAIN
|
||||
|
||||
#define SPECIAL_PORTAL_EFFECTS
|
||||
#define REFLECTION_RES 0.5 //[1.0 0.5]
|
||||
|
||||
#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 SNOWY_WORLD
|
||||
//#define COLOR_CODED_PROGRAMS
|
||||
|
||||
//#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 LIGHT_COLOR_MULTS
|
||||
//#define ATM_COLOR_MULTS
|
||||
|
||||
#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 XLIGHT_CURVE 1.00 //[0.20 0.25 0.30 0.40 0.50 0.60 0.70 0.80 0.90 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.80 2.00 2.20 2.40 2.60 2.80 3.00]
|
||||
|
||||
|
||||
//════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
|
||||
// ███████╗██╗ ██╗██████╗ ██╗ ██╗ ██████╗ ██████╗ ██╗ █████╗ ██████╗ █████╗ ████████╗ ██████╗██╗ ██╗███████╗███████╗
|
||||
// ██╔════╝██║ ██║██╔══██╗██║ ██║██╔═══██╗██╔══██╗██║██╔══██╗ ██╔══██╗██╔══██╗╚══██╔══╝██╔════╝██║ ██║██╔════╝██╔════╝
|
||||
// █████╗ ██║ ██║██████╔╝███████║██║ ██║██████╔╝██║███████║ ██████╔╝███████║ ██║ ██║ ███████║█████╗ ███████╗
|
||||
// ██╔══╝ ██║ ██║██╔═══╝ ██╔══██║██║ ██║██╔══██╗██║██╔══██║ ██╔═══╝ ██╔══██║ ██║ ██║ ██╔══██║██╔══╝ ╚════██║
|
||||
// ███████╗╚██████╔╝██║ ██║ ██║╚██████╔╝██║ ██║██║██║ ██║ ██║ ██║ ██║ ██║ ╚██████╗██║ ██║███████╗███████║
|
||||
// ╚══════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚══════╝╚══════╝
|
||||
// by SpacEagle17
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////
|
||||
// ╔═════════════════════════════════════════╗//
|
||||
// ║ ║//
|
||||
// ║ █████████████████████████████████ ║//
|
||||
// ║ ██ ▄▄▄▄▄ █▀▄▄▄ █ ▀█▀▀▄ █ ▄▄▄▄▄ ██ ║//
|
||||
// ║ ██ █ █ █▀▄ ▄█▀▀▀▀▀▀█▄█ █ █ ██ ║//
|
||||
// ║ ██ █▄▄▄█ █▀▀█▄▄▀▄▀▄ ▄▄▄█ █▄▄▄█ ██ ║//
|
||||
// ║ ██▄▄▄▄▄▄▄█▄▀▄▀ █ ▀▄█ █▄█▄▄▄▄▄▄▄██ ║//
|
||||
// ║ ██▄ ▄▄▄█▄▄▄ ▄▄ █▀▄▀ ▀ ▀ ▀▄█▄▀██ ║//
|
||||
// ║ ██ █ ▀ ▄█▄ █▀███▄▄▄▄▀▄█ █▄▀█▀███ ║//
|
||||
// ║ ██▀▄▄ ██▄█ █▀▀▄▄▄▄ ▀▀▀█▀▀▀▄▄█▀██ ║//
|
||||
// ║ ██▄▀▄█ ▀▄▄▀▀▄█▀█▀ ▀▄██▀ ▀█ ▄▄▀███ ║//
|
||||
// ║ ██ █▄▄█ ▄ █▀ ▀▀▄▄▀▀ ▀▀ ▀▀ ▀▄ █▀██ ║//
|
||||
// ║ ██ ██ █▄▄█▄▀██▄▀▄ ███▄▄▄ █▄▀███ ║//
|
||||
// ║ ██▄█▄▄██▄▄▀▄ ▀▄▄▄▄▄ █ ▄▄▄ ▀ ██ ║//
|
||||
// ║ ██ ▄▄▄▄▄ █▄▄▀█▄█ ▄ ▄█ █▄█ ▄▄████ ║//
|
||||
// ║ ██ █ █ █ ▀▀ ▄▄▄▄ ▀██▄▄▄ ▄▀ █▀██ ║//
|
||||
// ║ ██ █▄▄▄█ █ ▀ ▀██▀ ▄█ ▀▀ ▄ ▄ ███ ║//
|
||||
// ║ ██▄▄▄▄▄▄▄█▄█▄█▄▄▄█▄▄▄▄███▄▄█▄████ ║//
|
||||
// ║ █████████████████████████████████ ║//
|
||||
// ║ Potato is always watching ║//
|
||||
// ╚═════════════════════════════════════════╝//
|
||||
////////////////////////////////////////////////
|
||||
//#define DAYLIGHT_CYCLE_COMPAT
|
||||
//#define FROZEN_TIME
|
||||
|
||||
//#define AURORA_INFLUENCE
|
||||
|
||||
//#define HIGH_QUALITY_CLOUDS
|
||||
|
||||
#define E_SKY_COLORR_NEW 0.095 // [0.000 0.010 0.015 0.020 0.025 0.030 0.035 0.040 0.045 0.050 0.055 0.060 0.065 0.070 0.075 0.080 0.085 0.090 0.095 0.100 0.105 0.110 0.115 0.120 0.125 0.130 0.135 0.140 0.145 0.150 0.155 0.160 0.165 0.170 0.175 0.180 0.185 0.190 0.195 0.200 0.250 0.300 0.350 0.400 0.450 0.500 0.550 0.600 0.650 0.700 0.750 0.800 0.850 0.900 0.950 1.000]
|
||||
#define E_SKY_COLORG_NEW 0.070 // [0.000 0.010 0.015 0.020 0.025 0.030 0.035 0.040 0.045 0.050 0.055 0.060 0.065 0.070 0.075 0.080 0.085 0.090 0.095 0.100 0.105 0.110 0.115 0.120 0.125 0.130 0.135 0.140 0.145 0.150 0.155 0.160 0.165 0.170 0.175 0.180 0.185 0.190 0.195 0.200 0.250 0.300 0.350 0.400 0.450 0.500 0.550 0.600 0.650 0.700 0.750 0.800 0.850 0.900 0.950 1.000]
|
||||
#define E_SKY_COLORB_NEW 0.150 // [0.000 0.010 0.015 0.020 0.025 0.030 0.035 0.040 0.045 0.050 0.055 0.060 0.065 0.070 0.075 0.080 0.085 0.090 0.095 0.100 0.105 0.110 0.115 0.120 0.125 0.130 0.135 0.140 0.145 0.150 0.155 0.160 0.165 0.170 0.175 0.180 0.185 0.190 0.195 0.200 0.250 0.300 0.350 0.400 0.450 0.500 0.550 0.600 0.650 0.700 0.750 0.800 0.850 0.900 0.950 1.000]
|
||||
#define E_SKY_COLORI 1.65 //[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 END_SKY_FOG_INFLUENCE 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]
|
||||
|
||||
#define DRAGON_DEATH_EFFECT 0 //[0 1 2]
|
||||
#define END_CRYSTAL_VORTEX 0 //[0 1 2 3]
|
||||
//#define END_PORTAL_BEAM
|
||||
|
||||
//#define BIOME_COLORED_NETHER_PORTALS
|
||||
|
||||
//#define MIRROR_DIMENSION
|
||||
//#define WORLD_CURVATURE
|
||||
|
||||
//#define RAIN_ATMOSPHERE
|
||||
|
||||
#define NETHER_BRIGHTNESS 1.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]
|
||||
|
||||
//#define REDSTONE_IPBR
|
||||
#define REDSTONE_IPBR_R 1.000 //[0.000 0.010 0.020 0.030 0.040 0.050 0.060 0.070 0.080 0.090 0.100 0.110 0.120 0.130 0.140 0.150 0.160 0.170 0.180 0.190 0.200 0.210 0.220 0.230 0.240 0.250 0.260 0.270 0.280 0.290 0.300 0.310 0.320 0.330 0.340 0.350 0.360 0.370 0.380 0.390 0.400 0.410 0.420 0.430 0.440 0.450 0.460 0.470 0.480 0.490 0.500 0.510 0.520 0.530 0.540 0.550 0.560 0.570 0.580 0.590 0.600 0.610 0.620 0.630 0.640 0.650 0.660 0.670 0.680 0.690 0.700 0.710 0.720 0.730 0.740 0.750 0.760 0.770 0.780 0.790 0.800 0.810 0.820 0.830 0.840 0.850 0.860 0.870 0.880 0.890 0.900 0.910 0.920 0.930 0.940 0.950 0.960 0.970 0.980 0.990 1.000]
|
||||
#define REDSTONE_IPBR_G 1.000 //[0.000 0.010 0.020 0.030 0.040 0.050 0.060 0.070 0.080 0.090 0.100 0.110 0.120 0.130 0.140 0.150 0.160 0.170 0.180 0.190 0.200 0.210 0.220 0.230 0.240 0.250 0.260 0.270 0.280 0.290 0.300 0.310 0.320 0.330 0.340 0.350 0.360 0.370 0.380 0.390 0.400 0.410 0.420 0.430 0.440 0.450 0.460 0.470 0.480 0.490 0.500 0.510 0.520 0.530 0.540 0.550 0.560 0.570 0.580 0.590 0.600 0.610 0.620 0.630 0.640 0.650 0.660 0.670 0.680 0.690 0.700 0.710 0.720 0.730 0.740 0.750 0.760 0.770 0.780 0.790 0.800 0.810 0.820 0.830 0.840 0.850 0.860 0.870 0.880 0.890 0.900 0.910 0.920 0.930 0.940 0.950 0.960 0.970 0.980 0.990 1.000]
|
||||
#define REDSTONE_IPBR_B 1.000 //[0.000 0.010 0.020 0.030 0.040 0.050 0.060 0.070 0.080 0.090 0.100 0.110 0.120 0.130 0.140 0.150 0.160 0.170 0.180 0.190 0.200 0.210 0.220 0.230 0.240 0.250 0.260 0.270 0.280 0.290 0.300 0.310 0.320 0.330 0.340 0.350 0.360 0.370 0.380 0.390 0.400 0.410 0.420 0.430 0.440 0.450 0.460 0.470 0.480 0.490 0.500 0.510 0.520 0.530 0.540 0.550 0.560 0.570 0.580 0.590 0.600 0.610 0.620 0.630 0.640 0.650 0.660 0.670 0.680 0.690 0.700 0.710 0.720 0.730 0.740 0.750 0.760 0.770 0.780 0.790 0.800 0.810 0.820 0.830 0.840 0.850 0.860 0.870 0.880 0.890 0.900 0.910 0.920 0.930 0.940 0.950 0.960 0.970 0.980 0.990 1.000]
|
||||
#define REDSTONE_IPBR_I 1.0 //[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]
|
||||
|
||||
//#define REFLECTIVE_WORLD
|
||||
//#define WAVE_EVERYTHING
|
||||
#define MONOTONE_WORLD 0 //[0 1 2 3]
|
||||
//#define ATLAS_ROTATION
|
||||
|
||||
#define SEASONS 0 //[0 1 2 3 4 5] 0 = off, 1 = cycling, 2 = summer, 3 = autumn, 4 = winter, 5 = spring
|
||||
#define SEASON_LENGTH 28 //[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120] in MC days: 1, 3, 7, 8, 14, 24, 28, 30, 60 , 91, 120. Default 28 - 672000
|
||||
#define SEASON_TRANSITION_START 4 //[0 1 2 3 4 9] 0 is immediately, 1 is 50%, 2 is 66%, 3 is 75%, 4 is 80%, 9 is 90% of the season
|
||||
#define SEASON_COLOR_DESATURATION 0.3 //[0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
|
||||
#define SEASON_START 3 //[0 1 2 3]
|
||||
#define LEAVES_ON_GROUND
|
||||
|
||||
#if defined LEAVES_ON_GROUND && COLORED_LIGHTING_INTERNAL > 0 && SEASONS > 0
|
||||
#define ACT_GROUND_LEAVES_FIX
|
||||
#endif
|
||||
|
||||
#define SNOW_CONDITION 2 // [0 1 2] 0 = only in snowy biomes when raining, 1 = only in snowy biomes, 2 = everywhere
|
||||
//#define AUTUMN_CONDITION
|
||||
|
||||
//#define MOSS_NOISE
|
||||
//#define SAND_NOISE
|
||||
|
||||
//#define ENTITIES_ARE_LIGHT
|
||||
|
||||
//#define MULTICOLORED_BLOCKLIGHT // Kept for legacy reasons
|
||||
#ifdef MULTICOLORED_BLOCKLIGHT
|
||||
#define SSBL_OVERRIDE
|
||||
#endif
|
||||
#define MCBL_MAIN_DEFINE 0 //[0 1 2 3]
|
||||
#if COLORED_LIGHTING_INTERNAL == 0 || MCBL_MAIN_DEFINE > 1 || defined ENTITIES_ARE_LIGHT
|
||||
#if (MCBL_MAIN_DEFINE >= 1 || defined SSBL_OVERRIDE || defined ENTITIES_ARE_LIGHT) && (MC_VERSION >= 11604 || defined IS_IRIS || defined IS_ANGELICA)
|
||||
#define SS_BLOCKLIGHT
|
||||
#else
|
||||
#undef SS_BLOCKLIGHT
|
||||
#endif
|
||||
#else
|
||||
#undef SS_BLOCKLIGHT
|
||||
#endif
|
||||
|
||||
//#define RANDOM_BLOCKLIGHT
|
||||
#if MCBL_MAIN_DEFINE > 0
|
||||
#undef RANDOM_BLOCKLIGHT
|
||||
#endif
|
||||
#define MCBL_INFLUENCE 1.00 //[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]
|
||||
|
||||
//#define SOUL_SAND_VALLEY_OVERHAUL
|
||||
//#define PURPLE_END_FIRE
|
||||
|
||||
//#define NO_RAIN_ABOVE_CLOUDS
|
||||
//#define CLEAR_SKY_WHEN_RAINING
|
||||
|
||||
#define RETRO_LOOK 0 //[0 1 2]
|
||||
#define RETRO_LOOK_R 0.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]
|
||||
#define RETRO_LOOK_G 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]
|
||||
#define RETRO_LOOK_B 0.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]
|
||||
#define RETRO_LOOK_I 1.00 //[0.25 0.50 0.75 1.00 1.25 1.50 1.75 2.00]
|
||||
|
||||
//#define RENKO_CUT
|
||||
|
||||
#define PIXEL_WATER 0 //[0 1] // Based on Helgust's code
|
||||
|
||||
//#define CELESTIAL_BOTH_HEMISPHERES
|
||||
|
||||
//#define DOUBLE_UNBOUND_CLOUDS // Thanks to FoZy STYLE
|
||||
#define CLOUD_UNBOUND_LAYER2_ALTITUDE 384 //[-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 PIXELATED_WATER_REFLECTIONS // Using Nestorboy's pixelation functions
|
||||
|
||||
#define RENDER_EDGE_FADE_TRANSITION_PERCENT 0.15 // improved DH fading by JoKerTech
|
||||
|
||||
#define END_SUN_ANGLE 0 //[0 -20 -30 -40 -50 -60 60 50 40 30 20]
|
||||
|
||||
#define BORDER_FOG_NETHER
|
||||
#define BORDER_FOG_END
|
||||
#define BORDER_FOG_OVERWORLD
|
||||
|
||||
#define END_CENTER_LIGHTING 0 //[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20]
|
||||
#define END_CENTER_LIGHTING_R 0.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]
|
||||
#define END_CENTER_LIGHTING_G 0.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]
|
||||
#define END_CENTER_LIGHTING_B 0.80 //[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]
|
||||
#define END_CENTER_LIGHTING_AFFECT_BLOCKLIGHT
|
||||
#ifdef END_CENTER_LIGHTING_AFFECT_BLOCKLIGHT
|
||||
#endif
|
||||
#ifdef END_CENTER_LIGHTING
|
||||
#endif
|
||||
|
||||
#define BLOOD_MOON 0 //[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50]
|
||||
|
||||
|
||||
//Internal Settings//
|
||||
#define SIDE_SHADOWING
|
||||
#define SHADOW_FILTERING
|
||||
|
||||
#define GLASS_OPACITY 0.25
|
||||
|
||||
#define DIRECTIONAL_SHADING
|
||||
|
||||
#define ATMOSPHERIC_FOG
|
||||
|
||||
#define GLOWING_ENTITY_FIX
|
||||
#define FLICKERING_FIX
|
||||
//#define SAFER_GENERATED_NORMALS
|
||||
|
||||
#define SHADOW_FRUSTUM_FIT
|
||||
|
||||
#include "/lib/misc/myFile.glsl"
|
||||
|
||||
//Extensions//
|
||||
|
||||
//RP Mode, 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
|
||||
//#define MIRROR_TINTED_GLASS
|
||||
#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
|
||||
#define RAINBOW_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
|
||||
#define RAINBOW_STYLE_DEFAULT 4
|
||||
#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
|
||||
#if RAINBOW_STYLE_DEFINE == -1
|
||||
#define RAINBOW_STYLE RAINBOW_STYLE_DEFAULT
|
||||
#else
|
||||
#define RAINBOW_STYLE RAINBOW_STYLE_DEFINE
|
||||
#endif
|
||||
// Thanks to SpacEagle17 and isuewo for the sun angle handling
|
||||
#ifdef END
|
||||
#if END_SUN_ANGLE == 0
|
||||
const float sunPathRotation = 0.0;
|
||||
#elif END_SUN_ANGLE == 20
|
||||
const float sunPathRotation = 20.0;
|
||||
#elif END_SUN_ANGLE == 30
|
||||
const float sunPathRotation = 30.0;
|
||||
#elif END_SUN_ANGLE == 40
|
||||
const float sunPathRotation = 40.0;
|
||||
#elif END_SUN_ANGLE == 50
|
||||
const float sunPathRotation = 50.0;
|
||||
#elif END_SUN_ANGLE == 60
|
||||
const float sunPathRotation = 60.0;
|
||||
#elif END_SUN_ANGLE == -20
|
||||
const float sunPathRotation = -20.0;
|
||||
#elif END_SUN_ANGLE == -30
|
||||
const float sunPathRotation = -30.0;
|
||||
#elif END_SUN_ANGLE == -40
|
||||
const float sunPathRotation = -40.0;
|
||||
#elif END_SUN_ANGLE == -50
|
||||
const float sunPathRotation = -50.0;
|
||||
#elif END_SUN_ANGLE == -60
|
||||
const float sunPathRotation = -60.0;
|
||||
#endif
|
||||
#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_QUALITY > 4 || SHADOW_SMOOTHING < 3
|
||||
const int shadowMapResolution = 4096;
|
||||
#else
|
||||
const int shadowMapResolution = 2048;
|
||||
#endif
|
||||
#else
|
||||
const int shadowMapResolution = 1024;
|
||||
#endif
|
||||
|
||||
const int noiseTextureResolution = 128;
|
||||
|
||||
#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 DETAIL_QUALITY == 0 // Potato
|
||||
#undef PERPENDICULAR_TWEAKS
|
||||
#define LOW_QUALITY_NETHER_STORM
|
||||
#define LOW_QUALITY_ENDER_NEBULA
|
||||
#define LOW_QUALITY_MOTION_BLUR
|
||||
#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 ACT_CORNER_LEAK_FIX
|
||||
#define DO_NETHER_VINE_WAVING_OUTSIDE_NETHER
|
||||
#define DO_MORE_FOLIAGE_WAVING
|
||||
#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
|
||||
#if DETAIL_QUALITY >= 4 // Not an option yet
|
||||
#define REFLECTION_BLUR_DEPTH_CHECK
|
||||
#endif
|
||||
|
||||
//Define Handling//
|
||||
#if CLOUD_QUALITY == 0
|
||||
#define CLOUD_QUALITY_INTERNAL 0
|
||||
#elif defined HIGH_QUALITY_CLOUDS
|
||||
#define CLOUD_QUALITY_INTERNAL 4
|
||||
#elif CLOUD_QUALITY == 1
|
||||
#define CLOUD_QUALITY_INTERNAL 1
|
||||
#elif CLOUD_QUALITY == 2
|
||||
#define CLOUD_QUALITY_INTERNAL 2
|
||||
#elif CLOUD_QUALITY == 3
|
||||
#define CLOUD_QUALITY_INTERNAL 3
|
||||
#endif
|
||||
#ifdef OVERWORLD
|
||||
#if CLOUD_STYLE > 0 && CLOUD_STYLE != 50 && CLOUD_QUALITY_INTERNAL > 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 AURORA_INFLUENCE
|
||||
#endif
|
||||
#ifdef NETHER
|
||||
#undef ATMOSPHERIC_FOG
|
||||
#endif
|
||||
|
||||
#if defined PIXELATED_SHADOWS || defined PIXELATED_BLOCKLIGHT || defined PIXELATED_AO || defined PIXELATED_WATER_REFLECTIONS
|
||||
#if !defined GBUFFERS_BASIC && !defined DH_TERRAIN && !defined DH_WATER
|
||||
#define DO_PIXELATION_EFFECTS
|
||||
#include "/lib/misc/pixelation.glsl"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef GBUFFERS_TERRAIN
|
||||
#undef PIXELATED_BLOCKLIGHT
|
||||
#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 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
|
||||
|
||||
|
||||
#if SEASONS > 0 || defined GBUFFERS_COLORWHEEL
|
||||
#undef SNOWY_WORLD
|
||||
#endif
|
||||
|
||||
#if AURORA_STYLE == 0
|
||||
#undef AURORA_INFLUENCE
|
||||
#endif
|
||||
|
||||
#if defined END && defined IRIS_FEATURE_CUSTOM_IMAGES && DRAGON_DEATH_EFFECT > 0
|
||||
#if DRAGON_DEATH_EFFECT == 1
|
||||
#define DRAGON_DEATH_EFFECT_INTERNAL 1
|
||||
#elif DRAGON_DEATH_EFFECT == 2
|
||||
#define DRAGON_DEATH_EFFECT_INTERNAL 2
|
||||
#endif
|
||||
#else
|
||||
#define DRAGON_DEATH_EFFECT_INTERNAL 0
|
||||
#endif
|
||||
|
||||
#if defined END && defined IRIS_FEATURE_CUSTOM_IMAGES && END_CRYSTAL_VORTEX > 0
|
||||
#if END_CRYSTAL_VORTEX == 1
|
||||
#define END_CRYSTAL_VORTEX_INTERNAL 1
|
||||
#elif END_CRYSTAL_VORTEX == 2
|
||||
#define END_CRYSTAL_VORTEX_INTERNAL 2
|
||||
#elif END_CRYSTAL_VORTEX == 3
|
||||
#define END_CRYSTAL_VORTEX_INTERNAL 3
|
||||
#else
|
||||
#define END_CRYSTAL_VORTEX_INTERNAL 0
|
||||
#endif
|
||||
#else
|
||||
#define END_CRYSTAL_VORTEX_INTERNAL 0
|
||||
#endif
|
||||
#if defined END_PORTAL_BEAM && defined IRIS_FEATURE_CUSTOM_IMAGES && defined OVERWORLD && !defined MC_OS_MAC
|
||||
#define END_PORTAL_BEAM_INTERNAL
|
||||
#endif
|
||||
#if defined SOUL_SAND_VALLEY_OVERHAUL && defined NETHER
|
||||
#define SOUL_SAND_VALLEY_OVERHAUL_INTERNAL
|
||||
#endif
|
||||
#if defined PURPLE_END_FIRE && defined END
|
||||
#define PURPLE_END_FIRE_INTERNAL
|
||||
#endif
|
||||
#if defined SAND_NOISE && defined OVERWORLD
|
||||
#define SAND_NOISE_INTERNAL
|
||||
#endif
|
||||
#if defined MOSS_NOISE && defined OVERWORLD
|
||||
#define MOSS_NOISE_INTERNAL
|
||||
#endif
|
||||
|
||||
#if defined NETHER && !defined BORDER_FOG_NETHER
|
||||
#undef BORDER_FOG
|
||||
#elif defined END && !defined BORDER_FOG_END
|
||||
#undef BORDER_FOG
|
||||
#elif defined OVERWORLD && !defined BORDER_FOG_OVERWORLD
|
||||
#undef BORDER_FOG
|
||||
#endif
|
||||
|
||||
//Very Common Stuff//
|
||||
#include "/lib/uniforms.glsl"
|
||||
#include "/lib/materials/materialHandling/materialDefines.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
|
||||
|
||||
const vec3 colorSoul = vec3(0.1725, 0.8588, 0.8824);
|
||||
const vec3 colorEndBreath = vec3(0.35, 0.25, 1.0);
|
||||
|
||||
const float pi = 3.14159265359;
|
||||
const float goldenRatio = 1.61803398875;
|
||||
const float tau = 6.28318530717;
|
||||
const float eps = 1e-6;
|
||||
|
||||
const float oceanAltitude = 61.9;
|
||||
|
||||
#ifndef DISTANT_HORIZONS
|
||||
float renderDistance = far;
|
||||
#else
|
||||
float renderDistance = float(dhRenderDistance);
|
||||
#endif
|
||||
|
||||
const float shadowMapBias = 1.0 - 25.6 / shadowDistance;
|
||||
float noonFactor = sqrt(max(sin(timeAngle*6.28318530718),0.0));
|
||||
float nightFactor = max(sin(timeAngle*(-6.28318530718)),0.0);
|
||||
float invNightFactor = 1.0 - nightFactor;
|
||||
float altitudeVisibility = 0.0;
|
||||
|
||||
float cloudHeightM = isnan(cloudHeight) ? 192.0 : cloudHeight; // iris returns "nan" if there are no clouds
|
||||
float cloudHeightOffset = cloudHeightM - 192.0;
|
||||
|
||||
int cloudAlt1i = int(CLOUD_ALT1 + cloudHeightOffset); // Old setting files can send float values
|
||||
|
||||
#ifdef CLOUDS_UNBOUND
|
||||
int cloudAlt2i = int(CLOUD_UNBOUND_LAYER2_ALTITUDE + cloudHeightOffset);
|
||||
#else
|
||||
int cloudAlt2i = int(CLOUD_ALT2 + cloudHeightOffset);
|
||||
#endif
|
||||
|
||||
float cloudMaxAdd = 5.0;
|
||||
#if defined DOUBLE_REIM_CLOUDS && defined CLOUDS_REIMAGINED || defined CLOUDS_UNBOUND && defined DOUBLE_UNBOUND_CLOUDS
|
||||
float maximumCloudsHeight = max(cloudAlt1i, cloudAlt2i) + cloudMaxAdd;
|
||||
#elif CLOUD_STYLE_DEFINE == 50
|
||||
float maximumCloudsHeight = cloudHeightM + cloudMaxAdd;
|
||||
#else
|
||||
float maximumCloudsHeight = cloudAlt1i + cloudMaxAdd;
|
||||
#endif
|
||||
float cloudGradientLength = 20.0; // in blocks, probably...
|
||||
float heightRelativeToCloud = clamp(1.0 - (eyeAltitude - maximumCloudsHeight) / cloudGradientLength, 0.0, 1.0);
|
||||
|
||||
#ifndef NO_RAIN_ABOVE_CLOUDS
|
||||
float rainFactor = rainFactorUniform;
|
||||
float wetnessM = wetness;
|
||||
#else
|
||||
float rainFactor = rainFactorUniform * heightRelativeToCloud;
|
||||
float wetnessM = wetness * heightRelativeToCloud;
|
||||
#endif
|
||||
|
||||
float rainFactor2 = rainFactor * rainFactor;
|
||||
float invRainFactor = 1.0 - rainFactor;
|
||||
float invNoonFactor = 1.0 - noonFactor;
|
||||
float invNoonFactor2 = invNoonFactor * invNoonFactor;
|
||||
|
||||
float vsBrightness = clamp(screenBrightness, 0.0, 1.0);
|
||||
|
||||
float nightVisionWithAddedSupport = screenBrightness > 1.0 ? 1.0 : nightVision; // Add support for fullbright mods
|
||||
#define nightVision nightVisionWithAddedSupport
|
||||
|
||||
int modifiedWorldDay = int(mod(worldDay, 100) + 5.0);
|
||||
#if defined DAYLIGHT_CYCLE_COMPAT || defined FROZEN_TIME
|
||||
float syncedTime = frameTimeCounter;
|
||||
#else
|
||||
float syncedTime = (worldTime + modifiedWorldDay * 24000) * 0.05;
|
||||
#endif
|
||||
|
||||
#if IRIS_VERSION >= 10800
|
||||
ivec3 cameraPositionBestInt = cameraPositionInt;
|
||||
vec3 cameraPositionBestFract = cameraPositionFract;
|
||||
vec3 previousCameraPositionBestFract = previousCameraPositionFract;
|
||||
vec3 cameraPositionBest = cameraPositionBestInt + cameraPositionBestFract;
|
||||
#else
|
||||
ivec3 cameraPositionBestInt = ivec3(floor(cameraPosition));
|
||||
vec3 cameraPositionBestFract = fract(cameraPosition);
|
||||
vec3 previousCameraPositionBestFract = fract(previousCameraPosition);
|
||||
vec3 cameraPositionBest = cameraPosition;
|
||||
#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 = clamp(mix(
|
||||
fogColor * 0.6 + 0.2 * normalize(fogColor + 0.0001),
|
||||
(
|
||||
inNetherWastes * vec3(0.4, 0.14, 0.06) + inCrimsonForest * vec3(0.36, 0.07, 0.05) +
|
||||
inWarpedForest * vec3(0.18, 0.1, 0.25) + inBasaltDeltas * vec3(0.25, 0.235, 0.23) +
|
||||
inSoulValley * vec3(0.1, vec2(0.24))
|
||||
),
|
||||
netherColorMixer
|
||||
) * NETHER_BRIGHTNESS, 0.0, 1.0);
|
||||
#elif NETHER_COLOR_MODE == 2
|
||||
vec3 netherColor = clamp(fogColor * 0.6 + 0.2 * normalize(fogColor + 0.0001) * NETHER_BRIGHTNESS, 0.0, 1.0);
|
||||
#elif NETHER_COLOR_MODE == 0
|
||||
vec3 netherColor = vec3(0.7, 0.26, 0.08) * 0.6 * NETHER_BRIGHTNESS;
|
||||
#endif
|
||||
#ifdef SOUL_SAND_VALLEY_OVERHAUL_INTERNAL
|
||||
vec3 lavaLightColor = mix(vec3(0.15, 0.06, 0.01), vec3(0.034, 0.171, 0.176), inSoulValley);
|
||||
#else
|
||||
vec3 lavaLightColor = vec3(0.15, 0.06, 0.01);
|
||||
#endif
|
||||
|
||||
const vec3 originalEndSkyColor = vec3(E_SKY_COLORR_NEW, E_SKY_COLORG_NEW, E_SKY_COLORB_NEW) * E_SKY_COLORI;
|
||||
vec3 endSkyColor = clamp(mix(originalEndSkyColor, fogColor * 0.25 + 0.1 * normalize(fogColor + 0.0001), (-inVanillaEnd + 1.0) * float(END_SKY_FOG_INFLUENCE) * 0.5), 0.0, 1.60);
|
||||
|
||||
#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
|
||||
|
||||
#include "/lib/util/commonFunctions.glsl"
|
||||
|
||||
#include "/lib/colors/blocklightColors.glsl"
|
||||
|
||||
#include "/lib/materials/seasonsTime.glsl"
|
||||
|
||||
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 * 239.0 = Blue Screen Blue Blocks
|
||||
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 * 251.0 = No SSAO, Reduce Reflection
|
||||
OSIEBCA * 252.0 = Versatile Selection Outline
|
||||
OSIEBCA * 253.0 = Reduced Edge TAA
|
||||
OSIEBCA * 254.0 = No SSAO, No TAA, Reduce Reflection
|
||||
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
|
||||
@@ -0,0 +1,86 @@
|
||||
#ifndef INCLUDE_CLOUD_SHADOWS
|
||||
#define INCLUDE_CLOUD_SHADOWS
|
||||
|
||||
#include "/lib/shaderSettings/cloudsAndLighting.glsl"
|
||||
|
||||
#ifdef CLOUDS_REIMAGINED
|
||||
#include "/lib/atmospherics/clouds/cloudCoord.glsl"
|
||||
#endif
|
||||
|
||||
float GetCloudShadow(vec3 playerPos) {
|
||||
#ifndef OVERWORLD
|
||||
return 1.0;
|
||||
#endif
|
||||
|
||||
float cloudShadow = 1.0;
|
||||
|
||||
vec3 worldPos = playerPos + cameraPosition;
|
||||
#if defined DO_PIXELATION_EFFECTS && defined PIXELATED_SHADOWS
|
||||
//worldPos = playerPosPixelated + cameraPosition; // Disabled for now because cloud shadows are too soft to notice pixelation
|
||||
#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, CLOUD_SHADOW_ROUNDNESS);
|
||||
|
||||
#ifndef COMPOSITE
|
||||
float cloudSample = texture2D(gaux4, cloudPos1).b;
|
||||
#else
|
||||
float cloudSample = texture2D(cloudWaterTex, cloudPos1).b;
|
||||
#endif
|
||||
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, CLOUD_SHADOW_ROUNDNESS);
|
||||
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));
|
||||
cloudShadow = 1.0 - 0.85 * cloudSample;
|
||||
#else
|
||||
vec2 csPos = worldPos.xz + worldPos.y * 0.25;
|
||||
csPos.x += syncedTime;
|
||||
csPos *= 0.000002 * CLOUD_UNBOUND_SIZE_MULT * CLOUD_SHADOW_UNBOUND_SIZE;
|
||||
|
||||
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 += texture2DLod(noisetex, csPos + 0.005 * shadowoffsets[i], 0.0).b;
|
||||
}
|
||||
|
||||
cloudShadow = smoothstep1(pow2(min1(cloudSample * 0.2)));
|
||||
#endif
|
||||
|
||||
cloudShadow = mix(1.0, mix(cloudShadow, 1.0, NIGHT_CLOUD_UNBOUND_REMOVE * (1.0 - sunVisibility)), CLOUD_TRANSPARENCY);
|
||||
|
||||
return cloudShadow;
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,88 @@
|
||||
#include "/lib/misc/reprojection.glsl"
|
||||
vec3 linearRGB_to_Oklab(vec3 c) {
|
||||
// Linear RGB to XYZ
|
||||
float l = 0.4122214708 * c.r + 0.5363325363 * c.g + 0.0514459929 * c.b;
|
||||
float m = 0.2119034982 * c.r + 0.6806995451 * c.g + 0.1073969566 * c.b;
|
||||
float s = 0.0883024619 * c.r + 0.2817188376 * c.g + 0.6299787005 * c.b;
|
||||
|
||||
// XYZ to Oklab
|
||||
float l_ = pow(l, 1.0/3.0);
|
||||
float m_ = pow(m, 1.0/3.0);
|
||||
float s_ = pow(s, 1.0/3.0);
|
||||
|
||||
return vec3(
|
||||
0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_,
|
||||
1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_,
|
||||
0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_
|
||||
);
|
||||
}
|
||||
|
||||
vec3 Oklab_to_linearRGB(vec3 lab) {
|
||||
// Oklab to XYZ
|
||||
float l_ = lab.x + 0.3963377774 * lab.y + 0.2158037573 * lab.z;
|
||||
float m_ = lab.x - 0.1055613458 * lab.y - 0.0638541728 * lab.z;
|
||||
float s_ = lab.x - 0.0894841775 * lab.y - 1.2914855480 * lab.z;
|
||||
|
||||
float l = l_*l_*l_;
|
||||
float m = m_*m_*m_;
|
||||
float s = s_*s_*s_;
|
||||
|
||||
// XYZ to linear RGB
|
||||
return vec3(
|
||||
+4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,
|
||||
-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,
|
||||
-0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s
|
||||
);
|
||||
}
|
||||
|
||||
vec3 saturateMCBL(vec3 color) {
|
||||
vec3 oklab = linearRGB_to_Oklab(color);
|
||||
float L = oklab.x;
|
||||
vec2 ab = oklab.yz;
|
||||
float chroma = length(ab);
|
||||
float maxChroma = 0.11;
|
||||
float targetChroma = min(chroma * 1.7, maxChroma);
|
||||
|
||||
float chromaFactor = (chroma > 0.0001) ? min(targetChroma / chroma, 2.0) : 1.0;
|
||||
ab *= chromaFactor;
|
||||
|
||||
return Oklab_to_linearRGB(vec3(L, ab.xy));
|
||||
}
|
||||
|
||||
vec3 ApplyMultiColoredBlocklight(vec3 blocklightCol, vec3 screenPos, vec3 playerPos, float lmCoord) {
|
||||
float ACTDecider = 1.0;
|
||||
vec4 coloredLight = texture2D(colortex10, screenPos.xy);
|
||||
float lmCoordStep = step(0.1, lmCoord);
|
||||
float entityMask = 0.0;
|
||||
#if MCBL_MAIN_DEFINE == 3
|
||||
entityMask = step(0.5, sqrt3(coloredLight.a)) * lmCoordStep;
|
||||
#endif
|
||||
#if MCBL_MAIN_DEFINE == 2 && COLORED_LIGHTING_INTERNAL != 0
|
||||
vec3 absPlayerPos = abs(playerPos);
|
||||
float maxPlayerPos = max(absPlayerPos.x, max(absPlayerPos.y * 2.0, absPlayerPos.z));
|
||||
ACTDecider = pow2(min1(maxPlayerPos / min(effectiveACTdistance, far) * 2.0)); // this is to make the effect fade at the edge of ACT range
|
||||
if (entityMask < 0.5 && ACTDecider < 0.5) return blocklightCol;
|
||||
#endif
|
||||
|
||||
vec3 cameraOffset = cameraPosition - previousCameraPosition;
|
||||
cameraOffset *= float(screenPos.z * 2.0 - 1.0 > 0.56);
|
||||
|
||||
if (screenPos.z > 0.56) {
|
||||
screenPos.xy = Reprojection(screenPos, cameraOffset);
|
||||
}
|
||||
|
||||
coloredLight.rgb = saturateMCBL(coloredLight.rgb); // make colors pop!
|
||||
|
||||
vec3 coloredLightNormalized = normalize(coloredLight.rgb + 0.00001);
|
||||
|
||||
// do luminance correction for a seamless transition from the default blocklight color
|
||||
coloredLightNormalized *= GetLuminance(blocklightCol) / GetLuminance(coloredLightNormalized);
|
||||
|
||||
float coloredLightMix = min1((coloredLight.r + coloredLight.g + coloredLight.b) * 2048);
|
||||
coloredLightMix = mix(0, coloredLightMix, mix(ACTDecider, 1.0, entityMask));
|
||||
|
||||
// coloredLightNormalized = vec3(2,0,0);
|
||||
|
||||
|
||||
return mix(blocklightCol, coloredLightNormalized, coloredLightMix * clamp01(MCBL_INFLUENCE) * (1.0 - float(isnan(coloredLightNormalized))) * max(sign(lmCoord), 0.0));
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
vec3 GetHeldLighting(vec3 playerPos, vec3 color, inout float emission, vec3 worldGeoNormal, vec3 normalM, vec3 viewPos) {
|
||||
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.rgb; heldLight = 15; } // Lava Bucket
|
||||
if (heldItemId2 == 45032) { heldLightCol2 = lavaSpecialLightColor.rgb; 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
|
||||
|
||||
#ifdef SPACEAGLE17
|
||||
if (heldLight == 0 && heldLight2 == 0 && !firstPersonCamera && entityId != 50017 && !is_invisible && currentPlayerArmor < 0.4 && isOnGround) {
|
||||
float powVal = 1.0 + 1.0 * (cos(frameTimeCounter * 1.5) * 0.5 + 0.5);
|
||||
float anim = 2.8 * max(pow(0.8, powVal), 0.12);
|
||||
heldLight = anim;
|
||||
heldLight2 = anim;
|
||||
heldLightCol = vec3(0.2392, 0.8235, 0.8667);
|
||||
heldLightCol2 = vec3(0.2392, 0.8235, 0.8667);
|
||||
playerPosLightM.y += 0.8;
|
||||
lViewPosL = length(playerPosLightM) + 6.0;
|
||||
lViewPosL = sqrt2(lViewPosL * 0.35) * 1.2;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef DIRECTIONAL_LIGHTMAP_NORMALS
|
||||
vec3 cameraHeldLightPos = (gbufferModelView * vec4(-relativeEyePosition, 1.0)).xyz;
|
||||
vec3 worldGeoNormalView = (gbufferModelView * vec4(worldGeoNormal, 1.0)).xyz;
|
||||
|
||||
cameraHeldLightPos.x += 0.66 * (float(heldLight > 0) - float(heldLight2 > 0)); // Held light position offset
|
||||
|
||||
float dirHandLightmap = clamp01(dot(normalize(cameraHeldLightPos - viewPos), normalM)) + 1.0;
|
||||
float differenceDir = dirHandLightmap - (clamp01(dot(normalize(cameraHeldLightPos - viewPos), worldGeoNormalView)) + 1.0); // Difference between normal and geo normal
|
||||
|
||||
dirHandLightmap = mix(1.0, dirHandLightmap, differenceDir * DIRECTIONAL_LIGHTMAP_NORMALS_HANDHELD_STRENGTH);
|
||||
heldLight *= dirHandLightmap;
|
||||
heldLight2 *= dirHandLightmap;
|
||||
#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
|
||||
|
||||
#if HAND_BLOCKLIGHT_FLICKERING > 0
|
||||
vec2 flickerNoiseHand = texture2DLod(noisetex, vec2(frameTimeCounter * 0.06), 0.0).rb;
|
||||
float flickerMix = mix(1.0, min1(max(flickerNoiseHand.r, flickerNoiseHand.g) * 1.7), pow2(HAND_BLOCKLIGHT_FLICKERING * 0.1));
|
||||
|
||||
heldLighting *= flickerMix;
|
||||
#ifdef GBUFFERS_HAND
|
||||
emission *= mix(1.0, flickerMix, heldLight + heldLight2);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
return heldLighting;
|
||||
}
|
||||
@@ -0,0 +1,816 @@
|
||||
#include "/lib/shaderSettings/mainLighting.glsl"
|
||||
#include "/lib/shaderSettings/cloudsAndLighting.glsl"
|
||||
#include "/lib/shaderSettings/shadowMainLighting.glsl"
|
||||
#include "/lib/shaderSettings/endFlash.glsl"
|
||||
#ifdef AURORA_INFLUENCE
|
||||
#include "/lib/atmospherics/auroraBorealis.glsl"
|
||||
#endif
|
||||
|
||||
//Lighting Includes//
|
||||
#include "/lib/colors/lightAndAmbientColors.glsl"
|
||||
#include "/lib/lighting/ggx.glsl"
|
||||
#include "/lib/lighting/minimumLighting.glsl"
|
||||
|
||||
#if SHADOW_QUALITY > -1 && (defined OVERWORLD || defined END)
|
||||
#include "/lib/lighting/shadowSampling.glsl"
|
||||
#endif
|
||||
|
||||
#if HELD_LIGHTING_MODE >= 1
|
||||
#include "/lib/lighting/heldLighting.glsl"
|
||||
#endif
|
||||
|
||||
#ifdef CLOUD_SHADOWS
|
||||
#include "/lib/lighting/cloudShadows.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/voxelization/lightVoxelization.glsl"
|
||||
#endif
|
||||
|
||||
#if DRAGON_DEATH_EFFECT_INTERNAL > 0
|
||||
#define ENDCRYSTAL_SAMPLER_DEFINE
|
||||
uniform isampler2D endcrystal_sampler;
|
||||
#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, float dither,
|
||||
vec3 worldGeoNormal, vec2 lightmap, bool noSmoothLighting, bool noDirectionalShading, bool noVanillaAO,
|
||||
bool centerShadowBias, int subsurfaceMode, float smoothnessG, float highlightMult, float emission, inout float purkinjeOverwrite, bool isLightSource,
|
||||
inout float enderDragonDead) {
|
||||
#ifdef WORLD_CURVATURE
|
||||
playerPos.y += doWorldCurvature(playerPos.xz);
|
||||
#endif
|
||||
|
||||
vec2 oldLightmap = lightmap.xy;
|
||||
|
||||
#ifdef DO_PIXELATION_EFFECTS
|
||||
vec2 pixelationOffset = ComputeTexelOffset(tex, texCoord);
|
||||
|
||||
#if defined PIXELATED_SHADOWS || defined PIXELATED_BLOCKLIGHT
|
||||
vec3 playerPosPixelated = TexelSnap(playerPos, pixelationOffset);
|
||||
#endif
|
||||
|
||||
#ifdef PIXELATED_SHADOWS
|
||||
#ifdef GBUFFERS_ENTITIES
|
||||
if (entityId == 50076) { // Boats
|
||||
playerPosPixelated.y += 0.38; // consistentBOAT2176
|
||||
}
|
||||
#endif
|
||||
#ifdef GBUFFERS_TERRAIN
|
||||
if (subsurfaceMode == 1) {
|
||||
playerPosPixelated.y += 0.05; // Fixes grounded foliage having dark bottom pixels depending on the random y-offset
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
#ifdef PIXELATED_BLOCKLIGHT
|
||||
if (!noSmoothLighting) {
|
||||
lightmap = clamp(TexelSnap(lightmap, pixelationOffset), 0.0, 1.0);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
float NdotN = dot(normalM, northVec);
|
||||
float absNdotN = abs(NdotN);
|
||||
float NdotE = dot(normalM, eastVec);
|
||||
float absNdotE = abs(NdotE);
|
||||
float NdotL = dot(normalM, lightVec);
|
||||
|
||||
float lightmapY2 = pow2(lightmap.y);
|
||||
float lightmapYM = smoothstep1(lightmap.y);
|
||||
float subsurfaceHighlight = 0.0;
|
||||
float ambientMult = 1.0;
|
||||
vec3 subsurfaceColor = vec3(1.0);
|
||||
#if defined AURORA_INFLUENCE && !(defined DEFERRED1 || defined COMPOSITE1)
|
||||
ambientColor = getAuroraAmbientColor(ambientColor, viewPos, 0.035, AURORA_TERRAIN_INFLUENCE_INTENSITY, 0.9);
|
||||
#endif
|
||||
|
||||
#if BLOOD_MOON > 0
|
||||
float bloodMoonFactor = getBloodMoon(sunVisibility);
|
||||
lightColor *= 1.0 + bloodMoonFactor * vec3(0.6, -0.3, -0.3);
|
||||
ambientColor *= 1.0 + bloodMoonFactor * vec3(0.6, -0.3, -0.3);
|
||||
subsurfaceColor = mix(vec3(1.0), vec3(1.3, 0.2, 0.2), bloodMoonFactor);
|
||||
#endif
|
||||
|
||||
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
|
||||
vec2 lightningAdd = vec2(0);
|
||||
vec2 deathFlashAdd = vec2(0);
|
||||
vec3 lightningPos = vec3(0);
|
||||
#ifdef RAIN_ATMOSPHERE
|
||||
float lightningDistance = 550.0;
|
||||
lightningPos = getLightningPos(playerPos, lightningBoltPosition.xyz, false);
|
||||
float lightningFadeOut = max(1.0 - length(lightningPos) / lightningDistance, 0.0);
|
||||
float lightningFadeOutExp = exp((1.0 - lightningFadeOut) * -15.0);
|
||||
vec3 normalLightning = mat3(gbufferModelViewInverse) * mix(geoNormal, normalM, 0.25);
|
||||
float lightningNormalGradient = 0.12;
|
||||
if (subsurfaceMode == 1) lightningNormalGradient = mix(lightningNormalGradient, 0.45, lightningFadeOutExp);
|
||||
lightningAdd = (lightningFlashEffect(lightningPos, normalLightning, lightningDistance, lightningNormalGradient, subsurfaceMode) * 10.0 + mix(0.1, 0.0 , lightningFadeOut)) * isLightningActive();
|
||||
ambientColorM += lightningAdd.x;
|
||||
#endif
|
||||
#if DRAGON_DEATH_EFFECT_INTERNAL > 0
|
||||
vec3 dragonPosition = vec3(0, 80, 0) - cameraPosition;
|
||||
int isDying = texelFetch(endcrystal_sampler, ivec2(35, 0), 0).r;
|
||||
float dragonDeathFactor = 0.0001 * isDying;
|
||||
float deathFadeFactor = exp(-3.0 * (1.0 - dragonDeathFactor)) * dragonDeathFactor;
|
||||
|
||||
if (dragonDeathFactor < 0.99) {
|
||||
vec3 normalMDeath = mat3(gbufferModelViewInverse) * mix(geoNormal, normalM, 0.5);
|
||||
vec3 deathFlashPos = getLightningPos(playerPos, dragonPosition, true);
|
||||
float effectDistance = 800.0;
|
||||
deathFlashAdd = lightningFlashEffect(deathFlashPos, normalMDeath, effectDistance, 0.0, subsurfaceMode) * 35.0 * deathFadeFactor;
|
||||
ambientColorM *= mix(1.0, 0.0, deathFadeFactor) + deathFlashAdd.x * saturateColors(sqrt(endOrangeCol), 0.5);
|
||||
purkinjeOverwrite = 1.0 * deathFlashAdd.y;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined END && END_CENTER_LIGHTING > 0 && MC_VERSION >= 10900 && (defined GBUFFERS_BLOCK || defined GBUFFERS_ENTITIES || defined GBUFFERS_TERRAIN || defined GBUFFERS_HAND || defined GBUFFERS_WATER)
|
||||
enderDragonDead = 1.0 - texelFetch(colortex5, ivec2(viewWidth-1, viewHeight-1), 0).a;
|
||||
vec3 endCenterCol = saturateColors(vec3(END_CENTER_LIGHTING_R, END_CENTER_LIGHTING_G, END_CENTER_LIGHTING_B) * 0.8, 1.1);
|
||||
vec3 endCenterPos = vec3(0.5, 60.5, 0.5) - (playerPos + cameraPositionBest);
|
||||
endCenterPos.y *= 0.66; // Make it a pill-shaped point light
|
||||
float rawDistance = length(endCenterPos);
|
||||
float endCenterLightDist = exp(-rawDistance * 0.22);
|
||||
|
||||
float endCenterTimeNoise = frameTimeCounter * 0.075;
|
||||
|
||||
// Get the direction of the noise
|
||||
float centerDistance = max(abs(endCenterPos.x), abs(endCenterPos.z)); // Square distance
|
||||
float angleOffset = endCenterTimeNoise * 0.75;
|
||||
vec2 rotatingDir = vec2(cos(angleOffset), sin(angleOffset));
|
||||
float blendFactor = smoothstep(0.5, 3.0, centerDistance); // Prevent artifacts at the center by creating square shape
|
||||
vec2 normalizedDir = mix(rotatingDir, normalize(endCenterPos.xz), blendFactor); // Blend square shape
|
||||
|
||||
vec2 endCenterNoiseBase = endCenterPos.xz * 0.03 + endCenterPos.y * 0.015;
|
||||
vec2 endCenterNoisePos = endCenterNoiseBase - normalizedDir * 0.3 + endCenterTimeNoise * 0.15;
|
||||
float endCenterIntensityNoise = texture2DLod(noisetex, endCenterNoisePos, 0.0).r;
|
||||
float endCenterNoiseVariation = sin(endCenterTimeNoise * 6.0 + dot(endCenterPos.xy, endCenterPos.yz) * 0.01);
|
||||
float endCenterNoiseIntensity = 0.7 + 0.35 * endCenterIntensityNoise + 0.2 * endCenterNoiseVariation;
|
||||
|
||||
// Hybrid lighting calculation - directional for walls, ambient for floors
|
||||
vec3 transformedNormal = mat3(gbufferModelViewInverse) * normalM;
|
||||
float normalDot = clamp01(dot(normalize(endCenterPos), transformedNormal));
|
||||
float isFloor = clamp01(dot(transformedNormal, vec3(0.0, 1.0, 0.0)) * 2.0);
|
||||
|
||||
// Strong directional lighting for walls, softer lighting for floors
|
||||
float directionalFactor = normalDot * 1.3;
|
||||
float floorFactor = 0.6 + 0.25 * normalDot;
|
||||
float endCenterLight = endCenterLightDist * mix(directionalFactor, floorFactor, isFloor);
|
||||
|
||||
ambientColorM += endCenterLight * endCenterCol * endCenterNoiseIntensity * 5.0 * enderDragonDead;
|
||||
#else
|
||||
enderDragonDead = 1.0;
|
||||
#endif
|
||||
|
||||
int oldSubsurfaceMode = subsurfaceMode;
|
||||
#if SSS_STRENGTH == 0
|
||||
subsurfaceMode = 0;
|
||||
#endif
|
||||
|
||||
#ifdef OVERWORLD
|
||||
float skyLightShadowMult = pow2(pow2(lightmapY2));
|
||||
#else
|
||||
float skyLightShadowMult = 1.0;
|
||||
#endif
|
||||
|
||||
#if defined CUSTOM_PBR || defined GENERATED_NORMALS
|
||||
float NPdotU = abs(dot(geoNormal, upVec));
|
||||
#endif
|
||||
|
||||
// Shadows
|
||||
#if defined OVERWORLD || defined END
|
||||
#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
|
||||
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_SHADOW == -1 && defined GBUFFERS_ENTITIES || ENTITY_SHADOW <= 1 && 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;
|
||||
|
||||
#if !defined DH_TERRAIN && !defined DH_WATER
|
||||
float shadowLength = shadowDistance * 0.9166667 - lViewPos; //consistent08JJ622
|
||||
#else
|
||||
float shadowLength = 0.0;
|
||||
#endif
|
||||
|
||||
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;
|
||||
vec3 centerPlayerPos = floor(playerPos + cameraPosition + worldGeoNormal * 0.01) - cameraPosition + 0.5;
|
||||
|
||||
#if defined DO_PIXELATION_EFFECTS && defined PIXELATED_SHADOWS
|
||||
playerPosM = playerPosPixelated;
|
||||
offset *= 0.75;
|
||||
#endif
|
||||
|
||||
// Fix light leaking in caves //
|
||||
#ifdef GBUFFERS_TERRAIN
|
||||
if (centerShadowBias || subsurfaceMode == 1) {
|
||||
#ifdef OVERWORLD
|
||||
playerPosM = mix(centerPlayerPos, playerPosM, 0.5 + 0.5 * lightmapYM);
|
||||
#endif
|
||||
} else {
|
||||
float centerFactor = max(glColor.a, lightmapYM);
|
||||
|
||||
#if defined PERPENDICULAR_TWEAKS && SHADOW_QUALITY >= 2 && !defined DH_TERRAIN
|
||||
// Fake Variable Penumbra Shadows
|
||||
// Making centerFactor also work in daylight if AO gradient is facing towards sun
|
||||
if (geoNdotU > 0.99) {
|
||||
float dFdxGLCA = dFdx(glColor.a);
|
||||
float dFdyGLCA = dFdy(glColor.a);
|
||||
|
||||
if (abs(dFdxGLCA) + abs(dFdyGLCA) > 0.00001) {
|
||||
vec3 aoGradView = dFdxGLCA * normalize(dFdx(playerPos.xyz))
|
||||
+ dFdyGLCA * normalize(dFdy(playerPos.xyz));
|
||||
if (dot(normalize(aoGradView.xz), normalize(ViewToPlayer(lightVec).xz)) < 0.3 + 0.4 * dither)
|
||||
if (dot(lightVec, upVec) < 0.99999) centerFactor = sqrt1(max0(glColor.a - 0.55) / 0.45);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
playerPosM = mix(playerPosM, centerPlayerPos, 0.2 * (1.0 - pow2(pow2(centerFactor))));
|
||||
}
|
||||
#elif defined GBUFFERS_HAND
|
||||
playerPosM = mix(vec3(0.0), playerPosM, 0.2 + 0.8 * lightmapYM);
|
||||
#elif defined GBUFFERS_TEXTURED
|
||||
playerPosM = mix(centerPlayerPos, playerPosM + vec3(0.0, 0.02, 0.0), lightmapYM);
|
||||
#else
|
||||
playerPosM = mix(playerPosM, centerPlayerPos, 0.2 * (1.0 - lightmapYM));
|
||||
#endif
|
||||
|
||||
// Shadow bias without peter-panning //
|
||||
#ifndef GBUFFERS_TEXTURED
|
||||
#ifdef GBUFFERS_TERRAIN
|
||||
if (subsurfaceMode != 1)
|
||||
#endif
|
||||
{
|
||||
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
|
||||
|
||||
#if defined GBUFFERS_TERRAIN && !defined DH_TERRAIN
|
||||
if (subsurfaceMode == 2) {
|
||||
bias *= vec3(0.0, 0.0, -0.5);
|
||||
bias.z += 0.25 * signMidCoordPos.x * NdotE;
|
||||
}
|
||||
#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.0005235 * 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
|
||||
|
||||
int shadowSampleBooster = int(subsurfaceMode > 0 && lViewPos < 10.0);
|
||||
#if SHADOW_QUALITY == 0
|
||||
int shadowSamples = 0; // We don't use SampleTAAFilteredShadow on Shadow Quality 0
|
||||
#elif SHADOW_QUALITY == 1
|
||||
int shadowSamples = 1 + shadowSampleBooster;
|
||||
#elif SHADOW_QUALITY == 2 || SHADOW_QUALITY == 3
|
||||
int shadowSamples = 2 + 2 * shadowSampleBooster;
|
||||
#elif SHADOW_QUALITY == 4
|
||||
int shadowSamples = 4 + 4 * shadowSampleBooster;
|
||||
#elif SHADOW_QUALITY == 5
|
||||
int shadowSamples = 8 + 8 * shadowSampleBooster;
|
||||
#endif
|
||||
|
||||
shadowMult *= GetShadow(shadowPos, lightmap.y, offset, shadowSamples, 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
|
||||
shadowMult *= GetCloudShadow(playerPos);
|
||||
#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
|
||||
|
||||
#ifdef END_FLASH_SHADOW_INTERNAL
|
||||
shadowMult = mix(vec3(1.0), (shadowMult) * 2.0, endFlashIntensity);
|
||||
#endif
|
||||
|
||||
// Blocklight
|
||||
float lightmapXM;
|
||||
#if defined LIGHTMAP_CURVES && !defined GBUFFERS_TEXTURED
|
||||
if (!noSmoothLighting || oldSubsurfaceMode > 0 && !isLightSource) {
|
||||
float lx4 = pow2(pow2(lightmap.x));
|
||||
float lx8 = pow2(lx4);
|
||||
float vsBrightFactor = 2.8 - 0.6 * vsBrightness + XLIGHT_CURVE;
|
||||
|
||||
float transitionFactor = ((UPPER_LIGHTMAP_CURVE * 0.1 + 0.9) - 1.0) *
|
||||
mix(1.0, 10.0, float(int(max(0.0, UPPER_LIGHTMAP_CURVE - 0.01))));
|
||||
|
||||
float transitions = (pow2(lx8) * (10 - vsBrightness) * 2 +
|
||||
lx8 * (2.8 + XLIGHT_CURVE - vsBrightness) * 0.8 +
|
||||
lx4 * (2.8 + XLIGHT_CURVE - vsBrightness * 0.7)) * transitionFactor;
|
||||
|
||||
float lightmapXMSteep = max(0.0, pow2(pow2(lightmap.x * lightmap.x)) * vsBrightFactor + transitions);
|
||||
float lightmapXMCalm = lightmap.x * (2.8 - XLIGHT_CURVE + 0.6 * vsBrightness) * LOWER_LIGHTMAP_CURVE;
|
||||
lightmapXM = pow(lightmapXMSteep + lightmapXMCalm, 2.25);
|
||||
} else {
|
||||
float xLightCurveM = XLIGHT_CURVE > 0.999 ? XLIGHT_CURVE : sqrt2(XLIGHT_CURVE);
|
||||
lightmapXM = pow(lightmap.x, 3.0 * xLightCurveM) * 10.0 * pow(lightmap.x, pow2(UPPER_LIGHTMAP_CURVE)) * UPPER_LIGHTMAP_CURVE * (UPPER_LIGHTMAP_CURVE * 0.7 + 0.3);
|
||||
}
|
||||
#else
|
||||
if (!noSmoothLighting) {
|
||||
float lightmapXMSteep = pow2(pow2(lightmap.x * lightmap.x)) * (2.8 - 0.6 * vsBrightness + XLIGHT_CURVE);
|
||||
float lightmapXMCalm = lightmap.x * (2.8 + 0.6 * vsBrightness - XLIGHT_CURVE);
|
||||
lightmapXM = pow(lightmapXMSteep + lightmapXMCalm, 2.25);
|
||||
} else {
|
||||
float xLightCurveM = XLIGHT_CURVE > 0.999 ? XLIGHT_CURVE : sqrt2(XLIGHT_CURVE);
|
||||
lightmapXM = pow(lightmap.x, 3.0 * xLightCurveM) * 10.0;
|
||||
}
|
||||
#endif
|
||||
|
||||
float daylightFactor = lightmapYM * invRainFactor * sunVisibility;
|
||||
emission *= 1.0 - 0.25 * daylightFactor; // Less emission under direct skylight
|
||||
|
||||
#ifdef GBUFFERS_TEXTURED
|
||||
lightmapXM *= 1.5 - 0.5 * daylightFactor; // Brighter lit particles
|
||||
#endif
|
||||
|
||||
#if defined DIRECTIONAL_LIGHTMAP_NORMALS && (defined GBUFFERS_TERRAIN || defined GBUFFERS_WATER || defined GBUFFERS_BLOCK)
|
||||
if (oldLightmap.x > 0.035) { // very specific value, do not change
|
||||
float lightmapDir = lightmapXM;
|
||||
#ifdef USE_FINE_DERIVATIVES
|
||||
vec2 dFdBlock = vec2(dFdxFine(oldLightmap.x), dFdyFine(oldLightmap.x)); // Get higher precision derivatives when available
|
||||
#else
|
||||
vec2 dFdBlock = vec2(dFdx(oldLightmap.x), dFdy(oldLightmap.x));
|
||||
#endif
|
||||
vec3 blockLightDir;
|
||||
|
||||
if (length(dFdBlock) < 1e-6) {
|
||||
vec3 blockCenterPos = floor(playerPos + cameraPosition + 0.001 * worldGeoNormal) - cameraPosition + 0.5; // + 0.001 fixes percision issues
|
||||
blockLightDir = blockCenterPos - worldGeoNormal * dot(worldGeoNormal, blockCenterPos - playerPos) - playerPos;
|
||||
blockLightDir = mat3(gbufferModelView) * blockLightDir;
|
||||
} else {
|
||||
#ifdef USE_FINE_DERIVATIVES
|
||||
blockLightDir = dFdxFine(viewPos) * dFdBlock.x + dFdyFine(viewPos) * dFdBlock.y; // Get higher precision derivatives when available
|
||||
#else
|
||||
blockLightDir = dFdx(viewPos) * dFdBlock.x + dFdy(viewPos) * dFdBlock.y;
|
||||
#endif
|
||||
}
|
||||
float dotNormal = dot(normalize(blockLightDir), normalM);
|
||||
|
||||
lightmapDir *= pow(dotNormal + 1.0, DIRECTIONAL_LIGHTMAP_NORMALS_BLOCK_STRENGTH_NEW + 0.25);
|
||||
lightmapXM = mix(lightmapXM, lightmapDir, 0.01 * max0(100.0 - lViewPos));
|
||||
}
|
||||
#endif
|
||||
|
||||
#if BLOCKLIGHT_FLICKERING > 0
|
||||
vec2 flickerNoiseBlock = texture2DLod(noisetex, vec2(frameTimeCounter * 0.06), 0.0).rb;
|
||||
lightmapXM *= mix(1.0, min1(max(flickerNoiseBlock.r, flickerNoiseBlock.g) * 1.7), pow2(BLOCKLIGHT_FLICKERING * 0.1));
|
||||
#endif
|
||||
|
||||
#ifdef RANDOM_BLOCKLIGHT
|
||||
float RandR = texture2DLod(noisetex, 0.00016 * RANDOM_BLOCKLIGHT_SIZE * (playerPos.xz + cameraPosition.xz), 0.0).r * XLIGHT_R;
|
||||
float RandG = texture2DLod(noisetex, 0.00029 * RANDOM_BLOCKLIGHT_SIZE * (playerPos.xz + cameraPosition.xz), 0.0).r * XLIGHT_G;
|
||||
float RandB = texture2DLod(noisetex, 0.00034 * RANDOM_BLOCKLIGHT_SIZE * (playerPos.xz + cameraPosition.xz), 0.0).r * XLIGHT_B;
|
||||
blocklightCol = vec3(RandR, RandG, RandB) * 0.875;
|
||||
#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 ACT_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 = max(lightmapXM, mix(lightmapXM, 10.0, lightVolume.a));
|
||||
specialLighting *= 1.0 + 50.0 * lightVolume.a;
|
||||
|
||||
purkinjeOverwrite += 17.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 / effectiveACTdistance * 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 defined END && END_CENTER_LIGHTING > 0 && MC_VERSION >= 10900 && defined END_CENTER_LIGHTING_AFFECT_BLOCKLIGHT && (defined GBUFFERS_BLOCK || defined GBUFFERS_ENTITIES || defined GBUFFERS_TERRAIN || defined GBUFFERS_HAND)
|
||||
blockLighting = mix(blockLighting, lightmapXM * clamp01(saturateColors(endCenterCol, 1.3)), clamp01(endCenterLightDist) * enderDragonDead);
|
||||
#endif
|
||||
|
||||
#if HELD_LIGHTING_MODE >= 1
|
||||
#if !defined DO_PIXELATION_EFFECTS || !defined PIXELATED_BLOCKLIGHT
|
||||
vec3 playerPosForHeldLighting = playerPos;
|
||||
#else
|
||||
vec3 playerPosForHeldLighting = playerPosPixelated;
|
||||
#endif
|
||||
|
||||
vec3 heldLighting = GetHeldLighting(playerPosForHeldLighting, color.rgb, emission, worldGeoNormal, normalM, viewPos);
|
||||
|
||||
#ifdef GBUFFERS_HAND
|
||||
blockLighting *= 0.5;
|
||||
heldLighting *= 2.0;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
vec3 minLighting = GetMinimumLighting(lightmapYM, playerPos);
|
||||
vec3 shadowLightMult = shadowMult;
|
||||
float shadowMultFloat = min1(GetLuminance(shadowMult));
|
||||
|
||||
// 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
|
||||
#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);
|
||||
#else
|
||||
#define AMBIENT_MULT_M (AMBIENT_MULT - 100) * 0.002
|
||||
shadowLightMult = mix(shadowLightMult, vec3(1.0), AMBIENT_MULT_M);
|
||||
lightColorM = mix(lightColorM, GetLuminance(lightColorM) * DoLuminanceCorrection(ambientColorM), (1.0 - shadowMultFloat) * AMBIENT_MULT_M);
|
||||
#endif
|
||||
#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(shadowMultFloat);
|
||||
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 END
|
||||
#if defined IS_IRIS && MC_VERSION >= 12109
|
||||
vec3 worldEndFlashPosition = mat3(gbufferModelViewInverse) * endFlashPosition;
|
||||
worldEndFlashPosition = normalize(vec3(worldEndFlashPosition.x, 0.0, worldEndFlashPosition.z));
|
||||
float endFlashDirectionFactor = max0(1.0 + dot(worldGeoNormal, normalize(worldEndFlashPosition))) * 0.5;
|
||||
endFlashDirectionFactor = pow2(pow2(endFlashDirectionFactor));
|
||||
|
||||
vec3 endFlashColor = (endOrangeCol + 0.5 * endLightColor) * endFlashIntensity * pow2(lightmapYM);
|
||||
ambientColorM += endFlashColor * (0.2 * endFlashDirectionFactor);
|
||||
#endif
|
||||
#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 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) * 0.8 - absNdotE2 * 0.2);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
// Scene Lighting Stuff
|
||||
vec3 sceneLighting = lightColorM * shadowLightMult + ambientColorM * ambientMult;
|
||||
float dotSceneLighting = dot(sceneLighting, sceneLighting);
|
||||
|
||||
#if HELD_LIGHTING_MODE >= 1
|
||||
blockLighting = sqrt(pow2(blockLighting) + heldLighting);
|
||||
#endif
|
||||
|
||||
blockLighting *= XLIGHT_I;
|
||||
|
||||
#ifdef BLOCKLIGHT_CAUSTICS
|
||||
if (isEyeInWater == 1) {
|
||||
vec3 worldPos = playerPos + cameraPosition;
|
||||
#if defined DO_PIXELATION_EFFECTS && defined PIXELATED_SHADOWS
|
||||
worldPos = playerPosPixelated + cameraPosition;
|
||||
#endif
|
||||
|
||||
float causticTime = frameTimeCounter * 0.045;
|
||||
mat2 rot = rotate(causticTime * 35);
|
||||
|
||||
vec3 absNormal = abs(worldGeoNormal);
|
||||
vec2 basePos = absNormal.y > max(absNormal.x, absNormal.z) ? worldPos.xz :
|
||||
absNormal.x > absNormal.z ? worldPos.yz : worldPos.xy;
|
||||
|
||||
basePos *= 1.35;
|
||||
|
||||
// Opposing directional movement for the two layers
|
||||
vec2 causticWind1 = vec2(causticTime * 0.3, causticTime * 0.15);
|
||||
vec2 causticWind2 = vec2(-causticTime * 0.17, -causticTime * 0.22);
|
||||
|
||||
vec2 cPos1 = basePos * 0.10 + causticWind1;
|
||||
vec2 cPos2 = basePos * 0.05 + causticWind2;
|
||||
|
||||
float gradientNoise = fract(52.9829189 * fract(0.06711056 * gl_FragCoord.x + 0.00583715 * gl_FragCoord.y));
|
||||
#ifdef TAA
|
||||
gradientNoise = fract(gradientNoise + 0.618034 * mod(float(frameCounter), 3600.0));
|
||||
#endif
|
||||
|
||||
float caustic = 0.0;
|
||||
int causticSamples = 4;
|
||||
|
||||
for (int i = 0; i < causticSamples; i++) {
|
||||
vec2 offset1 = causticOffsetDist(gradientNoise + float(i), causticSamples);
|
||||
vec2 offset2 = causticOffsetDist(gradientNoise + float(i) + 0.5, causticSamples);
|
||||
|
||||
offset1 = rot * offset1;
|
||||
offset2 = rot * offset2;
|
||||
|
||||
vec4 sample1a = texture2D(gaux4, cPos1 + offset1);
|
||||
vec4 sample1b = texture2D(gaux4, cPos1 - offset1);
|
||||
vec4 sample2a = texture2D(gaux4, cPos2 + offset2);
|
||||
vec4 sample2b = texture2D(gaux4, cPos2 - offset2);
|
||||
|
||||
float caustic1 = dot(sample1a.rg - sample1b.rg, vec2(6.0));
|
||||
float caustic2 = dot(sample2a.rg - sample2b.rg, vec2(6.0));
|
||||
|
||||
caustic += caustic1 + caustic2;
|
||||
}
|
||||
|
||||
caustic /= causticSamples;
|
||||
|
||||
caustic = clamp(caustic, -0.15, 2.0) * 0.52 + 0.587;
|
||||
blockLighting *= caustic * WATER_CAUSTIC_STRENGTH;
|
||||
}
|
||||
#endif
|
||||
|
||||
#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, shadowMultFloat);
|
||||
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
|
||||
|
||||
#ifdef RAIN_ATMOSPHERE
|
||||
vanillaAO += lightningAdd.y * 0.1 * (-vanillaAO + 1);
|
||||
#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 * subsurfaceColor + specularHighlight) * highlightColor;
|
||||
|
||||
#ifdef LIGHT_COLOR_MULTS
|
||||
lightHighlight *= lightColorMult;
|
||||
#endif
|
||||
#ifdef MOON_PHASE_INF_REFLECTION
|
||||
lightHighlight *= pow2(moonPhaseInfluence);
|
||||
#endif
|
||||
#if BLOOD_MOON > 0
|
||||
lightHighlight *= mix(vec3(1.0), vec3(1.0, 0.1294, 0.1294), getBloodMoon(sunVisibility));
|
||||
#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);
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
vec3 GetMinimumLighting(float lightmapYM, vec3 playerPos) {
|
||||
float fadeMinLightDistance = 1.0;
|
||||
#if DISTANCE_MIN_LIGHT > 0
|
||||
float blockMinLightFadeDistance = 250;
|
||||
float distMinLightIntensity = DISTANCE_MIN_LIGHT * 0.1;
|
||||
fadeMinLightDistance = max(1.0 - length(playerPos) / blockMinLightFadeDistance, 0.0);
|
||||
fadeMinLightDistance = exp((1.0 - fadeMinLightDistance) * -15.0 * distMinLightIntensity) * (1.0 - nightVision) + nightVision;
|
||||
#endif
|
||||
|
||||
#if !defined END && CAVE_LIGHTING > 0
|
||||
vec3 minLighting = vec3(0.005625 + vsBrightness * 0.043) * fadeMinLightDistance;
|
||||
#if CAVE_LIGHTING != 100
|
||||
#define CAVE_LIGHTING_M CAVE_LIGHTING * 0.01
|
||||
minLighting *= CAVE_LIGHTING_M;
|
||||
#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);
|
||||
|
||||
return minLighting;
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
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 offset, int shadowSamples, bool leaves, float colorMult, float colorPow) {
|
||||
vec3 shadow = vec3(0.0);
|
||||
float gradientNoise = InterleavedGradientNoiseForShadows();
|
||||
|
||||
#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 lightmapY, float offset, int shadowSamples, bool leaves) {
|
||||
#if SHADOW_QUALITY > 0
|
||||
#if ENTITY_SHADOW <= 1 && defined GBUFFERS_BLOCK
|
||||
offset *= 4.0;
|
||||
#else
|
||||
#ifdef OVERWORLD
|
||||
offset *= 1.0 + rainFactor2
|
||||
#ifdef SUN_MOON_DURING_RAIN
|
||||
* 2.0
|
||||
#else
|
||||
* 4.0
|
||||
#endif
|
||||
;
|
||||
#else
|
||||
offset *= 3.0;
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
float colorMult = 2.5 + 5.5 * pow1_5(lightmapY) + 2.0 * pow2(lightmapY); // 423HDSS: Shadow color strength is stored 10 times lower to allow for water shadows going above 1.0
|
||||
float colorPow = mix(1.5 + 0.5 * float(isEyeInWater == 0), 0.5, pow2(pow2(lightmapY)));
|
||||
|
||||
#if SHADOW_QUALITY >= 1
|
||||
vec3 shadow = SampleTAAFilteredShadow(shadowPos, offset, shadowSamples, leaves, colorMult, colorPow);
|
||||
#else
|
||||
vec3 shadow = SampleBasicFilteredShadow(shadowPos, offset);
|
||||
#endif
|
||||
|
||||
return shadow;
|
||||
}
|
||||
@@ -0,0 +1,123 @@
|
||||
if (blockEntityId < 5028) {
|
||||
if (blockEntityId < 5012) {
|
||||
if (blockEntityId < 5004) {
|
||||
if (blockEntityId == 5000) { //
|
||||
|
||||
} else { // blockEntityId < 5000
|
||||
|
||||
}
|
||||
} else {
|
||||
if (blockEntityId == 5004) { // 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 == 5008)*/ { // Chest
|
||||
noSmoothLighting = true;
|
||||
|
||||
smoothnessG = pow2(color.g);
|
||||
|
||||
#ifdef COATED_TEXTURES
|
||||
noiseFactor = 0.66;
|
||||
#endif
|
||||
redstoneIPBR(color.rgb, emission);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (blockEntityId < 5020) {
|
||||
if (blockEntityId == 5012) { // 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;
|
||||
#if SEASONS == 1 || SEASONS == 4 || defined MOSS_NOISE_INTERNAL || defined SAND_NOISE_INTERNAL
|
||||
overlayNoiseIntensity = 0.7;
|
||||
if (dot(normal, upVec) > 0.99) {
|
||||
#if SNOW_CONDITION < 2 && SNOW_CONDITION != 0
|
||||
emission = mix(emission, emission * 0.8, inSnowy);
|
||||
#elif SNOW_CONDITION == 0
|
||||
emission = mix(emission, emission * 0.8, rainFactor * inSnowy);
|
||||
#else
|
||||
emission *= 0.8;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef COATED_TEXTURES
|
||||
noiseFactor = 0.66;
|
||||
#endif
|
||||
} else /*if (blockEntityId == 5016)*/ { // Shulker Box+, Banner+, Head+, Bed+
|
||||
noSmoothLighting = true;
|
||||
#ifdef COATED_TEXTURES
|
||||
noiseFactor = 0.2;
|
||||
#endif
|
||||
}
|
||||
} else {
|
||||
if (blockEntityId == 5020) { // 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);
|
||||
}
|
||||
overlayNoiseIntensity = 0.3;
|
||||
} else /*if (blockEntityId == 5024)*/ { // End Portal, End Gateway
|
||||
#ifdef SPECIAL_PORTAL_EFFECTS
|
||||
#include "/lib/materials/specificMaterials/others/endPortalEffect.glsl"
|
||||
#endif
|
||||
overlayNoiseIntensity = 0.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (blockEntityId < 5044) {
|
||||
if (blockEntityId < 5036) {
|
||||
if (blockEntityId == 5028) { // 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 == 5032)*/ { // Copper Chest+, Copper Golem+
|
||||
#include "/lib/materials/specificMaterials/terrain/copperBlock.glsl"
|
||||
}
|
||||
} else {
|
||||
if (blockEntityId == 5036) { //
|
||||
|
||||
} else /*if (blockEntityId == 5040)*/ { //
|
||||
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (blockEntityId < 5052) {
|
||||
if (blockEntityId == 5044) { //
|
||||
|
||||
} else /*if (blockEntityId == 5048)*/ { //
|
||||
|
||||
}
|
||||
} else {
|
||||
if (blockEntityId == 5052) { //
|
||||
|
||||
} else if (blockEntityId == 10548) { // Enchanting Table:Book
|
||||
smoothnessG = pow2(color.g) * 0.35;
|
||||
|
||||
if (color.b < 0.0001 && color.r > color.g) {
|
||||
emission = color.g * 3.5;
|
||||
}
|
||||
overlayNoiseIntensity = 0.3;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,146 @@
|
||||
#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;
|
||||
bool skipPom = false;
|
||||
|
||||
if (!skipPom) {
|
||||
texCoordM = vTexCoord.xy * vTexCoordAM.zw + vTexCoordAM.xy;
|
||||
|
||||
parallaxFade = pow2(lViewPos / POM_DISTANCE);
|
||||
#ifdef GBUFFERS_ENTITIES
|
||||
if (entityId == 50008) parallaxFade = 1.1; // Item Frame, Glow Item Frame
|
||||
#endif
|
||||
#ifdef GBUFFERS_BLOCK
|
||||
if (blockEntityId == 5004) 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;
|
||||
#elif RP_MODE == 3 // labPBR
|
||||
if (specularMap.g < OSIEBCA * 229.1) {
|
||||
materialMask = specularMap.g * OSIEBCA * 214.0;
|
||||
} else {
|
||||
materialMask = specularMap.g - OSIEBCA * 15.0;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
if (abs(materialMaskInt - 149.5) < 50.0) { // Entity Reflection Handling (see common.glsl for details)
|
||||
materialMaskInt -= 100;
|
||||
entityOrParticle = 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)*/ { //
|
||||
|
||||
}
|
||||
}
|
||||
} 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 == 15) { //
|
||||
|
||||
} else { // materialMaskInt >= 16 && <= 240
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
if (materialMaskInt <= 240) {
|
||||
#ifdef IPBR
|
||||
#include "/lib/materials/materialHandling/deferredIPBR.glsl"
|
||||
#elif defined CUSTOM_PBR
|
||||
#if RP_MODE == 2 // seuspbr
|
||||
float metalness = materialMaskInt / 240.0;
|
||||
|
||||
intenseFresnel = metalness;
|
||||
#elif RP_MODE == 3 // labPBR
|
||||
float metalness = float(materialMaskInt >= 215);
|
||||
|
||||
intenseFresnel = materialMaskInt / 240.0;
|
||||
#endif
|
||||
reflectColor = mix(vec3(1.0), color.rgb / (max(color.r, max(color.g, color.b)) + 0.00001), metalness);
|
||||
#endif
|
||||
} else {
|
||||
if (materialMaskInt == 251) { // No SSAO, Reduce Reflection
|
||||
entityOrParticle = true;
|
||||
} else if (materialMaskInt == 254) { // No SSAO, No TAA, Reduce Reflection
|
||||
ssao = 1.0;
|
||||
entityOrParticle = true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,498 @@
|
||||
#include "/lib/shaderSettings/entityMaterials.glsl"
|
||||
if (entityId < 50128) { // 50000 to 50128
|
||||
if (entityId < 50064) { // 50000 to 50064
|
||||
if (entityId < 50032) { // 50000 to 50032
|
||||
if (entityId < 50016) { // 50000 to 50016
|
||||
if (entityId < 50008) { // 50000 to 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;
|
||||
}
|
||||
emission *= END_CRYSTAL_EMISSION;
|
||||
} else if (entityId == 50004) { // Lightning Bolt
|
||||
#include "/lib/materials/specificMaterials/others/lightningBolt.glsl"
|
||||
}
|
||||
} else { // 50008 to 50016
|
||||
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 { // 50015 - Armor Stand
|
||||
// Do nothing for now
|
||||
}
|
||||
}
|
||||
} else { // 50016 to 50032
|
||||
if (entityId < 50024) { // 50016 to 50024
|
||||
if (entityId == 50016 || entityId == 50017) { // 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
bool selfCheck = false;
|
||||
#if IRIS_VERSION >= 10800
|
||||
if (entityId == 50017) {
|
||||
selfCheck = true;
|
||||
entitySSBLMask = 0.0;
|
||||
}
|
||||
#else
|
||||
if (length(playerPos) < 4.0) {
|
||||
selfCheck = true;
|
||||
entitySSBLMask = 0.0;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
} 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 {
|
||||
#ifdef SOUL_SAND_VALLEY_OVERHAUL_INTERNAL
|
||||
color.rgb = changeColorFunction(color.rgb, 2.0, colorSoul, inSoulValley);
|
||||
#endif
|
||||
#ifdef PURPLE_END_FIRE_INTERNAL
|
||||
color.rgb = changeColorFunction(color.rgb, 2.0, colorEndBreath, 1.0);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
} else { // 50024 to 50032
|
||||
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 { // 50032 to 50064
|
||||
if (entityId < 50048) { // 50032 to 50048
|
||||
if (entityId < 50040) { // 50032 to 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 { // 50040 to 50048
|
||||
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;
|
||||
#ifdef SOUL_SAND_VALLEY_OVERHAUL_INTERNAL
|
||||
if (color.r > color.b * 2.0) color.rgb = changeColorFunction(color.rgb, 7.0, colorSoul, inSoulValley);
|
||||
#endif
|
||||
#ifdef PURPLE_END_FIRE_INTERNAL
|
||||
if (color.r > color.b * 2.0) color.rgb = changeColorFunction(color.rgb, 7.0, colorEndBreath, 1.0);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
} else { // 50048 to 50064
|
||||
if (entityId < 50056) { // 50048 to 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;
|
||||
#ifdef SOUL_SAND_VALLEY_OVERHAUL_INTERNAL
|
||||
color.rgb = changeColorFunction(color.rgb, 2.0, colorSoul, inSoulValley);
|
||||
#endif
|
||||
#ifdef PURPLE_END_FIRE_INTERNAL
|
||||
color.rgb = changeColorFunction(color.rgb, 2.0, colorEndBreath, 1.0);
|
||||
#endif
|
||||
}
|
||||
} else { // 50056 to 50064
|
||||
if (entityId == 50056) { // Stray
|
||||
if (CheckForColor(color.rgb, vec3(230, 242, 246)) && texCoord.y > 0.35)
|
||||
emission = 1.75;
|
||||
} else /*if (entityId == 50060)*/ { // Vex
|
||||
lmCoordM = vec2(0.0);
|
||||
emission = pow2(pow2(color.r)) * 3.5 + 0.5;
|
||||
color.a *= color.a;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else { // 50064 to 50128
|
||||
if (entityId < 50096) { // 50064 to 50096
|
||||
if (entityId < 50080) { // 50064 to 50080
|
||||
if (entityId < 50072) { // 50064 to 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 { // 50072 to 50080
|
||||
if (entityId == 50072) { // Experience Orb
|
||||
emission = 7.5;
|
||||
|
||||
color.rgb *= color.rgb;
|
||||
} else /*if (entityId == 50076)*/ { // Boats
|
||||
playerPos.y += 0.38; // consistentBOAT2176: to avoid water shadow and the black inner shadow bug
|
||||
}
|
||||
}
|
||||
} else { // 50080 to 50096
|
||||
if (entityId < 50088) { // 50080 to 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 { // 50088 to 50096
|
||||
if (entityId == 50088) { // Entity Flame (Iris Feature)
|
||||
#ifdef SOUL_SAND_VALLEY_OVERHAUL_INTERNAL
|
||||
color.rgb = changeColorFunction(color.rgb, 3.0, colorSoul, inSoulValley);
|
||||
#endif
|
||||
#ifdef PURPLE_END_FIRE_INTERNAL
|
||||
color.rgb = changeColorFunction(color.rgb, 3.0, colorEndBreath, 1.0);
|
||||
#endif
|
||||
emission = 1.3;
|
||||
} else if (entityId == 50089) { // fireball, small fireball, dragon fireball
|
||||
#ifdef SOUL_SAND_VALLEY_OVERHAUL_INTERNAL
|
||||
color.rgb = changeColorFunction(color.rgb, 4.0, colorSoul, inSoulValley);
|
||||
#endif
|
||||
#ifdef PURPLE_END_FIRE_INTERNAL
|
||||
color.rgb = changeColorFunction(color.rgb, 4.0, colorEndBreath, 1.0);
|
||||
#endif
|
||||
} else /*if (entityId == 50092)*/ { // Trident Entity
|
||||
#if defined IS_IRIS || defined IS_ANGELICA && ANGELICA_VERSION >= 20000008
|
||||
// Only on Iris, because otherwise it would be inconsistent with the Trident item
|
||||
#include "/lib/materials/specificMaterials/others/trident.glsl"
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
} else { // 50096 to 50128
|
||||
if (entityId < 50112) { // 50096 to 50112
|
||||
if (entityId < 50104) { // 50096 to 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 { // 50104 to 50112
|
||||
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 checkColorOneRight = texelFetch(tex, ivec2(texCoord * tSize) + ivec2(1, 0), 0);
|
||||
if (
|
||||
CheckForColor(checkColorOneRight.rgb, vec3(201, 130, 101)) ||
|
||||
CheckForColor(checkColorOneRight.rgb, vec3(241, 158, 152)) ||
|
||||
CheckForColor(checkColorOneRight.rgb, vec3(223, 127, 119)) ||
|
||||
CheckForColor(checkColorOneRight.rgb, vec3(241, 158, 152)) ||
|
||||
CheckForColor(checkColorOneRight.rgb, vec3(165, 99, 80)) ||
|
||||
CheckForColor(checkColorOneRight.rgb, vec3(213, 149, 122)) ||
|
||||
CheckForColor(checkColorOneRight.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;
|
||||
purkinjeOverwrite = 1.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else { // 50112 to 50128
|
||||
if (entityId < 50120) { // 50112 to 50120
|
||||
if (entityId == 50112) { // Name Tag
|
||||
noDirectionalShading = true;
|
||||
color.rgb *= 1.5;
|
||||
if (color.a < 0.5) {
|
||||
color.a = 0.12;
|
||||
color.rgb *= 5.0;
|
||||
}
|
||||
} else /*if (entityId == 50116)*/ { // Copper Golem
|
||||
#include "/lib/materials/specificMaterials/terrain/copperBlock.glsl"
|
||||
|
||||
smoothnessD *= 0.5;
|
||||
}
|
||||
} else { // 50120 to 50128
|
||||
if (entityId == 50120) { // Parched
|
||||
if (CheckForColor(color.rgb, vec3(254, 235, 194))) {
|
||||
vec2 tSize = textureSize(tex, 0);
|
||||
vec4 checkColorOneDown = texelFetch(tex, ivec2(texCoord * tSize) + ivec2(0, 1), 0);
|
||||
if (CheckForColor(checkColorOneDown.rgb, vec3(135, 126, 118)) ||
|
||||
CheckForColor(checkColorOneDown.rgb, vec3(106, 103, 98))
|
||||
) {
|
||||
emission = 1.75;
|
||||
}
|
||||
}
|
||||
} else /*if (entityId == 50124)*/ { // Zombie Nautilus
|
||||
if (CheckForColor(color.rgb, vec3(143, 241, 215)) || CheckForColor(color.rgb, vec3(101, 224, 221)))
|
||||
emission = 1.5;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else { // 50128 to 50256
|
||||
if (entityId < 50192) { // 50128 to 50192
|
||||
if (entityId < 50160) { // 50128 to 50160
|
||||
if (entityId < 50144) { // 50128 to 50144
|
||||
if (entityId < 50136) { // 50128 to 50136
|
||||
if (entityId < 50132) { // 50128 to 50132
|
||||
// 50128
|
||||
// 50129
|
||||
// 50130
|
||||
// 50131
|
||||
} else { // 50132 to 50136
|
||||
// 50132
|
||||
// 50133
|
||||
// 50134
|
||||
// 50135
|
||||
}
|
||||
} else { // 50136 to 50144
|
||||
if (entityId < 50140) { // 50136 to 50140
|
||||
// 50136
|
||||
// 50137
|
||||
// 50138
|
||||
// 50139
|
||||
} else { // 50140 to 50144
|
||||
// 50140
|
||||
// 50141
|
||||
// 50142
|
||||
// 50143
|
||||
}
|
||||
}
|
||||
} else { // 50144 to 50160
|
||||
if (entityId < 50152) { // 50144 to 50152
|
||||
if (entityId < 50148) { // 50144 to 50148
|
||||
// 50144
|
||||
// 50145
|
||||
// 50146
|
||||
// 50147
|
||||
} else { // 50148 to 50152
|
||||
// 50148
|
||||
// 50149
|
||||
// 50150
|
||||
// 50151
|
||||
}
|
||||
} else { // 50152 to 50160
|
||||
if (entityId < 50156) { // 50152 to 50156
|
||||
// 50152
|
||||
// 50153
|
||||
// 50154
|
||||
// 50155
|
||||
} else { // 50156 to 50160
|
||||
// 50156
|
||||
// 50157
|
||||
// 50158
|
||||
// 50159
|
||||
}
|
||||
}
|
||||
}
|
||||
} else { // 50160 to 50192
|
||||
if (entityId < 50176) { // 50160 to 50176
|
||||
if (entityId < 50168) { // 50160 to 50168
|
||||
if (entityId < 50164) { // 50160 to 50164
|
||||
// 50160
|
||||
// 50161
|
||||
// 50162
|
||||
// 50163
|
||||
} else { // 50164 to 50168
|
||||
// 50164
|
||||
// 50165
|
||||
// 50166
|
||||
// 50167
|
||||
}
|
||||
} else { // 50168 to 50176
|
||||
if (entityId < 50172) { // 50168 to 50172
|
||||
// 50168
|
||||
// 50169
|
||||
// 50170
|
||||
// 50171
|
||||
} else { // 50172 to 50176
|
||||
// 50172
|
||||
// 50173
|
||||
// 50174
|
||||
// 50175
|
||||
}
|
||||
}
|
||||
} else { // 50176 to 50192
|
||||
if (entityId < 50184) { // 50176 to 50184
|
||||
if (entityId < 50180) { // 50176 to 50180
|
||||
// 50176
|
||||
// 50177
|
||||
// 50178
|
||||
// 50179
|
||||
} else { // 50180 to 50184
|
||||
// 50180
|
||||
// 50181
|
||||
// 50182
|
||||
// 50183
|
||||
}
|
||||
} else { // 50184 to 50192
|
||||
if (entityId < 50188) { // 50184 to 50188
|
||||
// 50184
|
||||
// 50185
|
||||
// 50186
|
||||
// 50187
|
||||
} else { // 50188 to 50192
|
||||
// 50188
|
||||
// 50189
|
||||
// 50190
|
||||
// 50191
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else { // 50192 to 50256
|
||||
if (entityId < 50224) { // 50192 to 50224
|
||||
if (entityId < 50208) { // 50192 to 50208
|
||||
if (entityId < 50200) { // 50192 to 50200
|
||||
if (entityId < 50196) { // 50192 to 50196
|
||||
// 50192
|
||||
// 50193
|
||||
// 50194
|
||||
// 50195
|
||||
} else { // 50196 to 50200
|
||||
// 50196
|
||||
// 50197
|
||||
// 50198
|
||||
// 50199
|
||||
}
|
||||
} else { // 50200 to 50208
|
||||
if (entityId < 50204) { // 50200 to 50204
|
||||
// 50200
|
||||
// 50201
|
||||
// 50202
|
||||
// 50203
|
||||
} else { // 50204 to 50208
|
||||
// 50204
|
||||
// 50205
|
||||
// 50206
|
||||
// 50207
|
||||
}
|
||||
}
|
||||
} else { // 50208 to 50224
|
||||
if (entityId < 50216) { // 50208 to 50216
|
||||
if (entityId < 50212) { // 50208 to 50212
|
||||
// 50208
|
||||
// 50209
|
||||
// 50210
|
||||
// 50211
|
||||
} else { // 50212 to 50216
|
||||
// 50212
|
||||
// 50213
|
||||
// 50214
|
||||
// 50215
|
||||
}
|
||||
} else { // 50216 to 50224
|
||||
if (entityId < 50220) { // 50216 to 50220
|
||||
// 50216
|
||||
// 50217
|
||||
// 50218
|
||||
// 50219
|
||||
} else { // 50220 to 50224
|
||||
// 50220
|
||||
// 50221
|
||||
// 50222
|
||||
// 50223
|
||||
}
|
||||
}
|
||||
}
|
||||
} else { // 50224 to 50256
|
||||
if (entityId < 50240) { // 50224 to 50240
|
||||
if (entityId < 50232) { // 50224 to 50232
|
||||
if (entityId < 50228) { // 50224 to 50228
|
||||
// 50224
|
||||
// 50225
|
||||
// 50226
|
||||
// 50227
|
||||
} else { // 50228 to 50232
|
||||
// 50228
|
||||
// 50229
|
||||
// 50230
|
||||
// 50231
|
||||
}
|
||||
} else { // 50232 to 50240
|
||||
if (entityId < 50236) { // 50232 to 50236
|
||||
// 50232
|
||||
// 50233
|
||||
// 50234
|
||||
// 50235
|
||||
} else { // 50236 to 50240
|
||||
// 50236
|
||||
// 50237
|
||||
// 50238
|
||||
// 50239
|
||||
}
|
||||
}
|
||||
} else { // 50240 to 50256
|
||||
if (entityId < 50248) { // 50240 to 50248
|
||||
if (entityId < 50244) { // 50240 to 50244
|
||||
// 50240
|
||||
// 50241
|
||||
// 50242
|
||||
// 50243
|
||||
} else { // 50244 to 50248
|
||||
// 50244
|
||||
// 50245
|
||||
// 50246
|
||||
// 50247
|
||||
}
|
||||
} else { // 50248 to 50256
|
||||
if (entityId < 50252) { // 50248 to 50252
|
||||
// 50248
|
||||
// 50249
|
||||
// 50250
|
||||
// 50251
|
||||
} else { // 50252 to 50256
|
||||
// 50252
|
||||
// 50253
|
||||
// 50254
|
||||
// 50255
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,265 @@
|
||||
#include "/lib/shaderSettings/entityMaterials.glsl"
|
||||
int mat = currentRenderedItemId;
|
||||
|
||||
#ifdef GBUFFERS_HAND
|
||||
float lViewPos = 0.0;
|
||||
#endif
|
||||
|
||||
int subsurfaceMode;
|
||||
bool centerShadowBias;
|
||||
float noPuddles;
|
||||
|
||||
if (currentRenderedItemId < 45000) {
|
||||
#include "/lib/materials/materialHandling/terrainIPBR.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
|
||||
#ifdef SITUATIONAL_GLOWING_TRIMS
|
||||
emission *= skyLightCheck;
|
||||
#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
|
||||
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.b * 1.65;
|
||||
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;
|
||||
if (LAVA_TEMPERATURE != 0.0) maRecolor += LAVA_TEMPERATURE * 0.1;
|
||||
emission *= LAVA_EMISSION;
|
||||
#ifdef SOUL_SAND_VALLEY_OVERHAUL_INTERNAL
|
||||
color.rgb = changeColorFunction(color.rgb, 2.0, colorSoul, inSoulValley);
|
||||
#endif
|
||||
#ifdef PURPLE_END_FIRE_INTERNAL
|
||||
color.rgb = changeColorFunction(color.rgb, 2.0, colorEndBreath, 1.0);
|
||||
#endif
|
||||
} 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);
|
||||
#ifdef SOUL_SAND_VALLEY_OVERHAUL_INTERNAL
|
||||
color.rgb = changeColorFunction(color.rgb, 2.0, colorSoul, inSoulValley);
|
||||
#endif
|
||||
#ifdef PURPLE_END_FIRE_INTERNAL
|
||||
color.rgb = changeColorFunction(color.rgb, 2.0, colorEndBreath, 1.0);
|
||||
#endif
|
||||
} 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);
|
||||
#ifdef SOUL_SAND_VALLEY_OVERHAUL_INTERNAL
|
||||
color.rgb = changeColorFunction(color.rgb, 5.0, colorSoul, inSoulValley);
|
||||
#endif
|
||||
#ifdef PURPLE_END_FIRE_INTERNAL
|
||||
color.rgb = changeColorFunction(color.rgb, 5.0, colorEndBreath, 1.0);
|
||||
#endif
|
||||
} 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;
|
||||
}
|
||||
emission *= END_CRYSTAL_EMISSION;
|
||||
}
|
||||
}
|
||||
}
|
||||
} 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, Ominous Trial Key
|
||||
emission = abs(color.r - color.b) * 3.0;
|
||||
color.rgb = pow(color.rgb, vec3(1.0 + 0.5 * sqrt(emission)));
|
||||
} else /*if (currentRenderedItemId == 45116)*/ { // Copper Tools, Copper Armor, Copper Ingot, Copper Horse Armor
|
||||
#include "/lib/materials/specificMaterials/terrain/copperBlock.glsl"
|
||||
|
||||
smoothnessD *= 0.5;
|
||||
}
|
||||
} else {
|
||||
if (currentRenderedItemId == 45120) { // Ghast Harness+
|
||||
vec2 tSize = textureSize(tex, 0);
|
||||
vec4 checkColorOneDown = texelFetch(tex, ivec2(texCoord * tSize) + ivec2(0, 1), 0);
|
||||
if (
|
||||
CheckForColor(color.rgb, vec3(139, 193, 205)) ||
|
||||
CheckForColor(color.rgb, vec3(208, 234, 233)) ||
|
||||
CheckForColor(color.rgb, vec3(109, 152, 161)) ||
|
||||
CheckForColor(color.rgb, vec3(255)) && CheckForColor(checkColorOneDown.rgb, vec3(109, 152, 161)) ||
|
||||
CheckForColor(color.rgb, vec3(168, 208, 217))
|
||||
) {
|
||||
smoothnessG = 1.0;
|
||||
highlightMult = 2.0 - dot(color.rgb, vec3(0.25));
|
||||
smoothnessD = 1.0;
|
||||
}
|
||||
} else /*if (currentRenderedItemId == 45124)*/ { //
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
#if !(defined DH_TERRAIN || defined DH_WATER)
|
||||
#define BLOCK_LAVA_DEFINE mat == 10068 || mat == 10070
|
||||
#define BLOCK_LAVA_STILL_DEFINE mat == 10068
|
||||
#define BLOCK_LEAVES_SEASONS_DEFINE mat == 10009 || mat == 10011
|
||||
#else
|
||||
#define BLOCK_LAVA_DEFINE mat == DH_BLOCK_LAVA
|
||||
#define BLOCK_LAVA_STILL_DEFINE mat == DH_BLOCK_LAVA
|
||||
#define BLOCK_LEAVES_SEASONS_DEFINE mat == DH_BLOCK_LEAVES
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,190 @@
|
||||
#include "/lib/shaderSettings/water.glsl"
|
||||
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 - fresnelM);
|
||||
reflectMult = 1.0;
|
||||
|
||||
#ifndef MIRROR_TINTED_GLASS
|
||||
DoTranslucentTweaks(color, fresnelM, reflectMult, lViewPos);
|
||||
#else
|
||||
color.a = color.a * 0.3 + 0.7;
|
||||
fresnelM = fresnelM * 0.5 + 0.5;
|
||||
reflectMult /= color.a;
|
||||
noGeneratedNormals = true;
|
||||
#ifdef MIRROR_TINTED_GLASS_OPAQUE
|
||||
color.a = 1.0;
|
||||
#endif
|
||||
#endif
|
||||
overlayNoiseAlpha = 0.95;
|
||||
sandNoiseIntensity = 0.5;
|
||||
mossNoiseIntensity = 0.5;
|
||||
} 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;
|
||||
overlayNoiseAlpha = 0.6;
|
||||
sandNoiseIntensity = 0.5;
|
||||
mossNoiseIntensity = 0.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;
|
||||
overlayNoiseAlpha = 0.4;
|
||||
sandNoiseIntensity = 0.5;
|
||||
mossNoiseIntensity = 0.5;
|
||||
} else /*if (mat == 30020)*/ { // Nether Portal
|
||||
#ifdef SPECIAL_PORTAL_EFFECTS
|
||||
#include "/lib/materials/specificMaterials/translucents/netherPortal.glsl"
|
||||
#endif
|
||||
overlayNoiseIntensity = 0.0;
|
||||
}
|
||||
} 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"
|
||||
overlayNoiseAlpha = 1.05;
|
||||
mossNoiseIntensity = 0.8;
|
||||
} 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;
|
||||
overlayNoiseAlpha = 1.05;
|
||||
sandNoiseIntensity = 0.8;
|
||||
mossNoiseIntensity = 0.8;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (mat == 32000) { // Water
|
||||
#ifdef SHADER_WATER
|
||||
#include "/lib/materials/specificMaterials/translucents/water.glsl"
|
||||
#endif
|
||||
overlayNoiseIntensity = 0.0;
|
||||
overlayNoiseFresnelMult = 0.0;
|
||||
IPBRMult = 0.0;
|
||||
overlayNoiseAlpha = 0.0;
|
||||
} else /*if (mat == 32004)*/ { // Ice
|
||||
smoothnessG = pow2(color.g) * color.g;
|
||||
highlightMult = pow2(min1(pow2(color.g) * 1.5)) * 3.5;
|
||||
|
||||
reflectMult = 0.7;
|
||||
overlayNoiseAlpha = 0.6;
|
||||
sandNoiseIntensity = 0.7;
|
||||
mossNoiseIntensity = 0.7;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (mat < 32024) {
|
||||
if (mat < 32016) {
|
||||
if (mat < 32012) { // Glass
|
||||
if (mat == 32008){
|
||||
#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"
|
||||
overlayNoiseAlpha = 0.8;
|
||||
sandNoiseIntensity = 0.8;
|
||||
mossNoiseIntensity = 0.8;
|
||||
} else /*if (mat == 32012)*/ { // Glass Pane
|
||||
if (mat == 32012) {
|
||||
#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;
|
||||
overlayNoiseAlpha = 0.8;
|
||||
sandNoiseIntensity = 0.8;
|
||||
mossNoiseIntensity = 0.8;
|
||||
}
|
||||
} 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.65) color.rgb = baseColor + 0.2;
|
||||
else if (lColor > 1.5) color.rgb = baseColor + 0.15;
|
||||
else if (lColor > 1.3) color.rgb = baseColor + 0.08;
|
||||
else if (lColor > 1.15) color.rgb = baseColor + 0.035;
|
||||
else color.rgb = baseColor;
|
||||
emission = 3.5;
|
||||
}
|
||||
} else { // Beacon:Obsidian
|
||||
float factor = color.r * 1.5;
|
||||
|
||||
smoothnessG = factor;
|
||||
highlightMult = 2.0 + min1(smoothnessG * 2.0) * 1.5;
|
||||
smoothnessG = min1(smoothnessG);
|
||||
}
|
||||
overlayNoiseAlpha = 0.8;
|
||||
sandNoiseIntensity = 0.5;
|
||||
mossNoiseIntensity = 0.5;
|
||||
} else /*if (mat == 32020)*/ { //
|
||||
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (mat < 32032) {
|
||||
if (mat == 32024) { //
|
||||
|
||||
} else /*if (mat == 32028)*/ { //
|
||||
|
||||
}
|
||||
} else {
|
||||
if (mat == 32032) { //
|
||||
|
||||
} else /*if (mat == 32036)*/ { //
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
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
|
||||
#if MC_VERSION < 12111
|
||||
// Excluding cutout blocks because cutout mipmaps suck in older mc versions
|
||||
if (texture2DLod(texSampler, uv, 10000.0).a == 1.0)
|
||||
#endif
|
||||
|
||||
// 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 && absMidCoordPos.y > 0.0001)
|
||||
lod = miplevel * 0.4;
|
||||
#endif
|
||||
|
||||
float samplesDiv2 = ANISOTROPIC_FILTER / 2.0;
|
||||
vec2 ADivSamples = A / ANISOTROPIC_FILTER;
|
||||
|
||||
vec4 filteredColor = vec4(0.0);
|
||||
float totalModifiedAlpha = 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);
|
||||
|
||||
colorSample.a = sqrt(colorSample.a); // Tweak to make cutout blocks look fuller in the distance
|
||||
|
||||
#if !defined POM || !defined POM_ALLOW_CUTOUT
|
||||
float modifiedAlpha = colorSample.a;
|
||||
#else
|
||||
// To avoid NaNs because we don't discard low alpha if POM_ALLOW_CUTOUT is enabled (see 6WIR4HT23)
|
||||
float modifiedAlpha = max(colorSample.a, 0.00001);
|
||||
#endif
|
||||
|
||||
totalModifiedAlpha += modifiedAlpha;
|
||||
filteredColor.rgb += colorSample.rgb * modifiedAlpha;
|
||||
filteredColor.a += colorSample.a;
|
||||
}
|
||||
filteredColor.rgb /= totalModifiedAlpha;
|
||||
filteredColor.a /= ANISOTROPIC_FILTER;
|
||||
|
||||
return filteredColor;
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
#define ENTITY_GN_AND_CT
|
||||
#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 COATED_TEXTURE_RES 64 //[16 32 64 80 96 112 128 144 160 176 192 208 224 240 256 320 384 448 512]
|
||||
const float packSizeNT = COATED_TEXTURE_RES;
|
||||
|
||||
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 = texture2DLod(noisetex, noiseCoord, 0.0).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;
|
||||
}
|
||||
@@ -0,0 +1,115 @@
|
||||
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.125 * absMidCoordPos, 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 = GetVoxelVolume(ivec3(voxelPos) + glassOffsets[i]);
|
||||
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 = GetVoxelVolume(ivec3(voxelPos) + glassOffsets[i]);
|
||||
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 = GetVoxelVolume(ivec3(voxelPos) + ivec3(0, 1, 0));
|
||||
if (voxel == voxelID) discard;
|
||||
}
|
||||
if (NdotU < -0.9) {
|
||||
uint voxel = GetVoxelVolume(ivec3(voxelPos) - ivec3(0, 1, 0));
|
||||
if (voxel == voxelID) discard;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONNECTED_GLASS_CORNER_FIX
|
||||
// Restores corners
|
||||
for (int i = 0; i < 12; i++) {
|
||||
uint voxel = GetVoxelVolume(ivec3(voxelPos) + glassCornerOffsets[i]);
|
||||
if ((voxel != voxelID) && (!isPane || voxel > 0u)) {
|
||||
if (floor((worldPos - glassCornerOffsets[i] * (1.0 - pixelOffsetMinus))) == floorWorldPos) {
|
||||
colorP = colorPvanilla;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
color = colorP * vec4(glColor.rgb, 1.0);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -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
|
||||
@@ -0,0 +1,96 @@
|
||||
#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 GENERATED_NORMAL_ENTITY_MULT 0 //[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 250 300 400]
|
||||
#define NORMAL_RES 128 //[16 32 64 80 96 112 128 144 160 176 192 208 224 240 256 320 384 448 512]
|
||||
|
||||
const float normalThreshold = 0.05;
|
||||
const float normalClamp = 0.2;
|
||||
const float packSizeGN = 128.0;
|
||||
|
||||
#ifdef GBUFFERS_ENTITIES
|
||||
#if GENERATED_NORMAL_ENTITY_MULT > 0
|
||||
const float normalMult = GENERATED_NORMAL_ENTITY_MULT * 0.025;
|
||||
#else
|
||||
const float normalMult = GENERATED_NORMAL_MULT * 0.025;
|
||||
#endif
|
||||
#elif !defined 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 /= NORMAL_RES;
|
||||
|
||||
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));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
bool intersectsAABB(vec3 ro, vec3 rd, vec3 aabbMin, vec3 aabbMax) {
|
||||
vec3 t0 = (aabbMin - ro) / rd;
|
||||
vec3 t1 = (aabbMax - ro) / rd;
|
||||
|
||||
vec3 tMin = min(t0, t1);
|
||||
vec3 tMax = max(t0, t1);
|
||||
|
||||
float m0 = max(max(tMin.x, tMin.y), tMin.z);
|
||||
float m1 = min(min(tMax.x, tMax.y), tMax.z);
|
||||
|
||||
return m1 > max0(m0);
|
||||
}
|
||||
|
||||
bool intersectsParallelogram(vec3 ro, vec3 rd, vec3 v0, vec3 v1, vec3 v2, float tMin, out float t, out vec2 uv, inout vec3 normal) {
|
||||
vec3 a = v1 - v0, n = cross(a, v2 - v0);
|
||||
|
||||
t = dot(v0 - ro, n) / dot(n, rd);
|
||||
if (t < 0.0 || t > tMin) return false;
|
||||
|
||||
vec3 b = v2 - v1;
|
||||
vec3 c = ro + rd * t - v0;
|
||||
|
||||
uv = vec2(dot(c, a) / dot(a, a), dot(c, b) / dot(b, b));
|
||||
if (uv.x < 0.0 || uv.y < 0.0 || uv.x > 1.0 || uv.y > 1.0) return false;
|
||||
|
||||
normal = normalize(n);
|
||||
return true;
|
||||
}
|
||||
|
||||
void CheckQuadAt(int i, vec3 playerPos, vec3 rayDir, inout vec3 albedo, inout float tMin, inout vec3 normal, inout float emissionOut) {
|
||||
int i0 = 3 * i, i1 = 3 * i + 1, i2 = 3 * i + 2;
|
||||
|
||||
vec3 v0 = playerVerticesSSBO.vertexPositions[i0];
|
||||
vec3 v1 = playerVerticesSSBO.vertexPositions[i1];
|
||||
vec3 v2 = playerVerticesSSBO.vertexPositions[i2];
|
||||
|
||||
float t;
|
||||
vec2 uv;
|
||||
|
||||
vec3 colorP;
|
||||
vec3 color;
|
||||
float emission = 0.0;
|
||||
float smoothnessD, smoothnessG;
|
||||
if (intersectsParallelogram(playerPos, rayDir, v0, v1, v2, tMin, t, uv, normal)) {
|
||||
vec2 texCoord0 = playerVerticesSSBO.vertexData[i0];
|
||||
vec2 texCoord1 = playerVerticesSSBO.vertexData[i1];
|
||||
vec2 texCoord2 = playerVerticesSSBO.vertexData[i2];
|
||||
|
||||
vec2 quadTexCoord = mix(texCoord0, texCoord1, uv.x) + uv.y * (texCoord2 - texCoord1);
|
||||
vec4 playerAtlasSample = texelFetch(playerAtlas_sampler, ivec2(64 * quadTexCoord), 0);
|
||||
|
||||
vec3 colorP = playerAtlasSample.rgb;
|
||||
vec3 color = playerAtlasSample.rgb;
|
||||
|
||||
#ifdef SPACEAGLE17
|
||||
#include "/lib/materials/specificMaterials/others/SpacEagle17.glsl"
|
||||
#endif
|
||||
if (playerAtlasSample.a > 0.2) {albedo = color * (emission * 0.2 + 1.0); tMin = t; emissionOut = emission;}
|
||||
}
|
||||
}
|
||||
|
||||
bool rayTracePlayer(vec3 playerPos, vec3 rayDir, float wsrTraceLength, out vec3 albedo, out vec3 normal, out float emission) {
|
||||
float tMin = wsrTraceLength;
|
||||
vec3 aabbPos = playerPos * 1000.0;
|
||||
|
||||
// Head
|
||||
if (intersectsAABB(aabbPos, rayDir, playerVerticesSSBO.bounds.headMin, playerVerticesSSBO.bounds.headMax)) {
|
||||
for (int i = 0; i < 12; i++) {
|
||||
CheckQuadAt(i, playerPos, rayDir, albedo, tMin, normal, emission);
|
||||
}
|
||||
}
|
||||
// Right Hand
|
||||
if (intersectsAABB(aabbPos, rayDir, playerVerticesSSBO.bounds.rightHandMin, playerVerticesSSBO.bounds.rightHandMax)) {
|
||||
for (int i = 12; i < 24; i++) {
|
||||
CheckQuadAt(i, playerPos, rayDir, albedo, tMin, normal, emission);
|
||||
}
|
||||
}
|
||||
// Left Leg
|
||||
if (intersectsAABB(aabbPos, rayDir, playerVerticesSSBO.bounds.leftLegMin, playerVerticesSSBO.bounds.leftLegMax)) {
|
||||
for (int i = 24; i < 36; i++) {
|
||||
CheckQuadAt(i, playerPos, rayDir, albedo, tMin, normal, emission);
|
||||
}
|
||||
}
|
||||
// Left Hand
|
||||
if (intersectsAABB(aabbPos, rayDir, playerVerticesSSBO.bounds.leftHandMin, playerVerticesSSBO.bounds.leftHandMax)) {
|
||||
for (int i = 36; i < 48; i++) {
|
||||
CheckQuadAt(i, playerPos, rayDir, albedo, tMin, normal, emission);
|
||||
}
|
||||
}
|
||||
// Right leg
|
||||
if (intersectsAABB(aabbPos, rayDir, playerVerticesSSBO.bounds.rightLegMin, playerVerticesSSBO.bounds.rightLegMax)) {
|
||||
for (int i = 48; i < 60; i++) {
|
||||
CheckQuadAt(i, playerPos, rayDir, albedo, tMin, normal, emission);
|
||||
}
|
||||
}
|
||||
// Torso
|
||||
if (intersectsAABB(aabbPos, rayDir, playerVerticesSSBO.bounds.torsoMin, playerVerticesSSBO.bounds.torsoMax)) {
|
||||
for (int i = 60; i < 72; i++) {
|
||||
CheckQuadAt(i, playerPos, rayDir, albedo, tMin, normal, emission);
|
||||
}
|
||||
}
|
||||
|
||||
return tMin < wsrTraceLength;
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
void AddBackgroundReflection(inout vec4 reflection, vec3 color, vec3 playerPos, vec3 normalM, vec3 normalMR, vec3 viewPos, vec3 nViewPos, vec3 nViewPosR,
|
||||
vec3 shadowMult, float RVdotU, float RVdotS, float z0, float dither, float skyLightFactor, float smoothness, float highlightMult) {
|
||||
#ifdef OVERWORLD
|
||||
#if defined COMPOSITE || WATER_REFLECT_QUALITY >= 2
|
||||
vec3 skyReflection = GetSky(RVdotU, RVdotS, dither, isEyeInWater == 0, true);
|
||||
#else
|
||||
vec3 skyReflection = GetLowQualitySky(RVdotU, RVdotS, dither, isEyeInWater == 0, true);
|
||||
#endif
|
||||
|
||||
#ifdef ATM_COLOR_MULTS
|
||||
skyReflection *= atmColorMult;
|
||||
#endif
|
||||
#ifdef MOON_PHASE_INF_ATMOSPHERE
|
||||
skyReflection *= moonPhaseInfluence;
|
||||
#endif
|
||||
|
||||
#ifdef COMPOSITE
|
||||
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
|
||||
#if NIGHT_NEBULAE == 1
|
||||
nightNebula += GetNightNebula(nViewPosR, RVdotU, RVdotS);
|
||||
skyReflection += nightNebula;
|
||||
#endif
|
||||
|
||||
vec2 starCoord = GetStarCoord(nViewPos, 0.5);
|
||||
#ifdef PIXELATED_WATER_REFLECTIONS
|
||||
vec3 absPlayerPos = abs(playerPos);
|
||||
float sizeDecider = -clamp01(pow2(min1(length(absPlayerPos) / 10))) + 1.0; // The effect will only be around the player
|
||||
float starSize = mix(1.0, 2.0, step(0.2, sizeDecider));
|
||||
#else
|
||||
float starSize = 1.0;
|
||||
#endif
|
||||
#if STAR_BRIGHTNESS != 3
|
||||
vec3 starColor = GetStars(starCoord, RVdotU, RVdotS, 1.0 * starSize, 0.0);
|
||||
|
||||
#define ADD_STAR_LAYER_OW1 (STAR_LAYER_OW == 1 || STAR_LAYER_OW == 3)
|
||||
#define ADD_STAR_LAYER_OW2 (STAR_LAYER_OW == 2 || STAR_LAYER_OW == 3)
|
||||
|
||||
#if ADD_STAR_LAYER_OW1
|
||||
starColor = max(starColor, GetStars(starCoord, RVdotU, RVdotS, 0.66 * starSize, 0.0));
|
||||
#endif
|
||||
|
||||
#if ADD_STAR_LAYER_OW2
|
||||
starColor = max(starColor, GetStars(starCoord, RVdotU, RVdotS, 2.2 * starSize, 0.45));
|
||||
#endif
|
||||
|
||||
skyReflection += starColor;
|
||||
#endif
|
||||
|
||||
#ifdef VL_CLOUDS_ACTIVE
|
||||
vec3 worldNormalMR = normalize(mat3(gbufferModelViewInverse) * normalMR);
|
||||
vec3 cameraPosOffset = 2.0 * worldNormalMR * dot(playerPos, worldNormalMR);
|
||||
vec3 RPlayerPos = normalize(mat3(gbufferModelViewInverse) * nViewPosR);
|
||||
float RlViewPos = 100000.0;
|
||||
|
||||
vec4 clouds = GetClouds(cloudLinearDepth, skyFade, cameraPosOffset, RPlayerPos,
|
||||
viewPos, RlViewPos, RVdotS, RVdotU, dither, auroraBorealis, nightNebula, sunVec);
|
||||
|
||||
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 COMPOSITE
|
||||
#ifdef END_BEAMS
|
||||
vec3 skyReflection = (endSkyColor + 0.4 * DrawEnderBeams(RVdotU, playerPos, nViewPosR)) * skyLightFactor;
|
||||
#else
|
||||
vec3 skyReflection = endSkyColor * skyLightFactor;
|
||||
#endif
|
||||
#else
|
||||
vec3 skyReflection = endSkyColor * shadowMult;
|
||||
#endif
|
||||
|
||||
#ifdef ATM_COLOR_MULTS
|
||||
skyReflection *= atmColorMult;
|
||||
#endif
|
||||
#else
|
||||
vec3 skyReflection = vec3(0.0);
|
||||
#endif
|
||||
|
||||
#if WORLD_SPACE_REFLECTIONS_INTERNAL > 0 && defined COMPOSITE && (BLOCK_REFLECT_QUALITY >= 2 || WATER_REFLECT_QUALITY >= 2)
|
||||
vec4 wsrReflection = getWSR(playerPos, normalMR, nViewPosR, RVdotU, RVdotS, z0, dither);
|
||||
reflection = mix(wsrReflection, vec4(reflection.rgb, 1.0), reflection.a);
|
||||
refDist = min(refDist, length(wsrHitPos - playerPos));
|
||||
#endif
|
||||
|
||||
reflection.rgb = mix(skyReflection, reflection.rgb, reflection.a);
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
vec4 sampleBlurFilteredReflection(vec4 centerCol, float dither, float z0) {
|
||||
vec4 texture4 = texture2D(colortex4, texCoord);
|
||||
vec3 texture6 = texelFetch(colortex6, texelCoord, 0).rgb;
|
||||
float smoothnessD = texture6.r;
|
||||
//float linearZ0 = GetLinearDepth(z0);
|
||||
|
||||
const float spatialFactor = 2.5; // higher = smoother in space
|
||||
const float spatialFactorM = 2.0 * spatialFactor * spatialFactor;
|
||||
|
||||
vec4 sum = vec4(0.0);
|
||||
float wsum = 0.0;
|
||||
vec2 texelSize = (3.0 + 6.0 * dither) / view; // 1 pixel range doesn't seem to be enough to smooth things out
|
||||
texelSize *= 1.0 - 0.75 * pow2(pow2(pow2(smoothnessD)));
|
||||
|
||||
int k = 2;
|
||||
for (int dy = -k; dy <= k; dy++) {
|
||||
for (int dx = -k; dx <= k; dx++) {
|
||||
vec2 offset = vec2(float(dx), float(dy)) * texelSize;
|
||||
vec2 sampleCoord = texCoord + offset;
|
||||
vec4 sampleCol = texture2D(colortex7, sampleCoord);
|
||||
|
||||
// Skip step if normals are too different
|
||||
vec4 texture1Sample = texture2D(colortex1, sampleCoord);
|
||||
if (length(texture4.rgb - texture1Sample.rgb) > 0.1) continue;
|
||||
|
||||
// Skip if depth is too different (costs performance for a tiny fix)
|
||||
#ifdef REFLECTION_BLUR_DEPTH_CHECK
|
||||
if (abs(GetLinearDepth(texture2D(depthtex0, sampleCoord).r) - linearZ0) * far > 2.0) continue;
|
||||
#endif
|
||||
|
||||
// Spatial weight (gaussian)
|
||||
float spatialDist2 = float(dx*dx + dy*dy);
|
||||
float w_s = exp(-spatialDist2 / spatialFactorM);
|
||||
|
||||
float w = w_s;
|
||||
|
||||
sum += sampleCol * w;
|
||||
wsum += w_s;
|
||||
}
|
||||
}
|
||||
|
||||
return sum / wsum;
|
||||
}
|
||||
@@ -0,0 +1,290 @@
|
||||
#include "/lib/misc/reprojection.glsl"
|
||||
|
||||
#ifdef OVERWORLD
|
||||
#include "/lib/atmospherics/sky.glsl"
|
||||
#include "/lib/shaderSettings/stars.glsl"
|
||||
#ifdef END_PORTAL_BEAM_INTERNAL
|
||||
#include "/lib/atmospherics/endPortalBeam.glsl"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef END
|
||||
#include "/lib/shaderSettings/endBeams.glsl"
|
||||
#ifdef COMPOSITE
|
||||
#include "/lib/atmospherics/enderBeams.glsl"
|
||||
#endif
|
||||
#if END_CRYSTAL_VORTEX_INTERNAL > 0 || DRAGON_DEATH_EFFECT_INTERNAL > 0
|
||||
#include "/lib/atmospherics/endCrystalVortex.glsl"
|
||||
#endif
|
||||
#include "/lib/atmospherics/fog/endCenterFog.glsl"
|
||||
#endif
|
||||
|
||||
#ifdef ATM_COLOR_MULTS
|
||||
#include "/lib/colors/colorMultipliers.glsl"
|
||||
#endif
|
||||
#ifdef MOON_PHASE_INF_ATMOSPHERE
|
||||
#include "/lib/colors/moonPhaseInfluence.glsl"
|
||||
#endif
|
||||
|
||||
#if WORLD_SPACE_REFLECTIONS_INTERNAL > 0 && defined COMPOSITE
|
||||
#include "/lib/voxelization/lightVoxelization.glsl"
|
||||
#include "/lib/materials/materialMethods/worldSpaceRef.glsl"
|
||||
#endif
|
||||
|
||||
float GetApproxDistance(float depth) {
|
||||
return near * far / (far - depth * far);
|
||||
}
|
||||
|
||||
vec3 nvec3(vec4 pos) {
|
||||
return pos.xyz/pos.w;
|
||||
}
|
||||
|
||||
float refDist = far;
|
||||
|
||||
#include "/lib/materials/materialMethods/reflectionBackground.glsl"
|
||||
|
||||
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, float enderDragonDead, vec2 texelOffset) {
|
||||
// ============================== Step 1: Prepare ============================== //
|
||||
#if WORLD_SPACE_REFLECTIONS_INTERNAL == -1
|
||||
vec2 rEdge = vec2(0.6, 0.55);
|
||||
#else
|
||||
vec2 rEdge = vec2(0.525, 0.525);
|
||||
#endif
|
||||
vec3 normalMR = normalM;
|
||||
#if defined PIXELATED_WATER_REFLECTIONS && defined GBUFFERS_WATER
|
||||
playerPos = TexelSnap(playerPos, texelOffset);
|
||||
viewPos = TexelSnap(viewPos, texelOffset);
|
||||
nViewPos = TexelSnap(nViewPos, texelOffset);
|
||||
lViewPos = TexelSnap(lViewPos, texelOffset);
|
||||
fresnel = TexelSnap(fresnel, texelOffset);
|
||||
#endif
|
||||
|
||||
#if defined GBUFFERS_WATER && WATER_STYLE == 1 && defined GENERATED_NORMALS
|
||||
normalMR = normalize(mix(geoNormal, normalM, 0.05));
|
||||
#endif
|
||||
|
||||
vec3 nViewPosR = normalize(reflect(nViewPos, normalMR));
|
||||
float RVdotU = dot(nViewPosR, upVec);
|
||||
float RVdotS = dot(nViewPosR, sunVec);
|
||||
vec3 worldRefDir = 0.5 * far * (mat3(gbufferModelViewInverse) * nViewPosR);
|
||||
|
||||
#if defined GBUFFERS_WATER && WATER_STYLE >= 2
|
||||
normalMR = normalize(mix(geoNormal, normalM, 0.8));
|
||||
#endif
|
||||
// ============================== End of Step 1 ============================== //
|
||||
|
||||
// ============================== Step 2: Calculate Terrain Reflection and Alpha ============================== //
|
||||
#if WORLD_SPACE_REFLECTIONS_INTERNAL > 0 && defined COMPOSITE && WATER_REFLECT_QUALITY >= 1
|
||||
// In COMPOSITE for translucents we just need to return WSR and that's it
|
||||
if (z0 != z1) {
|
||||
/*vec4 reflection;
|
||||
AddBackgroundReflection(reflection, color, playerPos, normalM, normalMR, viewPos, nViewPos, nViewPosR,
|
||||
shadowMult, RVdotU, RVdotS, z0, dither, skyLightFactor, smoothness, highlightMult);
|
||||
|
||||
return reflection;*/
|
||||
vec4 reflection = getWSR(playerPos, normalMR, nViewPosR, RVdotU, RVdotS, z0, dither);
|
||||
refDist = length(playerPos - wsrHitPos);
|
||||
return reflection;
|
||||
}
|
||||
#endif
|
||||
|
||||
vec4 reflection = vec4(0.0);
|
||||
vec3 refPos = vec3(0.0);
|
||||
vec3 reflectionColor = vec3(0.0);
|
||||
#if (defined COMPOSITE || WATER_REFLECT_QUALITY >= 1) && (WORLD_SPACE_REFLECTIONS_INTERNAL == -1 || WORLD_SPACE_REF_MODE == 2)
|
||||
#if defined COMPOSITE || 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 = normalize(reflect(nViewPos, 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 vectorBase = vector;
|
||||
vec3 viewPosRT = viewPos + vector;
|
||||
vec3 tvector = vector;
|
||||
|
||||
#if WORLD_SPACE_REFLECTIONS_INTERNAL == -1
|
||||
int sampleCount = 30;
|
||||
int refinementCount = 6;
|
||||
#else
|
||||
int sampleCount = 38;
|
||||
int refinementCount = 10;
|
||||
#endif
|
||||
|
||||
int sr = 0;
|
||||
float dist = 0.0;
|
||||
vec3 rfragpos = vec3(0.0);
|
||||
float err = 9999999.0;
|
||||
for (int i = 0; i < sampleCount; 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);
|
||||
|
||||
err = length(viewPosRT - rfragpos);
|
||||
if (err * 0.33333 < length(vector)) {
|
||||
sr++;
|
||||
if (sr >= refinementCount) break;
|
||||
tvector -= vector;
|
||||
vector *= 0.1;
|
||||
}
|
||||
vector *= 2.0;
|
||||
tvector += vector * (0.95 + 0.1 * dither);
|
||||
viewPosRT = start + tvector;
|
||||
}
|
||||
|
||||
float lViewPosRT = length(rfragpos);
|
||||
|
||||
// Finalizing Terrain Reflection and Alpha
|
||||
if (
|
||||
refPos.z < 0.99997
|
||||
#if WORLD_SPACE_REFLECTIONS_INTERNAL > 0 && COLORED_LIGHTING_INTERNAL >= 256
|
||||
&& (err < 2.0 + pow2(lViewPosRT) * 0.001 || lViewPosRT > 0.25 * COLORED_LIGHTING_INTERNAL)
|
||||
#endif
|
||||
) {
|
||||
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;
|
||||
|
||||
if (reflection.a > 0.001) {
|
||||
vec2 edgeFactor = pow2(pow2(pow2(cdist)));
|
||||
#if WORLD_SPACE_REFLECTIONS_INTERNAL == -1
|
||||
refPos.y += (dither - 0.5) * (0.05 * (edgeFactor.x + edgeFactor.y));
|
||||
#endif
|
||||
|
||||
#ifdef GBUFFERS_WATER
|
||||
reflection = texture2D(gaux2, refPos.xy);
|
||||
reflection.rgb = pow2(reflection.rgb * 2.0);
|
||||
#else
|
||||
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;
|
||||
reflectionColor = reflection.rgb;
|
||||
|
||||
#endif
|
||||
|
||||
float skyFade = 0.0;
|
||||
|
||||
#ifdef GBUFFERS_WATER
|
||||
float reflectionPrevAlpha = reflection.a;
|
||||
DoFog(reflection, skyFade, lViewPosRT, ViewToPlayer(rfragpos.xyz), RVdotU, RVdotS, dither, true, lViewPos);
|
||||
reflection.a = reflectionPrevAlpha;
|
||||
//reflection.a *= 1.0 - skyFade;
|
||||
#endif
|
||||
|
||||
edgeFactor.x = pow2(edgeFactor.x);
|
||||
edgeFactor = 1.0 - edgeFactor;
|
||||
float refFactor = pow(edgeFactor.x * edgeFactor.y, 2.0 + 3.0 * GetLuminance(reflection.rgb));
|
||||
#if WORLD_SPACE_REFLECTIONS_INTERNAL > 0 && defined GBUFFERS_WATER
|
||||
refFactor = min(refFactor, 0.1) * 10.0;
|
||||
#endif
|
||||
reflection.a *= refFactor;
|
||||
refDist = dist;
|
||||
}
|
||||
|
||||
float posDif = lViewPosRT - lViewPos;
|
||||
reflection.a *= clamp(posDif + 3.0, 0.0, 1.0);
|
||||
}
|
||||
#if !defined COMPOSITE && defined DISTANT_HORIZONS
|
||||
else
|
||||
#endif
|
||||
#endif
|
||||
#if !defined COMPOSITE && (WATER_REFLECT_QUALITY < 2 || defined DISTANT_HORIZONS) || defined DH_WATER
|
||||
{ // Method 2: Mirorred Image Reflection //
|
||||
|
||||
#if WATER_REFLECT_QUALITY < 2 && !defined DISTANT_HORIZONS
|
||||
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);
|
||||
float z1R = texture2D(depthtex1, screenPosR.xy).x;
|
||||
screenPosR.z = z1R;
|
||||
vec3 viewPosR = ScreenToView(screenPosR);
|
||||
float lViewPosR = length(viewPosR);
|
||||
|
||||
#ifdef DISTANT_HORIZONS
|
||||
float z1RDH = texture2D(dhDepthTex, screenPosR.xy).x;
|
||||
vec4 screenPos1DH = vec4(screenPosR.xy, z1RDH, 1.0);
|
||||
vec4 viewPos1DH = dhProjectionInverse * (screenPos1DH * 2.0 - 1.0);
|
||||
viewPos1DH /= viewPos1DH.w;
|
||||
lViewPosR = min(lViewPosR, length(viewPos1DH.xyz));
|
||||
|
||||
z1R = min(z1R, z1RDH);
|
||||
#endif
|
||||
|
||||
if (z1R < 0.9997 && lViewPos <= 2.0 + lViewPosR) {
|
||||
reflection.rgb = texture2D(gaux2, screenPosR.xy).rgb;
|
||||
reflection.rgb = pow2(reflection.rgb * 2.0);
|
||||
|
||||
edgeFactor = 1.0 - edgeFactor;
|
||||
reflection.a = edgeFactor.x * pow2(edgeFactor.y);
|
||||
reflection.a *= clamp01((dot(nViewPos, nViewPosR) - 0.45) * 10.0); // Fixes perpendicular ref bug
|
||||
|
||||
#ifdef BORDER_FOG
|
||||
float fog = lViewPosR / renderDistance;
|
||||
fog = pow2(pow2(fog));
|
||||
#ifndef DISTANT_HORIZONS
|
||||
fog = pow2(pow2(fog));
|
||||
#endif
|
||||
reflection.a *= exp(-3.0 * fog);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// ============================== End of Step 2 ============================== //
|
||||
|
||||
// ============================== Step 3: Add Sky or WSR Reflection ============================== //
|
||||
#if defined COMPOSITE || WATER_REFLECT_QUALITY >= 1
|
||||
if (reflection.a < 1.0)
|
||||
#endif
|
||||
{
|
||||
AddBackgroundReflection(reflection, color, playerPos, normalM, normalMR, viewPos, nViewPos, nViewPosR,
|
||||
shadowMult, RVdotU, RVdotS, z0, dither, skyLightFactor, smoothness, highlightMult);
|
||||
}
|
||||
// ============================== End of Step 3 ============================== //
|
||||
|
||||
#if (defined COMPOSITE || (WATER_REFLECT_QUALITY >= 2 && defined SKY_EFFECT_REFLECTION)) && (END_CRYSTAL_VORTEX_INTERNAL > 0 || DRAGON_DEATH_EFFECT_INTERNAL > 0)
|
||||
reflection.rgb += EndCrystalVortices(playerPos, worldRefDir, dither).rgb;
|
||||
#endif
|
||||
#if (defined COMPOSITE || (WATER_REFLECT_QUALITY >= 2 && defined SKY_EFFECT_REFLECTION)) && defined END_PORTAL_BEAM_INTERNAL && !defined DH_WATER
|
||||
vec4 refPosPlayer = gbufferModelViewInverse * (gbufferProjectionInverse * vec4(refPos * 2.0 - 1.0, 1.0));
|
||||
refPosPlayer /= refPosPlayer.w;
|
||||
reflection.rgb += sqrt(GetEndPortalBeam(playerPos, refPosPlayer.xyz * reflection.a - playerPos).rgb);
|
||||
#endif
|
||||
|
||||
#if (defined COMPOSITE || WATER_REFLECT_QUALITY >= 2) && (WORLD_SPACE_REFLECTIONS_INTERNAL == -1 || WORLD_SPACE_REF_MODE == 2) && defined END && END_CENTER_LIGHTING > 0 && MC_VERSION >= 10900 && !defined DH_WATER
|
||||
if (reflection.a < 1.0) {
|
||||
float attentuation = doEndCenterFog(playerPos + cameraPositionBest, worldRefDir.xyz, length(viewPosRT - start), 0.07);
|
||||
vec3 pointLightFog = vec3(END_CENTER_LIGHTING_R, END_CENTER_LIGHTING_G + 0.05, END_CENTER_LIGHTING_B) * 0.355 * END_CENTER_LIGHTING * attentuation * enderDragonDead;
|
||||
reflection.rgb += sqrt(clamp01(pointLightFog - reflectionColor));
|
||||
}
|
||||
#endif
|
||||
|
||||
return reflection;
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user