diff --git a/src/generated/resources/assets/malum/blockstates/soulwoven_banner.json b/src/generated/resources/assets/malum/blockstates/soulwoven_banner.json new file mode 100644 index 000000000..1acbf72c5 --- /dev/null +++ b/src/generated/resources/assets/malum/blockstates/soulwoven_banner.json @@ -0,0 +1,27 @@ +{ + "variants": { + "banner_type=hanging_x": { + "model": "malum:block/soulwoven_banner", + "y": 90 + }, + "banner_type=hanging_z": { + "model": "malum:block/soulwoven_banner", + "y": 180 + }, + "banner_type=mounted_east": { + "model": "malum:block/soulwoven_banner_directional", + "y": 270 + }, + "banner_type=mounted_north": { + "model": "malum:block/soulwoven_banner_directional", + "y": 180 + }, + "banner_type=mounted_south": { + "model": "malum:block/soulwoven_banner_directional" + }, + "banner_type=mounted_west": { + "model": "malum:block/soulwoven_banner_directional", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/malum/blockstates/soulwoven_banner_breeze.json b/src/generated/resources/assets/malum/blockstates/soulwoven_banner_breeze.json new file mode 100644 index 000000000..1acbf72c5 --- /dev/null +++ b/src/generated/resources/assets/malum/blockstates/soulwoven_banner_breeze.json @@ -0,0 +1,27 @@ +{ + "variants": { + "banner_type=hanging_x": { + "model": "malum:block/soulwoven_banner", + "y": 90 + }, + "banner_type=hanging_z": { + "model": "malum:block/soulwoven_banner", + "y": 180 + }, + "banner_type=mounted_east": { + "model": "malum:block/soulwoven_banner_directional", + "y": 270 + }, + "banner_type=mounted_north": { + "model": "malum:block/soulwoven_banner_directional", + "y": 180 + }, + "banner_type=mounted_south": { + "model": "malum:block/soulwoven_banner_directional" + }, + "banner_type=mounted_west": { + "model": "malum:block/soulwoven_banner_directional", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/malum/blockstates/soulwoven_banner_fractal.json b/src/generated/resources/assets/malum/blockstates/soulwoven_banner_fractal.json new file mode 100644 index 000000000..1acbf72c5 --- /dev/null +++ b/src/generated/resources/assets/malum/blockstates/soulwoven_banner_fractal.json @@ -0,0 +1,27 @@ +{ + "variants": { + "banner_type=hanging_x": { + "model": "malum:block/soulwoven_banner", + "y": 90 + }, + "banner_type=hanging_z": { + "model": "malum:block/soulwoven_banner", + "y": 180 + }, + "banner_type=mounted_east": { + "model": "malum:block/soulwoven_banner_directional", + "y": 270 + }, + "banner_type=mounted_north": { + "model": "malum:block/soulwoven_banner_directional", + "y": 180 + }, + "banner_type=mounted_south": { + "model": "malum:block/soulwoven_banner_directional" + }, + "banner_type=mounted_west": { + "model": "malum:block/soulwoven_banner_directional", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/malum/blockstates/soulwoven_banner_horns.json b/src/generated/resources/assets/malum/blockstates/soulwoven_banner_horns.json index ef7d0c73a..1acbf72c5 100644 --- a/src/generated/resources/assets/malum/blockstates/soulwoven_banner_horns.json +++ b/src/generated/resources/assets/malum/blockstates/soulwoven_banner_horns.json @@ -9,18 +9,18 @@ "y": 180 }, "banner_type=mounted_east": { - "model": "malum:block/soulwoven_banner_mounted", + "model": "malum:block/soulwoven_banner_directional", "y": 270 }, "banner_type=mounted_north": { - "model": "malum:block/soulwoven_banner_mounted", + "model": "malum:block/soulwoven_banner_directional", "y": 180 }, "banner_type=mounted_south": { - "model": "malum:block/soulwoven_banner_mounted" + "model": "malum:block/soulwoven_banner_directional" }, "banner_type=mounted_west": { - "model": "malum:block/soulwoven_banner_mounted", + "model": "malum:block/soulwoven_banner_directional", "y": 90 } } diff --git a/src/generated/resources/assets/malum/blockstates/soulwoven_banner_sigil.json b/src/generated/resources/assets/malum/blockstates/soulwoven_banner_sigil.json index ef7d0c73a..1acbf72c5 100644 --- a/src/generated/resources/assets/malum/blockstates/soulwoven_banner_sigil.json +++ b/src/generated/resources/assets/malum/blockstates/soulwoven_banner_sigil.json @@ -9,18 +9,18 @@ "y": 180 }, "banner_type=mounted_east": { - "model": "malum:block/soulwoven_banner_mounted", + "model": "malum:block/soulwoven_banner_directional", "y": 270 }, "banner_type=mounted_north": { - "model": "malum:block/soulwoven_banner_mounted", + "model": "malum:block/soulwoven_banner_directional", "y": 180 }, "banner_type=mounted_south": { - "model": "malum:block/soulwoven_banner_mounted" + "model": "malum:block/soulwoven_banner_directional" }, "banner_type=mounted_west": { - "model": "malum:block/soulwoven_banner_mounted", + "model": "malum:block/soulwoven_banner_directional", "y": 90 } } diff --git a/src/generated/resources/assets/malum/lang/en_us.json b/src/generated/resources/assets/malum/lang/en_us.json index eed81b9e7..e84198fbc 100644 --- a/src/generated/resources/assets/malum/lang/en_us.json +++ b/src/generated/resources/assets/malum/lang/en_us.json @@ -214,6 +214,9 @@ "block.malum.soulwood_totem_base": "Soulwood Totem Base", "block.malum.soulwood_totem_pole": "Soulwood Totem Pole", "block.malum.soulwood_trapdoor": "Soulwood Trapdoor", + "block.malum.soulwoven_banner": "Soulwoven Banner", + "block.malum.soulwoven_banner_breeze": "Soulwoven Banner Breeze", + "block.malum.soulwoven_banner_fractal": "Soulwoven Banner Fractal", "block.malum.soulwoven_banner_horns": "Soulwoven Banner Horns", "block.malum.soulwoven_banner_sigil": "Soulwoven Banner Sigil", "block.malum.spirit_altar": "Spirit Altar", @@ -889,7 +892,7 @@ "malum.gui.book.entry.page.headline.scythes.enchanting.rebound": "Rebound", "malum.gui.book.entry.page.headline.scythes.enchanting.spirit_plunder": "Spirit Plunder", "malum.gui.book.entry.page.headline.shielding_apparatus": "Shielding Apparatus", - "malum.gui.book.entry.page.headline.soulhunter_gear": "Soulhunter Gear", + "malum.gui.book.entry.page.headline.soulhunter_armor": "Soulhunter Armor", "malum.gui.book.entry.page.headline.soulstained_armor": "Soulstained Armor", "malum.gui.book.entry.page.headline.soulstained_scythe": "Soulstained Scythe", "malum.gui.book.entry.page.headline.soulstone": "Soulstone", @@ -898,8 +901,9 @@ "malum.gui.book.entry.page.headline.soulwood.color": "Soulwood Study: Color", "malum.gui.book.entry.page.headline.soulwood.intro": "Soulwood Study: Preface", "malum.gui.book.entry.page.headline.soulwood.sap": "Soulwood Study: Sap", + "malum.gui.book.entry.page.headline.soulwoven_pouch": "Soulwoven Pouch", + "malum.gui.book.entry.page.headline.soulwoven_silk": "Soulwoven Silk", "malum.gui.book.entry.page.headline.spirit_crystals": "Spirit Crystals", - "malum.gui.book.entry.page.headline.spirit_fabric": "Spirit Fabric", "malum.gui.book.entry.page.headline.spirit_fabric.pouch": "Spirit Pouch", "malum.gui.book.entry.page.headline.spirit_focusing": "Spirit Focusing", "malum.gui.book.entry.page.headline.spirit_infusion": "Spirit Infusion", @@ -1172,7 +1176,7 @@ "malum.gui.book.entry.page.text.scythes.enchanting.rebound.1": "A scythe reaps. That is its purpose, and that can be harnessed. Should a reaper need my hand? By harnessing the purpose of the blade as a weapon, I can let it act on its own to some extent, as if it were a boomerang. The stronger the enchantment, the sooner it’s ready to throw again.", "malum.gui.book.entry.page.text.scythes.enchanting.spirit_plunder.1": "This is not a perfect method. Some of the soul is unavoidably lost in the moment between blade and stone. But by enchanting the blade, that loss can be mitigated, and more of the soul condensed. This unfortunately strains the stone, and can result in my scythe's durability decreasing.", "malum.gui.book.entry.page.text.shielding_apparatus.1": "By utilizing the multiphasic property of Soulstained Steel, the Shielding Apparatus provides a chance for the damage imposed upon the impetus to be $icompletely/$ absorbed, while also slightly stabilizing the focusing process. It does, however, reduce focusing speed.", - "malum.gui.book.entry.page.text.soulhunter_gear.1": "Spirit Fabric is an insulator, but that doesn't mean it has to dampen magic. This set of armor is designed to focus that magic, effectively amplifying the user's arcane abilities. Unfortunately, it's not exactly the strongest of materials, and it protects me just about as much as leather clothing.", + "malum.gui.book.entry.page.text.soulhunter_armor.1": "Spirit Fabric is an insulator, but that doesn't mean it has to dampen magic. This set of armor is designed to focus that magic, effectively amplifying the user's arcane abilities. Unfortunately, it's not exactly the strongest of materials, and it protects me just about as much as leather clothing.", "malum.gui.book.entry.page.text.soulstained_armor.1": "Much like the Soulstained Scythe, I have improved upon my mundane iron armor to create the Soulstained Armor. To avoid the metal touching me directly, and so jostling and rubbing against my very soul, I used thin plates of Twisted Rock beneath the metal of the armor.", "malum.gui.book.entry.page.text.soulstained_armor.2": "As it exists in both the arcane and physical realms, Soulstained Steel exhibits fascinating defensive properties. It can intercept attacks from both, creating an effect I call Soul Ward. It takes time to restore if the effect is disrupted, but it acts as additional armor which nearly absorbs magic damage completely, and dampens physical damage.", "malum.gui.book.entry.page.text.soulstained_armor.3": "This effect seems similar in nature to others I have studied, such as engraving runes into armor or invoking a black sun upon oneself. Though unlike those, it doesn't $iappear/$ to have a cost. Where is the energy for Soul Ward coming from?", @@ -1184,11 +1188,12 @@ "malum.gui.book.entry.page.text.soulwood.color.1": "The most obvious differences with the tree itself are shape and leaf color. Soulwood is more spindly than Runewood, and its leaves are a sickly purple-red hue instead of a rich orange-yellow. It can still be used for many of the same things, though.", "malum.gui.book.entry.page.text.soulwood.intro.1": "After further study, I have discovered that the Soulwood produced by the Unchained Rite has actually become an entirely different species from the Runewood it is made from. It grows differently, it acts differently... it appears the spiritual scars that created it go deeper than just its color and magic.", "malum.gui.book.entry.page.text.soulwood.sap.1": "The sticky lifeblood of the tree also seems to well up much more often in a tree than in Runewood. The sap's effects are corrupted as well; rather than restoring my vigor, Unholy Syrup enhances it, increasing my attack strength and providing damage resistance.", + "malum.gui.book.entry.page.text.soulwoven_pouch.1": "But this fabric works wonderfully for storing spirit crystals. It keeps the arcana condensed within, and will even store spirits I pick up before they so much as clutter my pockets. It can store as many spirits as a single chest, making it quite convenient to carry around.", + "malum.gui.book.entry.page.text.soulwoven_silk.1": "Soulwoven Silk is a light yet sturdy material that acts as an insulator for spirit energies. While other materials do exhibit matching interactions with the arcane, this bond between magic and cloth should make for a unique material.", + "malum.gui.book.entry.page.text.soulwoven_silk.soulwoven_banner.1": "To further study and confirm the insulating properties of the cloth, I've heft together a set of Soulwoven Banners with patterns based on each of the spirits I've been met with thus far. If further imbued with Spirit Arcana, the Banners will gain a dim, and them powerful glow with two shards infused.", "malum.gui.book.entry.page.text.spirit_crystals.1": "The soul is a notoriously fickle thing. Even confirming its existence is difficult, requiring the highest thaumaturgies to get a reading. That is what sets spirit arcana apart from other magic. We don't need grand assemblies and esoteric artifice to see a soul. Simply destroying it is proof enough.", "malum.gui.book.entry.page.text.spirit_crystals.2": "A material I have named Soulstone is the means by which we do so. It appears mundane until refined, but once it is rid of impurities, it seems... out of phase with the world. By creating a blade using it as a core, I should be able to strike not only the physical form, but also the soul, shattering it to energy before it can disperse.", "malum.gui.book.entry.page.text.spirit_crystals.3": "These energies, as previously noted, have different 'frequencies' of sorts. A being burning with light would have a soul that reflects that radiance, and a being prone to adaptation would have a soul as malleable as itself. Occasionally, the energy has no flavor to it at all, leaving only the raw impulse of creation behind. That type of crystal bears further study.", - "malum.gui.book.entry.page.text.spirit_fabric.1": "Spirit Fabric is a light yet sturdy material that acts as an insulator for spirit energies. While other materials have the same properties, it's not exactly practical to craft a pouch or clothing from stone. I'm not willing to go quite so far for my research as to try wearing something like $ithat/$.", - "malum.gui.book.entry.page.text.spirit_fabric.pouch.1": "But this fabric works wonderfully for storing spirit crystals. It keeps the arcana condensed within, and will even store spirits I pick up before they so much as clutter my pockets. It can store as many spirits as a single chest, making it quite convenient to carry around.", "malum.gui.book.entry.page.text.spirit_focusing.1": "Using the opposing polarities of Twisted and Tainted Rock, I have created a device that draws in and focuses arcane energy. If given a compatible substrate, I can use this process to create things.", "malum.gui.book.entry.page.text.spirit_focusing.2": "The basic substrate here is the Alchemical Impetus, an artifact similar to those I've seen in the past. By focusing arcana into it, I can cause bits of the calx to transmute into something new, though this damages the Impetus in the process.", "malum.gui.book.entry.page.text.spirit_infusion.1": "By using Runewood's natural magic as a base, I have designed the altar that will serve as the basis for my magecraft - the Spirit Altar. It is the other piece of the equation, the use for the arcana. By infusing them into items, and using the energies to effect other fusions, I can begin to explore this.", @@ -1370,8 +1375,8 @@ "malum.gui.book.entry.scythes.enchanting.description": "Two ways to skin a soul", "malum.gui.book.entry.shielding_apparatus": "Shielding Apparatus", "malum.gui.book.entry.shielding_apparatus.description": "A bulwark against the storm", - "malum.gui.book.entry.soulhunter_gear": "Soulhunter Gear", - "malum.gui.book.entry.soulhunter_gear.description": "Glass cannon", + "malum.gui.book.entry.soulhunter_armor": "Soulhunter Armor", + "malum.gui.book.entry.soulhunter_armor.description": "Shaped like glass", "malum.gui.book.entry.soulstained_armor": "Soulstained Armor", "malum.gui.book.entry.soulstained_armor.description": "Spiritual protection", "malum.gui.book.entry.soulstained_scythe": "Soulstained Scythe", @@ -1380,10 +1385,12 @@ "malum.gui.book.entry.soulstone.description": "Out of phase", "malum.gui.book.entry.soulwood": "A Study on Soulwood", "malum.gui.book.entry.soulwood.description": "Twisted trees", + "malum.gui.book.entry.soulwoven_pouch": "Soulwoven Pouch", + "malum.gui.book.entry.soulwoven_pouch.description": "[Soulwoven Pouch Tooltip]", + "malum.gui.book.entry.soulwoven_silk": "Soulwoven Silk", + "malum.gui.book.entry.soulwoven_silk.description": "Wicked weaves", "malum.gui.book.entry.spirit_crystals": "Spirit Crystals", "malum.gui.book.entry.spirit_crystals.description": "Matter and magic", - "malum.gui.book.entry.spirit_fabric": "Spirit Fabric", - "malum.gui.book.entry.spirit_fabric.description": "Wicked weaves", "malum.gui.book.entry.spirit_focusing": "Spirit Focusing", "malum.gui.book.entry.spirit_focusing.description": "Mystic replication", "malum.gui.book.entry.spirit_infusion": "Spirit Infusion", diff --git a/src/generated/resources/assets/malum/models/item/soulwoven_banner.json b/src/generated/resources/assets/malum/models/item/soulwoven_banner.json new file mode 100644 index 000000000..0886796c5 --- /dev/null +++ b/src/generated/resources/assets/malum/models/item/soulwoven_banner.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "malum:item/soulwoven_banner" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/malum/models/item/soulwoven_banner_breeze.json b/src/generated/resources/assets/malum/models/item/soulwoven_banner_breeze.json new file mode 100644 index 000000000..9b7ddec9f --- /dev/null +++ b/src/generated/resources/assets/malum/models/item/soulwoven_banner_breeze.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "malum:item/soulwoven_banner_breeze" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/malum/models/item/soulwoven_banner_fractal.json b/src/generated/resources/assets/malum/models/item/soulwoven_banner_fractal.json new file mode 100644 index 000000000..929713121 --- /dev/null +++ b/src/generated/resources/assets/malum/models/item/soulwoven_banner_fractal.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "malum:item/soulwoven_banner_fractal" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/malum/advancement/recipes/misc/soulwoven_banner.json b/src/generated/resources/data/malum/advancement/recipes/misc/soulwoven_banner.json new file mode 100644 index 000000000..5bd8a9340 --- /dev/null +++ b/src/generated/resources/data/malum/advancement/recipes/misc/soulwoven_banner.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_soulwoven_silk": { + "conditions": { + "items": [ + { + "items": "malum:soulwoven_silk" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "malum:soulwoven_banner" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_soulwoven_silk" + ] + ], + "rewards": { + "recipes": [ + "malum:soulwoven_banner" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/malum/loot_table/blocks/soulwoven_banner.json b/src/generated/resources/data/malum/loot_table/blocks/soulwoven_banner.json new file mode 100644 index 000000000..b1e34ce7c --- /dev/null +++ b/src/generated/resources/data/malum/loot_table/blocks/soulwoven_banner.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "malum:soulwoven_banner" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "malum:blocks/soulwoven_banner" +} \ No newline at end of file diff --git a/src/generated/resources/data/malum/loot_table/blocks/soulwoven_banner_breeze.json b/src/generated/resources/data/malum/loot_table/blocks/soulwoven_banner_breeze.json new file mode 100644 index 000000000..3900b38f2 --- /dev/null +++ b/src/generated/resources/data/malum/loot_table/blocks/soulwoven_banner_breeze.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "malum:soulwoven_banner_breeze" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "malum:blocks/soulwoven_banner_breeze" +} \ No newline at end of file diff --git a/src/generated/resources/data/malum/loot_table/blocks/soulwoven_banner_fractal.json b/src/generated/resources/data/malum/loot_table/blocks/soulwoven_banner_fractal.json new file mode 100644 index 000000000..921105cb2 --- /dev/null +++ b/src/generated/resources/data/malum/loot_table/blocks/soulwoven_banner_fractal.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "malum:soulwoven_banner_fractal" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "malum:blocks/soulwoven_banner_fractal" +} \ No newline at end of file diff --git a/src/generated/resources/data/malum/recipe/soulwoven_banner.json b/src/generated/resources/data/malum/recipe/soulwoven_banner.json new file mode 100644 index 000000000..254cacc52 --- /dev/null +++ b/src/generated/resources/data/malum/recipe/soulwoven_banner.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "X": { + "tag": "malum:runewood_planks" + }, + "Y": { + "item": "malum:soulwoven_silk" + } + }, + "pattern": [ + "X", + "Y", + "Y" + ], + "result": { + "count": 1, + "id": "malum:soulwoven_banner" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/malum/recipe/soulwoven_silk.json b/src/generated/resources/data/malum/recipe/soulwoven_silk.json index d5c07fc2a..23e76d4db 100644 --- a/src/generated/resources/data/malum/recipe/soulwoven_silk.json +++ b/src/generated/resources/data/malum/recipe/soulwoven_silk.json @@ -4,10 +4,6 @@ { "count": 2, "tag": "c:strings" - }, - { - "count": 1, - "item": "malum:hex_ash" } ], "ingredient": { @@ -20,16 +16,12 @@ }, "spirits": [ { - "type": "wicked", - "count": 2 + "type": "aerial", + "count": 3 }, { "type": "earthen", - "count": 1 - }, - { - "type": "aerial", - "count": 1 + "count": 3 } ] } \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/block/mineable/axe.json b/src/generated/resources/data/minecraft/tags/block/mineable/axe.json index 7dc29d4da..84ebcf064 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/axe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/axe.json @@ -12,8 +12,11 @@ "malum:runewood_totem_pole", "malum:soulwood_totem_base", "malum:soulwood_totem_pole", - "malum:soulwoven_banner_sigil", + "malum:soulwoven_banner", "malum:soulwoven_banner_horns", + "malum:soulwoven_banner_sigil", + "malum:soulwoven_banner_breeze", + "malum:soulwoven_banner_fractal", "malum:stripped_runewood_log", "malum:runewood_log", "malum:stripped_runewood", diff --git a/src/main/java/com/sammy/malum/client/renderer/block/SoulwovenBannerRenderer.java b/src/main/java/com/sammy/malum/client/renderer/block/SoulwovenBannerRenderer.java index 4ccde3785..f873b4b7e 100644 --- a/src/main/java/com/sammy/malum/client/renderer/block/SoulwovenBannerRenderer.java +++ b/src/main/java/com/sammy/malum/client/renderer/block/SoulwovenBannerRenderer.java @@ -7,6 +7,7 @@ import com.sammy.malum.common.block.curiosities.banner.*; import com.sammy.malum.common.block.curiosities.mana_mote.*; import com.sammy.malum.core.systems.spirit.*; +import com.sammy.malum.registry.common.*; import net.minecraft.client.renderer.*; import net.minecraft.client.renderer.blockentity.*; import net.minecraft.core.*; @@ -14,6 +15,7 @@ import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; import org.joml.*; +import team.lodestar.lodestone.handlers.*; import team.lodestar.lodestone.registry.client.*; import team.lodestar.lodestone.systems.rendering.*; import team.lodestar.lodestone.systems.rendering.rendeertype.*; @@ -34,13 +36,18 @@ public void render(SoulwovenBannerBlockEntity blockEntityIn, float partialTicks, if (!(blockState.getBlock() instanceof SoulwovenBannerBlock block)) { return; } + var token = RenderTypeToken.createCachedToken(block.texture); + var banner = LodestoneRenderTypes.TRANSPARENT_TEXTURE.applyAndCache(token); + var builder = VFXBuilders.createWorld().setRenderType(banner).setLight(combinedLightIn); var pos = blockEntityIn.getBlockPos(); + var spirit = blockEntityIn.spirit; var type = blockState.getValue(SoulwovenBannerBlock.BANNER_TYPE); var direction = type.direction.getAxis().isVertical() ? type.equals(SoulwovenBannerBlock.BannerType.HANGING_Z) ? Direction.NORTH : Direction.WEST : type.direction; - var builder = VFXBuilders.createWorld() - .setRenderType(LodestoneRenderTypes.TRANSPARENT_TEXTURE.applyWithModifierAndCache(RenderTypeToken.createCachedToken(block.texture), b -> b.setCullState(RenderStateShard.NO_CULL))); float sway = ((float) Math.floorMod((pos.getX() * 7L + pos.getY() * 9L + pos.getZ() * 13L) + blockEntityIn.getLevel().getGameTime(), 100L) + partialTicks) / 100.0F; float swayRotation = (0.01F * Mth.cos((float) (Math.PI * 2) * sway)) * (float) Math.PI; + if (spirit == SpiritTypeRegistry.AERIAL_SPIRIT) { + swayRotation*=2f; + } poseStack.pushPose(); poseStack.translate(0.5f, 0.5f, 0.5f); @@ -59,9 +66,26 @@ public void render(SoulwovenBannerBlockEntity blockEntityIn, float partialTicks, float xEnd = 1; float yStart = -2; float yEnd = 0; - Vector3f[] vertices = new Vector3f[]{new Vector3f(xEnd, yStart, 0), new Vector3f(xStart, yStart, 0), new Vector3f(xStart, yEnd, 0), new Vector3f(xEnd, yEnd, 0)}; - builder.renderQuad(poseStack, vertices, 1f); + var vertices = new Vector3f[]{new Vector3f(xEnd, yStart, 0), new Vector3f(xStart, yStart, 0), new Vector3f(xStart, yEnd, 0), new Vector3f(xEnd, yEnd, 0)}; + var reversedVertices = new Vector3f[]{vertices[1], vertices[0], vertices[3], vertices[2]}; + builder.renderQuad(poseStack, vertices, 1f); + builder.renderQuad(poseStack, reversedVertices, 1f); + if (spirit != null) { + var spiritGlow = blockEntityIn.intense ? + LodestoneRenderTypes.ADDITIVE_TEXTURE.applyAndCache(token) : + LodestoneRenderTypes.ADDITIVE_TEXTURE.applyAndCache(token, ShaderUniformHandler.LUMITRANSPARENT); + var spiritBuilder = VFXBuilders.createWorld().setRenderType(spiritGlow).setColor(spirit.getPrimaryColor()); + for (int i = 0; i < 4; i++) { + int offset = 3 - i * 2; + poseStack.pushPose(); + poseStack.translate(0, 0, 0.001f * offset); + spiritBuilder.setAlpha(0.8f * Mth.abs(offset)); + spiritBuilder.renderQuad(poseStack, vertices, 1f); + spiritBuilder.renderQuad(poseStack, reversedVertices, 1f); + poseStack.popPose(); + } + } poseStack.popPose(); } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/client/screen/codex/entries/ArtificeEntries.java b/src/main/java/com/sammy/malum/client/screen/codex/entries/ArtificeEntries.java index dffae7efd..8a9e108df 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/entries/ArtificeEntries.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/entries/ArtificeEntries.java @@ -16,7 +16,7 @@ public class ArtificeEntries { public static void setupEntries(ArcanaProgressionScreen screen) { Item EMPTY = ItemStack.EMPTY.getItem(); - screen.addEntry("spirit_stones", 3, 6, b -> b + screen.addEntry("spirit_stones", 3, 7, b -> b .configureWidget(w -> w.setIcon(TAINTED_ROCK)) .addPage(new HeadlineTextPage("spirit_stones.tainted_rock", "spirit_stones.tainted_rock.1")) .addPage(SpiritInfusionPage.fromOutput(TAINTED_ROCK.get())) @@ -34,7 +34,10 @@ public static void setupEntries(ArcanaProgressionScreen screen) { )) ); - screen.addEntry("ether", 5, 6, b -> b + screen.addEntry("something1", 4, 8, b -> {}); + screen.addEntry("something2", 5, 8, b -> {}); + + screen.addEntry("ether", 6, 9, b -> b .configureWidget(w -> w.setIcon(ETHER)) .addPage(new HeadlineTextPage("ether", "ether.1")) .addPage(SpiritInfusionPage.fromOutput(ETHER.get())) @@ -54,17 +57,24 @@ public static void setupEntries(ArcanaProgressionScreen screen) { ) ); - screen.addEntry("spirit_fabric", 4, 5, b -> b + screen.addEntry("soulwoven_silk", 4, 5, b -> b .configureWidget(w -> w.setIcon(SOULWOVEN_SILK)) - .addPage(new HeadlineTextPage("spirit_fabric", "spirit_fabric.1")) + .addPage(new HeadlineTextPage("soulwoven_silk", "soulwoven_silk.1")) .addPage(SpiritInfusionPage.fromOutput(SOULWOVEN_SILK.get())) - .addPage(new HeadlineTextPage("spirit_fabric.pouch", "spirit_fabric.pouch.1")) - .addPage(new CraftingPage(SPIRIT_POUCH.get(), EMPTY, STRING, EMPTY, SOULWOVEN_SILK.get(), SOUL_SAND, SOULWOVEN_SILK.get(), EMPTY, SOULWOVEN_SILK.get(), EMPTY)) + .addPage(new TextPage("soulwoven_silk.soulwoven_banner.1")) + .addPage(new CraftingPage(new ItemStack(SOULWOVEN_BANNER.get(), 2), EMPTY, RUNEWOOD_PLANKS.get(), EMPTY, EMPTY, SOULWOVEN_SILK.get(), EMPTY, EMPTY, SOULWOVEN_SILK.get())) + .addPage(new CyclingPage( + SpiritInfusionPage.fromOutput(SOULWOVEN_BANNER_HORNS.get()), + SpiritInfusionPage.fromOutput(SOULWOVEN_BANNER_SIGIL.get()), + SpiritInfusionPage.fromOutput(SOULWOVEN_BANNER_BREEZE.get()), + SpiritInfusionPage.fromOutput(SOULWOVEN_BANNER_FRACTAL.get()) + )) ); - screen.addEntry("soulhunter_gear", 4, 7, b -> b + screen.addEntry("something1", 5, 6, b -> {}); + screen.addEntry("soulhunter_armor", 6, 6, b -> b .configureWidget(w -> w.setIcon(SOUL_HUNTER_CLOAK)) - .addPage(new HeadlineTextPage("soulhunter_gear", "soulhunter_gear.1")) + .addPage(new HeadlineTextPage("soulhunter_armor", "soulhunter_armor.1")) .addPage(new CyclingPage( SpiritInfusionPage.fromOutput(SOUL_HUNTER_CLOAK.get()), SpiritInfusionPage.fromOutput(SOUL_HUNTER_ROBE.get()), @@ -73,7 +83,10 @@ public static void setupEntries(ArcanaProgressionScreen screen) { )) ); - screen.addEntry("spirit_focusing", 7, 6, b -> b + screen.addEntry("something2", 7, 7, b -> {}); + + + screen.addEntry("spirit_focusing", 10, 7, b -> b .configureWidget(w -> w.setIcon(SPIRIT_CRUCIBLE)) .addPage(new HeadlineTextItemPage("spirit_focusing", "spirit_focusing.1", SPIRIT_CRUCIBLE.get())) .addPage(new TextPage("spirit_focusing.2")) @@ -81,7 +94,7 @@ public static void setupEntries(ArcanaProgressionScreen screen) { .addPage(SpiritInfusionPage.fromOutput(ALCHEMICAL_IMPETUS.get())) ); - screen.addEntry("focus_ashes", 6, 5, b -> b + screen.addEntry("focus_ashes", 9, 6, b -> b .configureWidget(w -> w.setIcon(GUNPOWDER)) .addPage(new HeadlineTextPage("focus_ashes", "focus_ashes.1")) .addPage(SpiritFocusingPage.fromOutput(GUNPOWDER)) @@ -89,7 +102,7 @@ public static void setupEntries(ArcanaProgressionScreen screen) { .addPage(SpiritFocusingPage.fromOutput(REDSTONE)) ); - screen.addEntry("focus_metals", 8, 7, b -> b + screen.addEntry("focus_metals", 11, 8, b -> b .configureWidget(w -> w.setIcon(IRON_NODE)) .addPage(new HeadlineTextItemPage("focus_metals", "focus_metals.1", IRON_NODE.get())) .addPage(new TextPage("focus_metals.2")) @@ -121,7 +134,7 @@ public static void setupEntries(ArcanaProgressionScreen screen) { )) ); - screen.addEntry("focus_crystals", 9, 5, b -> b + screen.addEntry("focus_crystals", 12, 6, b -> b .configureWidget(w -> w.setIcon(QUARTZ)) .addPage(new HeadlineTextPage("focus_crystals", "focus_crystals.1")) .addPage(SpiritFocusingPage.fromOutput(QUARTZ)) @@ -130,7 +143,7 @@ public static void setupEntries(ArcanaProgressionScreen screen) { .addPage(SpiritFocusingPage.fromOutput(PRISMARINE)) ); - screen.addEntry("crucible_acceleration", 7, 4, b -> b + screen.addEntry("crucible_acceleration", 10, 5, b -> b .configureWidget(w -> w.setIcon(SPIRIT_CATALYZER)) .addPage(new HeadlineTextPage("crucible_acceleration", "crucible_acceleration.1")) .addPage(new TextPage("crucible_acceleration.2")) @@ -138,7 +151,7 @@ public static void setupEntries(ArcanaProgressionScreen screen) { .addPage(SpiritInfusionPage.fromOutput(SPIRIT_CATALYZER.get())) ); - screen.addEntry("arcane_restoration", 7, 8, b -> b + screen.addEntry("arcane_restoration", 10, 9, b -> b .configureWidget(w -> w.setIcon(REPAIR_PYLON)) .addPage(new HeadlineTextPage("arcane_restoration", "arcane_restoration.1")) .addPage(SpiritInfusionPage.fromOutput(REPAIR_PYLON.get())) @@ -157,7 +170,7 @@ public static void setupEntries(ArcanaProgressionScreen screen) { SpiritRepairPage.fromOutput(ZINC_IMPETUS.get()), SpiritRepairPage.fromOutput(TIN_IMPETUS.get()) )) - .addReference(new EntryReference(IRON_SWORD, BookEntry.build("arcane_restoration.tool_repair") + .addReference(new EntryReference(IRON_PICKAXE, BookEntry.build("arcane_restoration.tool_repair") .addPage(new HeadlineTextPage("arcane_restoration.tool_repair", "arcane_restoration.tool_repair.1")) .addPage(SpiritRepairPage.fromId("wooden")) .addPage(SpiritRepairPage.fromId("stone")) diff --git a/src/main/java/com/sammy/malum/client/screen/codex/entries/AugmentationEntries.java b/src/main/java/com/sammy/malum/client/screen/codex/entries/AugmentationEntries.java index b51a33e50..5c64289d1 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/entries/AugmentationEntries.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/entries/AugmentationEntries.java @@ -13,7 +13,7 @@ public class AugmentationEntries { public static void setupEntries(ArcanaProgressionScreen screen) { Item EMPTY = ItemStack.EMPTY.getItem(); - screen.addEntry("crucible_augmentation", 11, 8, b -> b + screen.addEntry("crucible_augmentation", 13, 8, b -> b .configureWidget(w -> w.setIcon(TUNING_FORK).setStyle(BookWidgetStyle.GILDED_RUNEWOOD)) .addPage(new HeadlineTextPage("crucible_augmentation", "crucible_augmentation.1")) .addPage(new TextPage("crucible_augmentation.2")) @@ -21,49 +21,49 @@ public static void setupEntries(ArcanaProgressionScreen screen) { .addPage(SpiritInfusionPage.fromOutput(TUNING_FORK.get())) ); - screen.addEntry("mending_diffuser", 12, 7, b -> b + screen.addEntry("mending_diffuser", 14, 7, b -> b .configureWidget(w -> w.setIcon(MENDING_DIFFUSER)) .addPage(new HeadlineTextPage("mending_diffuser", "mending_diffuser.1")) .addPage(SpiritInfusionPage.fromOutput(MENDING_DIFFUSER.get())) ); - screen.addEntry("impurity_stabilizer", 13, 7, b -> b + screen.addEntry("impurity_stabilizer", 15, 7, b -> b .configureWidget(w -> w.setIcon(IMPURITY_STABILIZER)) .addPage(new HeadlineTextPage("impurity_stabilizer", "impurity_stabilizer.1")) .addPage(SpiritInfusionPage.fromOutput(IMPURITY_STABILIZER.get())) ); - screen.addEntry("accelerating_inlay", 14, 8, b -> b + screen.addEntry("accelerating_inlay", 16, 8, b -> b .configureWidget(w -> w.setIcon(ACCELERATING_INLAY)) .addPage(new HeadlineTextPage("accelerating_inlay", "accelerating_inlay.1")) .addPage(SpiritInfusionPage.fromOutput(ACCELERATING_INLAY.get())) ); - screen.addEntry("blazing_diode", 13, 8, b -> b + screen.addEntry("blazing_diode", 15, 8, b -> b .configureWidget(w -> w.setIcon(BLAZING_DIODE)) .addPage(new HeadlineTextPage("blazing_diode", "blazing_diode.1")) .addPage(SpiritInfusionPage.fromOutput(BLAZING_DIODE.get())) ); - screen.addEntry("prismatic_focus_lens", 13, 9, b -> b + screen.addEntry("prismatic_focus_lens", 15, 9, b -> b .configureWidget(w -> w.setIcon(PRISMATIC_FOCUS_LENS)) .addPage(new HeadlineTextPage("prismatic_focus_lens", "prismatic_focus_lens.1")) .addPage(SpiritInfusionPage.fromOutput(PRISMATIC_FOCUS_LENS.get())) ); - screen.addEntry("intricate_assembly", 14, 9, b -> b + screen.addEntry("intricate_assembly", 16, 9, b -> b .configureWidget(w -> w.setIcon(INTRICATE_ASSEMBLY)) .addPage(new HeadlineTextPage("intricate_assembly", "intricate_assembly.1")) .addPage(SpiritInfusionPage.fromOutput(INTRICATE_ASSEMBLY.get())) ); - screen.addEntry("shielding_apparatus", 14, 10, b -> b + screen.addEntry("shielding_apparatus", 16, 10, b -> b .configureWidget(w -> w.setIcon(SHIELDING_APPARATUS)) .addPage(new HeadlineTextPage("shielding_apparatus", "shielding_apparatus.1")) .addPage(SpiritInfusionPage.fromOutput(SHIELDING_APPARATUS.get())) ); - screen.addEntry("warping_engine", 15, 10, b -> b + screen.addEntry("warping_engine", 17, 10, b -> b .configureWidget(w -> w.setIcon(WARPING_ENGINE)) .addPage(new HeadlineTextPage("warping_engine", "warping_engine.1")) .addPage(new TextPage("warping_engine.2")) diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/banner/SoulwovenBannerBlock.java b/src/main/java/com/sammy/malum/common/block/curiosities/banner/SoulwovenBannerBlock.java index 4bd01528e..83f5007eb 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/banner/SoulwovenBannerBlock.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/banner/SoulwovenBannerBlock.java @@ -28,6 +28,7 @@ public class SoulwovenBannerBlock extends LodestoneEntityBlock { public static final EnumProperty BANNER_TYPE = EnumProperty.create("banner_type", BannerType.class); public final ResourceLocation texture; + private static final VoxelShape SHAPE = Block.box(2.0, 0.0, 2.0, 12.0, 16.0, 12.0); public SoulwovenBannerBlock(String id, Properties properties) { this(MalumMod.malumPath("textures/block/soulwoven_banner_" + id + ".png"), properties); diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/banner/SoulwovenBannerBlockEntity.java b/src/main/java/com/sammy/malum/common/block/curiosities/banner/SoulwovenBannerBlockEntity.java index a9a0d3f35..60014dd94 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/banner/SoulwovenBannerBlockEntity.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/banner/SoulwovenBannerBlockEntity.java @@ -1,18 +1,88 @@ package com.sammy.malum.common.block.curiosities.banner; -import com.sammy.malum.common.item.*; +import com.sammy.malum.common.block.curiosities.totem.*; +import com.sammy.malum.common.item.spirit.*; +import com.sammy.malum.core.systems.spirit.*; +import com.sammy.malum.registry.common.*; import com.sammy.malum.registry.common.block.*; +import com.sammy.malum.visual_effects.networked.data.*; import net.minecraft.core.*; import net.minecraft.nbt.*; -import net.minecraft.resources.*; -import net.minecraft.world.entity.*; +import net.minecraft.server.level.*; +import net.minecraft.sounds.*; +import net.minecraft.util.*; +import net.minecraft.world.*; +import net.minecraft.world.entity.player.*; import net.minecraft.world.item.*; +import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.*; +import net.neoforged.neoforge.common.*; +import team.lodestar.lodestone.helpers.block.*; import team.lodestar.lodestone.systems.blockentity.*; +import javax.annotation.*; + public class SoulwovenBannerBlockEntity extends LodestoneBlockEntity { + public MalumSpiritType spirit; + public boolean intense; + public SoulwovenBannerBlockEntity(BlockPos pos, BlockState state) { super(BlockEntityRegistry.SOULWOVEN_BANNER.get(), pos, state); } + + @Override + public ItemInteractionResult onUseWithItem(Player pPlayer, ItemStack pStack, InteractionHand pHand) { + if (level instanceof ServerLevel serverLevel) { + if (pStack.getItem() instanceof SpiritShardItem shardItem) { + var spirit = shardItem.type; + if ((spirit.equals(this.spirit) && intense) || spirit.equals(SpiritTypeRegistry.UMBRAL_SPIRIT)) { + return super.onUseWithItem(pPlayer, pStack, pHand); + } + if (!pPlayer.isCreative()) { + pStack.shrink(1); + } + setSpirit(serverLevel, spirit); + pPlayer.swing(pHand, true); + } + if (pStack.canPerformAction(ItemAbilities.SHEARS_DISARM)) { + if (spirit != null) { + setSpirit(serverLevel, null); + pPlayer.swing(pHand, true); + } + } + } + return super.onUseWithItem(pPlayer, pStack, pHand); + } + + public void setSpirit(ServerLevel serverLevel, @Nullable MalumSpiritType spirit) { + level.playSound(null, worldPosition, SoundRegistry.TOTEM_ENGRAVE.get(), SoundSource.BLOCKS, 1, Mth.nextFloat(level.random, 0.9f, 1.1f)); + level.playSound(null, worldPosition, SoundEvents.SHEEP_SHEAR, SoundSource.BLOCKS, 1, Mth.nextFloat(level.random, 0.9f, 1.1f)); + if (spirit != null) { + ParticleEffectTypeRegistry.TOTEM_POLE_ACTIVATED.createPositionedEffect(serverLevel, new PositionEffectData(worldPosition), new ColorEffectData(spirit)); + } + intense = this.spirit == spirit; + this.spirit = spirit; + BlockStateHelper.updateState(level, worldPosition); + } + + @Override + protected void loadAdditional(CompoundTag pTag, HolderLookup.Provider pRegistries) { + super.loadAdditional(pTag, pRegistries); + if (pTag.contains("spirit")) { + spirit = MalumSpiritType.getSpiritType(pTag.getString("spirit")); + } else { + spirit = null; + } + intense = pTag.getBoolean("intense"); + } + + @Override + protected void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) { + super.saveAdditional(tag, registries); + if (spirit != null) { + tag.putString("spirit", spirit.getIdentifier()); + } + tag.putBoolean("intense", intense); + } } diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/totem/TotemPoleBlockEntity.java b/src/main/java/com/sammy/malum/common/block/curiosities/totem/TotemPoleBlockEntity.java index c8f9fd780..37c433a59 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/totem/TotemPoleBlockEntity.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/totem/TotemPoleBlockEntity.java @@ -75,7 +75,7 @@ else if (held.canPerformAction(ItemAbilities.AXE_STRIP)) { } } if (success) { - ParticleEffectTypeRegistry.TOTEM_POLE_ACTIVATED.createPositionedEffect((ServerLevel) level, new PositionEffectData(worldPosition)); + ParticleEffectTypeRegistry.TOTEM_POLE_ACTIVATED.createPositionedEffect((ServerLevel) level, new PositionEffectData(worldPosition), new ColorEffectData(spirit)); level.playSound(null, worldPosition, SoundRegistry.TOTEM_ENGRAVE.get(), SoundSource.BLOCKS, 1, Mth.nextFloat(level.random, 0.9f, 1.1f)); if (isSoulwood) { level.playSound(null, worldPosition, SoundRegistry.MAJOR_BLIGHT_MOTIF.get(), SoundSource.BLOCKS, 1, 1); @@ -141,7 +141,7 @@ public void tick() { public void setSpirit(MalumSpiritType type) { level.playSound(null, worldPosition, SoundRegistry.TOTEM_ENGRAVE.get(), SoundSource.BLOCKS, 1, Mth.nextFloat(level.random, 0.9f, 1.1f)); level.playSound(null, worldPosition, SoundEvents.AXE_STRIP, SoundSource.BLOCKS, 1, Mth.nextFloat(level.random, 0.9f, 1.1f)); - ParticleEffectTypeRegistry.TOTEM_POLE_ACTIVATED.createPositionedEffect((ServerLevel) level, new PositionEffectData(worldPosition)); + ParticleEffectTypeRegistry.TOTEM_POLE_ACTIVATED.createPositionedEffect((ServerLevel) level, new PositionEffectData(worldPosition), new ColorEffectData(spirit)); this.spirit = type; this.chargeProgress = 10; BlockStateHelper.updateState(level, worldPosition); @@ -149,7 +149,7 @@ public void setSpirit(MalumSpiritType type) { public void riteStarting(TotemBaseBlockEntity totemBase, int height) { level.playSound(null, worldPosition, SoundRegistry.TOTEM_CHARGE.get(), SoundSource.BLOCKS, 1, 0.9f + 0.2f * height); - ParticleEffectTypeRegistry.TOTEM_POLE_ACTIVATED.createPositionedEffect((ServerLevel) level, new PositionEffectData(worldPosition)); + ParticleEffectTypeRegistry.TOTEM_POLE_ACTIVATED.createPositionedEffect((ServerLevel) level, new PositionEffectData(worldPosition), new ColorEffectData(spirit)); this.totemBaseYLevel = worldPosition.getY() - height; this.totemBase = totemBase; this.totemPoleState = TotemPoleState.CHARGING; diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulHunterArmorItem.java b/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulHunterArmorItem.java index 5fb4fde6e..8ea6dde2b 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulHunterArmorItem.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulHunterArmorItem.java @@ -76,6 +76,6 @@ public LodestoneArmorModel getHumanoidArmorModel(LivingEntity entity, ItemStack @Override public ResourceLocation getArmorTexture() { - return MalumMod.malumPath("textures/armor/spirit_hunter_reforged"); + return MalumMod.malumPath("textures/armor/spirit_hunter_reforged.png"); } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/data/MalumLang.java b/src/main/java/com/sammy/malum/data/MalumLang.java index 2a637e4ca..7f0a595a8 100644 --- a/src/main/java/com/sammy/malum/data/MalumLang.java +++ b/src/main/java/com/sammy/malum/data/MalumLang.java @@ -600,14 +600,16 @@ protected void addTranslations() { "As if this was not enough, I have found a way to imbue a second color into my Ether, creating Iridescent Ether. When created, this form of Ether locks in its original color, leaving a new, " + italic("second") + " color open to dyeing. The light will shift from the original color into the new color towards the peak of the flames.", "Getting the right coloring for this can be tricky, though. As stated, once Ether is made Iridescent, its original color can no longer be changed. This is hardly an issue, but should be kept in mind when tinting your flames."); - addSimpleEntryHeader("spirit_fabric", "Spirit Fabric", "Wicked weaves"); - addPages("spirit_fabric", "Spirit Fabric is a light yet sturdy material that acts as an insulator for spirit energies. While other materials have the same properties, it's not exactly practical to craft a pouch or clothing from stone. I'm not willing to go quite so far for my research as to try wearing something like " + italic("that") + "."); + addSimpleEntryHeader("soulwoven_silk", "Soulwoven Silk", "Wicked weaves"); + addPages("soulwoven_silk", "Soulwoven Silk is a light yet sturdy material that acts as an insulator for spirit energies. While other materials do exhibit matching interactions with the arcane, this bond between magic and cloth should make for a unique material."); + addPages("soulwoven_silk.soulwoven_banner", "To further study and confirm the insulating properties of the cloth, I've heft together a set of Soulwoven Banners with patterns based on each of the spirits I've been met with thus far. If further imbued with Spirit Arcana, the Banners will gain a dim, and them powerful glow with two shards infused."); + + addSimpleEntryHeader("soulwoven_pouch", "Soulwoven Pouch", "[Soulwoven Pouch Tooltip]"); + addPages("soulwoven_pouch", "But this fabric works wonderfully for storing spirit crystals. It keeps the arcana condensed within, and will even store spirits I pick up before they so much as clutter my pockets. It can store as many spirits as a single chest, making it quite convenient to carry around."); addHeadline("spirit_fabric.pouch", "Spirit Pouch"); - // addPages("spirit_fabric.pouch", "But this fabric works wonderfully for storing spirit crystals. It keeps the arcana condensed within in a massless state, and will even store spirits I pick up before they so much as clutter my pockets. The amount of crystals it can store is near-infinite, making it incredibly convenient to carry around."); - addPages("spirit_fabric.pouch", "But this fabric works wonderfully for storing spirit crystals. It keeps the arcana condensed within, and will even store spirits I pick up before they so much as clutter my pockets. It can store as many spirits as a single chest, making it quite convenient to carry around."); - addSimpleEntryHeader("soulhunter_gear", "Soulhunter Gear", "Glass cannon"); - addPages("soulhunter_gear", + addSimpleEntryHeader("soulhunter_armor", "Soulhunter Armor", "Shaped like glass"); + addPages("soulhunter_armor", "Spirit Fabric is an insulator, but that doesn't mean it has to dampen magic. This set of armor is designed to focus that magic, effectively amplifying the user's arcane abilities. Unfortunately, it's not exactly the strongest of materials, and it protects me just about as much as leather clothing."); addSimpleEntryHeader("spirit_focusing", "Spirit Focusing", "Mystic replication"); diff --git a/src/main/java/com/sammy/malum/data/block/MalumBlockStates.java b/src/main/java/com/sammy/malum/data/block/MalumBlockStates.java index 8b83c1a0c..f4dfaff72 100644 --- a/src/main/java/com/sammy/malum/data/block/MalumBlockStates.java +++ b/src/main/java/com/sammy/malum/data/block/MalumBlockStates.java @@ -1,6 +1,7 @@ package com.sammy.malum.data.block; import com.sammy.malum.*; +import com.sammy.malum.common.block.curiosities.banner.*; import com.sammy.malum.data.item.*; import com.sammy.malum.registry.common.block.*; import net.minecraft.data.*; @@ -8,6 +9,7 @@ import net.minecraft.world.level.block.*; import net.neoforged.neoforge.client.model.generators.ModelFile; import net.neoforged.neoforge.common.data.*; +import team.lodestar.lodestone.helpers.*; import team.lodestar.lodestone.systems.datagen.*; import team.lodestar.lodestone.systems.datagen.providers.*; import team.lodestar.lodestone.systems.datagen.statesmith.*; @@ -37,7 +39,7 @@ protected void registerStatesAndModels() { AbstractBlockStateSmith.StateSmithData data = new AbstractBlockStateSmith.StateSmithData(this, blocks::remove); - MalumBlockStateSmithTypes.SOULWOVEN_BANNER.act(data, SOULWOVEN_BANNER_SIGIL, SOULWOVEN_BANNER_HORNS); + MalumBlockStateSmithTypes.SOULWOVEN_BANNER.act(data, DataHelper.takeAll(blocks, b -> b.get() instanceof SoulwovenBannerBlock)); setTexturePath("spirited_glass/"); BlockStateSmithTypes.FULL_BLOCK.act(data, SACRED_SPIRITED_GLASS, WICKED_SPIRITED_GLASS, ARCANE_SPIRITED_GLASS, ELDRITCH_SPIRITED_GLASS, diff --git a/src/main/java/com/sammy/malum/data/recipe/MalumVanillaRecipes.java b/src/main/java/com/sammy/malum/data/recipe/MalumVanillaRecipes.java index b27fa2a9d..a8ad4f00d 100644 --- a/src/main/java/com/sammy/malum/data/recipe/MalumVanillaRecipes.java +++ b/src/main/java/com/sammy/malum/data/recipe/MalumVanillaRecipes.java @@ -49,6 +49,17 @@ protected static void buildRecipes(RecipeOutput output) { shaped(RecipeCategory.MISC, ItemRegistry.SPECTRAL_LENS.get()).define('X', ItemRegistry.HEX_ASH.get()).define('Y', Tags.Items.GLASS_PANES).pattern(" X ").pattern("XYX").pattern(" X ").unlockedBy("has_hex_ash", has(ItemRegistry.HEX_ASH.get())).save(output); shaped(RecipeCategory.MISC, ItemRegistry.SPECTRAL_OPTIC.get(), 2).define('#', ItemRegistry.HALLOWED_GOLD_INGOT.get()).define('X', ItemRegistry.RUNEWOOD_PLANKS.get()).define('Y', ItemRegistry.SPECTRAL_LENS.get()).pattern(" X ").pattern("#Y#").pattern(" X ").unlockedBy("has_hallowed_gold", has(ItemRegistry.HALLOWED_GOLD_INGOT.get())).save(output); + //ETHER + etherTorch(output, ItemRegistry.ETHER_TORCH.get(), ItemRegistry.ETHER.get()); + etherBrazier(output, ItemRegistry.TAINTED_ETHER_BRAZIER.get(), ItemRegistry.TAINTED_ROCK.get(), ItemRegistry.ETHER.get()); + etherBrazier(output, ItemRegistry.TWISTED_ETHER_BRAZIER.get(), ItemRegistry.TWISTED_ROCK.get(), ItemRegistry.ETHER.get()); + etherTorch(output, ItemRegistry.IRIDESCENT_ETHER_TORCH.get(), ItemRegistry.IRIDESCENT_ETHER.get()); + etherBrazier(output, ItemRegistry.TAINTED_IRIDESCENT_ETHER_BRAZIER.get(), ItemRegistry.TAINTED_ROCK.get(), ItemRegistry.IRIDESCENT_ETHER.get()); + etherBrazier(output, ItemRegistry.TWISTED_IRIDESCENT_ETHER_BRAZIER.get(), ItemRegistry.TWISTED_ROCK.get(), ItemRegistry.IRIDESCENT_ETHER.get()); + + //BANNERS + shaped(RecipeCategory.MISC, ItemRegistry.SOULWOVEN_BANNER.get()).define('X', ItemTagRegistry.RUNEWOOD_PLANKS).define('Y', ItemRegistry.SOULWOVEN_SILK.get()).pattern("X").pattern("Y").pattern("Y").unlockedBy("has_soulwoven_silk", has(ItemRegistry.SOULWOVEN_SILK.get())).save(output); + //SPIRIT METALS shaped(RecipeCategory.MISC, ItemRegistry.BLOCK_OF_SOUL_STAINED_STEEL.get()).define('#', ItemRegistry.SOUL_STAINED_STEEL_INGOT.get()).pattern("###").pattern("###").pattern("###").unlockedBy("has_soul_stained_steel", has(ItemRegistry.SOUL_STAINED_STEEL_INGOT.get())).save(output); shaped(RecipeCategory.MISC, ItemRegistry.SOUL_STAINED_STEEL_INGOT.get()).define('#', ItemRegistry.SOUL_STAINED_STEEL_NUGGET.get()).pattern("###").pattern("###").pattern("###").unlockedBy("has_soul_stained_steel", has(ItemRegistry.SOUL_STAINED_STEEL_INGOT.get())).save(output, malumPath("soul_stained_steel_from_nuggets")); @@ -205,14 +216,6 @@ protected static void buildRecipes(RecipeOutput output) { shapeless(RecipeCategory.MISC, ItemRegistry.CURSED_SAPBALL.get()).requires(ItemRegistry.CURSED_SAP.get(), 2).unlockedBy("has_cursed_sap", has(ItemRegistry.CURSED_SAP.get())).save(output); shapeless(RecipeCategory.MISC, ItemRegistry.CURSED_SAP_BLOCK.get(), 8).requires(ItemRegistry.CURSED_SAP.get(), 4).unlockedBy("has_cursed_sap", has(ItemRegistry.CURSED_SAP.get())).save(output); - //ETHER - etherTorch(output, ItemRegistry.ETHER_TORCH.get(), ItemRegistry.ETHER.get()); - etherBrazier(output, ItemRegistry.TAINTED_ETHER_BRAZIER.get(), ItemRegistry.TAINTED_ROCK.get(), ItemRegistry.ETHER.get()); - etherBrazier(output, ItemRegistry.TWISTED_ETHER_BRAZIER.get(), ItemRegistry.TWISTED_ROCK.get(), ItemRegistry.ETHER.get()); - etherTorch(output, ItemRegistry.IRIDESCENT_ETHER_TORCH.get(), ItemRegistry.IRIDESCENT_ETHER.get()); - etherBrazier(output, ItemRegistry.TAINTED_IRIDESCENT_ETHER_BRAZIER.get(), ItemRegistry.TAINTED_ROCK.get(), ItemRegistry.IRIDESCENT_ETHER.get()); - etherBrazier(output, ItemRegistry.TWISTED_IRIDESCENT_ETHER_BRAZIER.get(), ItemRegistry.TWISTED_ROCK.get(), ItemRegistry.IRIDESCENT_ETHER.get()); - //THE DEVICE TheDeviceRecipeBuilder.shaped(RecipeCategory.MISC, ItemRegistry.THE_DEVICE.get()).define('X', ItemRegistry.TWISTED_ROCK.get()).define('Y', ItemRegistry.TAINTED_ROCK.get()).pattern("XYX").pattern("YXY").pattern("XYX").unlockedBy("has_bedrock", has(Items.BEDROCK)).save(output); diff --git a/src/main/java/com/sammy/malum/data/recipe/infusion/MaterialSpiritInfusionRecipes.java b/src/main/java/com/sammy/malum/data/recipe/infusion/MaterialSpiritInfusionRecipes.java index 1830d57a2..73b6386f9 100644 --- a/src/main/java/com/sammy/malum/data/recipe/infusion/MaterialSpiritInfusionRecipes.java +++ b/src/main/java/com/sammy/malum/data/recipe/infusion/MaterialSpiritInfusionRecipes.java @@ -81,10 +81,8 @@ public static void buildRecipes(RecipeOutput recipeOutput) { new SpiritInfusionRecipeBuilder(Ingredient.of(ItemTags.WOOL), 2, ItemRegistry.SOULWOVEN_SILK.get(), 4) .addExtraItem(SizedIngredient.of(Tags.Items.STRINGS, 2)) - .addExtraItem(ItemRegistry.HEX_ASH.get(), 1) - .addSpirit(WICKED_SPIRIT, 2) - .addSpirit(EARTHEN_SPIRIT, 1) - .addSpirit(AERIAL_SPIRIT, 1) + .addSpirit(AERIAL_SPIRIT, 3) + .addSpirit(EARTHEN_SPIRIT, 3) .save(recipeOutput); new SpiritInfusionRecipeBuilder(Items.HAY_BLOCK, 1, ItemRegistry.POPPET.get(), 2) diff --git a/src/main/java/com/sammy/malum/registry/common/ParticleEffectTypeRegistry.java b/src/main/java/com/sammy/malum/registry/common/ParticleEffectTypeRegistry.java index 8529e4b5e..f2a33e10c 100644 --- a/src/main/java/com/sammy/malum/registry/common/ParticleEffectTypeRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/ParticleEffectTypeRegistry.java @@ -75,6 +75,7 @@ public class ParticleEffectTypeRegistry { //Misc vfx public static final ParticleEffectType SPIRIT_MOTE_SPARKLES = new SpiritMotePlaceParticleEffect("spirit_mote_sparkles"); + public static final ParticleEffectType SOULWOVEN_BANNER_ACTIVATED = new TotemPoleActivatedParticleEffect("soulwoven_banner_activated"); public static final ParticleEffectType SAP_COLLECTED = new SapCollectionParticleEffect("sap_collected"); } diff --git a/src/main/java/com/sammy/malum/registry/common/block/BlockRegistry.java b/src/main/java/com/sammy/malum/registry/common/block/BlockRegistry.java index 6c8fb0459..a1d3dade2 100644 --- a/src/main/java/com/sammy/malum/registry/common/block/BlockRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/block/BlockRegistry.java @@ -123,8 +123,11 @@ public class BlockRegistry { public static final DeferredHolder EARTHEN_SPIRITED_GLASS = BLOCKS.register("earthen_spirited_glass", () -> new SpiritedGlassBlock(MalumBlockProperties.SPIRITED_GLASS())); //endregion - public static final DeferredHolder SOULWOVEN_BANNER_SIGIL = BLOCKS.register("soulwoven_banner_sigil", () -> new SoulwovenBannerBlock("sigil", MalumBlockProperties.SOULWOVEN_BANNER()).setBlockEntity(BlockEntityRegistry.SOULWOVEN_BANNER)); + public static final DeferredHolder SOULWOVEN_BANNER = BLOCKS.register("soulwoven_banner", () -> new SoulwovenBannerBlock("default", MalumBlockProperties.SOULWOVEN_BANNER()).setBlockEntity(BlockEntityRegistry.SOULWOVEN_BANNER)); public static final DeferredHolder SOULWOVEN_BANNER_HORNS = BLOCKS.register("soulwoven_banner_horns", () -> new SoulwovenBannerBlock("horns", MalumBlockProperties.SOULWOVEN_BANNER()).setBlockEntity(BlockEntityRegistry.SOULWOVEN_BANNER)); + public static final DeferredHolder SOULWOVEN_BANNER_SIGIL = BLOCKS.register("soulwoven_banner_sigil", () -> new SoulwovenBannerBlock("sigil", MalumBlockProperties.SOULWOVEN_BANNER()).setBlockEntity(BlockEntityRegistry.SOULWOVEN_BANNER)); + public static final DeferredHolder SOULWOVEN_BANNER_BREEZE = BLOCKS.register("soulwoven_banner_breeze", () -> new SoulwovenBannerBlock("breeze", MalumBlockProperties.SOULWOVEN_BANNER()).setBlockEntity(BlockEntityRegistry.SOULWOVEN_BANNER)); + public static final DeferredHolder SOULWOVEN_BANNER_FRACTAL = BLOCKS.register("soulwoven_banner_fractal", () -> new SoulwovenBannerBlock("fractal", MalumBlockProperties.SOULWOVEN_BANNER()).setBlockEntity(BlockEntityRegistry.SOULWOVEN_BANNER)); //region tainted rock public static final DeferredHolder TAINTED_ROCK = BLOCKS.register("tainted_rock", () -> new Block(MalumBlockProperties.TAINTED_ROCK().addTag(TAINTED_BLOCKS))); diff --git a/src/main/java/com/sammy/malum/registry/common/item/ItemRegistry.java b/src/main/java/com/sammy/malum/registry/common/item/ItemRegistry.java index e18c9f275..855ec2d01 100644 --- a/src/main/java/com/sammy/malum/registry/common/item/ItemRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/item/ItemRegistry.java @@ -169,8 +169,11 @@ public static DeferredHolder register(String name, Ite public static final DeferredHolder INFERNAL_SPIRITED_GLASS = register("infernal_spirited_glass", BUILDING_PROPERTIES(), (p) -> new BlockItem(BlockRegistry.INFERNAL_SPIRITED_GLASS.get(), p)); public static final DeferredHolder EARTHEN_SPIRITED_GLASS = register("earthen_spirited_glass", BUILDING_PROPERTIES(), (p) -> new BlockItem(BlockRegistry.EARTHEN_SPIRITED_GLASS.get(), p)); - public static final DeferredHolder SOULWOVEN_BANNER_SIGIL = register("soulwoven_banner_sigil", BUILDING_PROPERTIES(), (p) -> new BlockItem(BlockRegistry.SOULWOVEN_BANNER_SIGIL.get(), p)); + public static final DeferredHolder SOULWOVEN_BANNER = register("soulwoven_banner", BUILDING_PROPERTIES(), (p) -> new BlockItem(BlockRegistry.SOULWOVEN_BANNER.get(), p)); public static final DeferredHolder SOULWOVEN_BANNER_HORNS = register("soulwoven_banner_horns", BUILDING_PROPERTIES(), (p) -> new BlockItem(BlockRegistry.SOULWOVEN_BANNER_HORNS.get(), p)); + public static final DeferredHolder SOULWOVEN_BANNER_SIGIL = register("soulwoven_banner_sigil", BUILDING_PROPERTIES(), (p) -> new BlockItem(BlockRegistry.SOULWOVEN_BANNER_SIGIL.get(), p)); + public static final DeferredHolder SOULWOVEN_BANNER_BREEZE = register("soulwoven_banner_breeze", BUILDING_PROPERTIES(), (p) -> new BlockItem(BlockRegistry.SOULWOVEN_BANNER_BREEZE.get(), p)); + public static final DeferredHolder SOULWOVEN_BANNER_FRACTAL = register("soulwoven_banner_fractal", BUILDING_PROPERTIES(), (p) -> new BlockItem(BlockRegistry.SOULWOVEN_BANNER_FRACTAL.get(), p)); //endregion //region tainted rock diff --git a/src/main/java/com/sammy/malum/visual_effects/TotemParticleEffects.java b/src/main/java/com/sammy/malum/visual_effects/TotemParticleEffects.java index a122f555e..2a523f86a 100644 --- a/src/main/java/com/sammy/malum/visual_effects/TotemParticleEffects.java +++ b/src/main/java/com/sammy/malum/visual_effects/TotemParticleEffects.java @@ -41,15 +41,13 @@ public static void activeTotemPoleParticles(TotemPoleBlockEntity totemPoleBlockE } } - public static void activateTotemPoleParticles(TotemPoleBlockEntity totemPoleBlockEntity) { - MalumSpiritType spiritType = totemPoleBlockEntity.spirit; - Level level = totemPoleBlockEntity.getLevel(); + public static void activateTotemPoleParticles(Level level, MalumSpiritType spiritType, Vec3 position) { long gameTime = level.getGameTime(); var random = level.random; final float time = 16; for (int i = 0; i < 16; i++) { float velocity = RandomHelper.randomBetween(random, 0.005f, 0.015f); - Vec3 offsetPosition = VecHelper.rotatingRadialOffset(totemPoleBlockEntity.getBlockPos().getCenter(), 0.85f, i, 16, gameTime, time); + Vec3 offsetPosition = VecHelper.rotatingRadialOffset(position, 0.85f, i, 16, gameTime, time); offsetPosition = offsetPosition.add(0, (Math.cos(((gameTime + i * 240) % time) / time) * 0.25f) - 0.25f, 0); var lightSpecs = spiritLightSpecs(level, offsetPosition, spiritType); lightSpecs.getBuilder() diff --git a/src/main/java/com/sammy/malum/visual_effects/networked/totem/TotemPoleActivatedParticleEffect.java b/src/main/java/com/sammy/malum/visual_effects/networked/totem/TotemPoleActivatedParticleEffect.java index 3691113be..f1c4047b3 100644 --- a/src/main/java/com/sammy/malum/visual_effects/networked/totem/TotemPoleActivatedParticleEffect.java +++ b/src/main/java/com/sammy/malum/visual_effects/networked/totem/TotemPoleActivatedParticleEffect.java @@ -16,11 +16,7 @@ public TotemPoleActivatedParticleEffect(String id) { @OnlyIn(Dist.CLIENT) @Override public Supplier get() { - return () -> (level, random, positionData, colorData, nbtData) -> { - if (!(level.getBlockEntity(positionData.getAsBlockPos()) instanceof TotemPoleBlockEntity totemPole)) { - return; - } - TotemParticleEffects.activateTotemPoleParticles(totemPole); - }; + return () -> (level, random, positionData, colorData, nbtData) -> + TotemParticleEffects.activateTotemPoleParticles(level, colorData.getSpiritType(), positionData.getAsBlockPos().getCenter()); } } \ No newline at end of file diff --git a/src/main/resources/assets/malum/models/block/soulwoven_banner.json b/src/main/resources/assets/malum/models/block/soulwoven_banner.json index e3b5da469..a577aea89 100644 --- a/src/main/resources/assets/malum/models/block/soulwoven_banner.json +++ b/src/main/resources/assets/malum/models/block/soulwoven_banner.json @@ -3,7 +3,7 @@ "parent": "block/block", "ambientocclusion": false, "textures": { - "wood": "malum:block/soulwoven_banner", + "wood": "malum:block/soulwoven_banner_holder", "particle": "malum:block/runewood/runewood_planks" }, "elements": [ @@ -13,10 +13,10 @@ "rotation": {"angle": 0, "axis": "y", "origin": [7, 14, 7]}, "faces": { "north": {"uv": [0, 4, 16, 6], "texture": "#wood"}, - "east": {"uv": [0, 0, 2, 2], "texture": "#wood"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#wood", "cullface": "east"}, "south": {"uv": [0, 4, 16, 6], "texture": "#wood"}, - "west": {"uv": [14, 0, 16, 2], "texture": "#wood"}, - "up": {"uv": [0, 2, 16, 4], "texture": "#wood"}, + "west": {"uv": [14, 0, 16, 2], "texture": "#wood", "cullface": "west"}, + "up": {"uv": [0, 2, 16, 4], "texture": "#wood", "cullface": "up"}, "down": {"uv": [0, 0, 16, 2], "texture": "#wood"} } }, diff --git a/src/main/resources/assets/malum/models/block/soulwoven_banner_directional.json b/src/main/resources/assets/malum/models/block/soulwoven_banner_directional.json index 46c074b16..6a7337ec6 100644 --- a/src/main/resources/assets/malum/models/block/soulwoven_banner_directional.json +++ b/src/main/resources/assets/malum/models/block/soulwoven_banner_directional.json @@ -3,7 +3,7 @@ "parent": "block/block", "ambientocclusion": false, "textures": { - "wood": "malum:block/soulwoven_banner", + "wood": "malum:block/soulwoven_banner_holder", "particle": "malum:block/runewood/runewood_planks" }, "elements": [ @@ -12,10 +12,10 @@ "to": [16, 13, 2], "rotation": {"angle": 0, "axis": "y", "origin": [7, 11, 0]}, "faces": { - "north": {"uv": [0, 4, 16, 6], "texture": "#wood"}, - "east": {"uv": [0, 0, 2, 2], "texture": "#wood"}, + "north": {"uv": [0, 4, 16, 6], "texture": "#wood", "cullface": "north"}, + "east": {"uv": [0, 0, 2, 2], "texture": "#wood", "cullface": "east"}, "south": {"uv": [0, 4, 16, 6], "texture": "#wood"}, - "west": {"uv": [14, 0, 16, 2], "texture": "#wood"}, + "west": {"uv": [14, 0, 16, 2], "texture": "#wood", "cullface": "west"}, "up": {"uv": [0, 2, 16, 4], "texture": "#wood"}, "down": {"uv": [0, 0, 16, 2], "texture": "#wood"} } @@ -25,7 +25,7 @@ "to": [16, 11, 0], "rotation": {"angle": 0, "axis": "y", "origin": [7, 9, 0]}, "faces": { - "north": {"uv": [0, 6, 16, 16], "texture": "#wood"}, + "north": {"uv": [0, 6, 16, 16], "texture": "#wood", "cullface": "north"}, "south": {"uv": [0, 6, 16, 16], "texture": "#wood"} } }, diff --git a/src/main/resources/assets/malum/textures/block/soulwoven_banner_breeze.png b/src/main/resources/assets/malum/textures/block/soulwoven_banner_breeze.png new file mode 100644 index 000000000..901a65578 Binary files /dev/null and b/src/main/resources/assets/malum/textures/block/soulwoven_banner_breeze.png differ diff --git a/src/main/resources/assets/malum/textures/block/soulwoven_banner_default.png b/src/main/resources/assets/malum/textures/block/soulwoven_banner_default.png new file mode 100644 index 000000000..485e8b2b7 Binary files /dev/null and b/src/main/resources/assets/malum/textures/block/soulwoven_banner_default.png differ diff --git a/src/main/resources/assets/malum/textures/block/soulwoven_banner_fractal.png b/src/main/resources/assets/malum/textures/block/soulwoven_banner_fractal.png new file mode 100644 index 000000000..cc2943979 Binary files /dev/null and b/src/main/resources/assets/malum/textures/block/soulwoven_banner_fractal.png differ diff --git a/src/main/resources/assets/malum/textures/block/soulwoven_banner.png b/src/main/resources/assets/malum/textures/block/soulwoven_banner_holder.png similarity index 100% rename from src/main/resources/assets/malum/textures/block/soulwoven_banner.png rename to src/main/resources/assets/malum/textures/block/soulwoven_banner_holder.png diff --git a/src/main/resources/assets/malum/textures/block/soulwoven_banner_sigil.png b/src/main/resources/assets/malum/textures/block/soulwoven_banner_sigil.png index 957884921..4dc1d0cd7 100644 Binary files a/src/main/resources/assets/malum/textures/block/soulwoven_banner_sigil.png and b/src/main/resources/assets/malum/textures/block/soulwoven_banner_sigil.png differ diff --git a/src/main/resources/assets/malum/textures/item/soul_hunter_boots.png b/src/main/resources/assets/malum/textures/item/soul_hunter_boots.png index e42757231..161fb381b 100644 Binary files a/src/main/resources/assets/malum/textures/item/soul_hunter_boots.png and b/src/main/resources/assets/malum/textures/item/soul_hunter_boots.png differ diff --git a/src/main/resources/assets/malum/textures/item/soul_hunter_cloak.png b/src/main/resources/assets/malum/textures/item/soul_hunter_cloak.png index ab565152f..567fc5abf 100644 Binary files a/src/main/resources/assets/malum/textures/item/soul_hunter_cloak.png and b/src/main/resources/assets/malum/textures/item/soul_hunter_cloak.png differ diff --git a/src/main/resources/assets/malum/textures/item/soul_hunter_leggings.png b/src/main/resources/assets/malum/textures/item/soul_hunter_leggings.png index 3f1b7aca8..9f16f253f 100644 Binary files a/src/main/resources/assets/malum/textures/item/soul_hunter_leggings.png and b/src/main/resources/assets/malum/textures/item/soul_hunter_leggings.png differ diff --git a/src/main/resources/assets/malum/textures/item/soul_hunter_robe.png b/src/main/resources/assets/malum/textures/item/soul_hunter_robe.png index 30591b7d5..f516ab815 100644 Binary files a/src/main/resources/assets/malum/textures/item/soul_hunter_robe.png and b/src/main/resources/assets/malum/textures/item/soul_hunter_robe.png differ diff --git a/src/main/resources/assets/malum/textures/item/soulwoven_banner.png b/src/main/resources/assets/malum/textures/item/soulwoven_banner.png new file mode 100644 index 000000000..fe4fc923d Binary files /dev/null and b/src/main/resources/assets/malum/textures/item/soulwoven_banner.png differ diff --git a/src/main/resources/assets/malum/textures/item/soulwoven_banner_breeze.png b/src/main/resources/assets/malum/textures/item/soulwoven_banner_breeze.png new file mode 100644 index 000000000..03433439d Binary files /dev/null and b/src/main/resources/assets/malum/textures/item/soulwoven_banner_breeze.png differ diff --git a/src/main/resources/assets/malum/textures/item/soulwoven_banner_fractal.png b/src/main/resources/assets/malum/textures/item/soulwoven_banner_fractal.png new file mode 100644 index 000000000..b58c12549 Binary files /dev/null and b/src/main/resources/assets/malum/textures/item/soulwoven_banner_fractal.png differ