diff --git a/src/main/java/de/dafuqs/spectrum/api/item/AzureDikeItem.java b/src/main/java/de/dafuqs/spectrum/api/item/AzureDikeItem.java index 2604ae89c4..8d34f745a5 100644 --- a/src/main/java/de/dafuqs/spectrum/api/item/AzureDikeItem.java +++ b/src/main/java/de/dafuqs/spectrum/api/item/AzureDikeItem.java @@ -23,6 +23,10 @@ default float azureDikeRechargeSpeedModifier(ItemStack stack) { default float rechargeDelayAfterDamageModifier(ItemStack stack) { return 1.0F; } + + default float maxAzureDikeMultiplier(ItemStack stack) { + return 1.0F; + } default void recalculate(LivingEntity livingEntity) { World world = livingEntity.getWorld(); @@ -34,19 +38,21 @@ default void recalculate(LivingEntity livingEntity) { int maxAzureDike = 0; float rechargeSpeedModifier = 1F; float rechargeDelayAfterDamageModifier = 1F; + float maxAzureDikeMultiplier = 1F; for (Pair pair : trinketComponent.get().getAllEquipped()) { ItemStack stack = pair.getRight(); if (pair.getRight().getItem() instanceof AzureDikeItem azureDikeItem) { maxAzureDike += azureDikeItem.maxAzureDike(stack); rechargeSpeedModifier += azureDikeItem.azureDikeRechargeSpeedModifier(stack) - 1; rechargeDelayAfterDamageModifier += azureDikeItem.rechargeDelayAfterDamageModifier(stack) - 1; + maxAzureDikeMultiplier += azureDikeItem.maxAzureDikeMultiplier(stack) - 1; } } int ticksPerPointOfRecharge = (int) Math.max(1, DefaultAzureDikeComponent.BASE_RECHARGE_DELAY_TICKS / rechargeSpeedModifier); int rechargeDelayTicksAfterGettingHit = (int) Math.max(1, DefaultAzureDikeComponent.BASE_RECHARGE_DELAY_TICKS_AFTER_DAMAGE / rechargeDelayAfterDamageModifier); - azureDikeComponent.set(maxAzureDike, ticksPerPointOfRecharge, rechargeDelayTicksAfterGettingHit, false); + azureDikeComponent.set(Math.round((maxAzureDike * maxAzureDikeMultiplier)), ticksPerPointOfRecharge, rechargeDelayTicksAfterGettingHit, false); } } } diff --git a/src/main/java/de/dafuqs/spectrum/cca/azure_dike/AzureDikeProvider.java b/src/main/java/de/dafuqs/spectrum/cca/azure_dike/AzureDikeProvider.java index 201e62b0ca..59509ac98e 100644 --- a/src/main/java/de/dafuqs/spectrum/cca/azure_dike/AzureDikeProvider.java +++ b/src/main/java/de/dafuqs/spectrum/cca/azure_dike/AzureDikeProvider.java @@ -1,6 +1,8 @@ package de.dafuqs.spectrum.cca.azure_dike; import de.dafuqs.spectrum.*; +import de.dafuqs.spectrum.registries.*; +import dev.emi.trinkets.api.*; import dev.onyxstudios.cca.api.v3.component.*; import net.minecraft.entity.*; @@ -16,7 +18,12 @@ public class AzureDikeProvider { * @return All damage that could not be protected from */ public static float absorbDamage(LivingEntity provider, float incomingDamage) { - return AZURE_DIKE_COMPONENT.get(provider).absorbDamage(incomingDamage); + var passedDamage = AZURE_DIKE_COMPONENT.get(provider).absorbDamage(incomingDamage); + + if (TrinketsApi.getTrinketComponent(provider).map(p -> p.isEquipped(SpectrumItems.AZURESQUE_DIKE_CORE)).orElse(false)) + return passedDamage * 2; + + return passedDamage; } public static float getAzureDikeCharges(LivingEntity provider) { diff --git a/src/main/java/de/dafuqs/spectrum/items/trinkets/AzureDikeCoreItem.java b/src/main/java/de/dafuqs/spectrum/items/trinkets/AzureDikeCoreItem.java new file mode 100644 index 0000000000..0c7a5fa997 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/items/trinkets/AzureDikeCoreItem.java @@ -0,0 +1,43 @@ +package de.dafuqs.spectrum.items.trinkets; + +import net.minecraft.client.item.*; +import net.minecraft.item.*; +import net.minecraft.text.*; +import net.minecraft.world.*; +import org.jetbrains.annotations.*; + +import java.util.*; + +public class AzureDikeCoreItem extends AzureDikeTrinketItem { + + public AzureDikeCoreItem(Settings settings) { + super(settings); + } + + @Override + public int maxAzureDike(ItemStack stack) { + return 0; + } + + @Override + public float maxAzureDikeMultiplier(ItemStack stack) { + return 2F; + } + + @Override + public float rechargeDelayAfterDamageModifier(ItemStack stack) { + return 1.5F; + } + + @Override + public float azureDikeRechargeSpeedModifier(ItemStack stack) { + return 1.5F; + } + + @Override + public void appendTooltip(ItemStack stack, @Nullable World world, List tooltip, TooltipContext context) { + tooltip.add(Text.translatable("item.spectrum.azuresque_dike_core.tooltip")); + tooltip.add(Text.translatable("item.spectrum.azuresque_dike_core.tooltip2")); + tooltip.add(Text.translatable("item.spectrum.azuresque_dike_core.tooltip3")); + } +} diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java index 2a1713615f..9fdab43b0d 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItemGroups.java @@ -142,6 +142,7 @@ public static void register() { entries.add(SpectrumItems.WEEPING_CIRCLET); entries.add(SpectrumItems.PUFF_CIRCLET); entries.add(SpectrumItems.WHISPY_CIRCLET); + entries.add(SpectrumItems.AZURESQUE_DIKE_CORE); entries.add(SpectrumItems.CIRCLET_OF_ARROGANCE); entries.add(SpectrumItems.AETHER_GRACED_NECTAR_GLOVES); entries.add(SpectrumItems.NEAT_RING); diff --git a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java index 10f43a1d5d..530d18eac6 100644 --- a/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java +++ b/src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java @@ -471,6 +471,7 @@ public Map getDefaultEnchantments() { public static final TakeOffBeltItem TAKE_OFF_BELT = new TakeOffBeltItem(IS.of(1, Rarity.UNCOMMON)); public static final Item AZURE_DIKE_BELT = new AzureDikeBeltItem(IS.of(1, Rarity.UNCOMMON)); public static final Item AZURE_DIKE_RING = new AzureDikeRingItem(IS.of(1, Rarity.UNCOMMON)); + public static final Item AZURESQUE_DIKE_CORE = new AzureDikeCoreItem(IS.of(1, Rarity.EPIC)); public static final InkDrainTrinketItem SHIELDGRASP_AMULET = new AzureDikeAmuletItem(IS.of(1, Rarity.UNCOMMON)); public static final InkDrainTrinketItem HEARTSINGERS_REWARD = new ExtraHealthRingItem(IS.of(1, Rarity.UNCOMMON)); public static final InkDrainTrinketItem GLOVES_OF_DAWNS_GRASP = new ExtraReachGlovesItem(IS.of(1, Rarity.UNCOMMON)); @@ -932,6 +933,7 @@ public static void registerTrinkets() { register("take_off_belt", TAKE_OFF_BELT, DyeColor.YELLOW); register("azure_dike_belt", AZURE_DIKE_BELT, DyeColor.BLUE); register("azure_dike_ring", AZURE_DIKE_RING, DyeColor.BLUE); + register("azuresque_dike_core", AZURESQUE_DIKE_CORE, DyeColor.WHITE); register("shieldgrasp_amulet", SHIELDGRASP_AMULET, DyeColor.BLUE); register("heartsingers_reward", HEARTSINGERS_REWARD, DyeColor.PINK); register("gloves_of_dawns_grasp", GLOVES_OF_DAWNS_GRASP, DyeColor.YELLOW); diff --git a/src/main/resources/assets/spectrum/lang/en_us.json b/src/main/resources/assets/spectrum/lang/en_us.json index 9eb73ba82f..f353b36d41 100644 --- a/src/main/resources/assets/spectrum/lang/en_us.json +++ b/src/main/resources/assets/spectrum/lang/en_us.json @@ -4099,6 +4099,10 @@ "item.spectrum.azure_dike_provider.tooltip": "§7Grants §a%d§7 units of §9Azure Dike", "item.spectrum.azure_dike_ring": "Azure Dike Ring", "item.spectrum.azure_dike_ring.tooltip": "§7Increases §9Azure Dike§7 charging", + "item.spectrum.azuresque_dike_core": "Azuresque Dike Core", + "item.spectrum.azuresque_dike_core.tooltip": "§7Empowers other sources of §9Azure Dike", + "item.spectrum.azuresque_dike_core.tooltip2": "§7Increases §9Azure Dike§7 charging and recovery speed", + "item.spectrum.azuresque_dike_core.tooltip3": "§7Doubles damage that cannot be absorbed", "item.spectrum.azurite_glass_ampoule": "Azurite Glass Ampoule", "item.spectrum.azurite_glass_ampoule.tooltip": "Summon spheres of Ink that home in on your enemies", "item.spectrum.bag_of_holding": "Bag of Holding", diff --git a/src/main/resources/assets/spectrum/models/item/azuresque_dike_core.json b/src/main/resources/assets/spectrum/models/item/azuresque_dike_core.json new file mode 100644 index 0000000000..0cd1ba9ace --- /dev/null +++ b/src/main/resources/assets/spectrum/models/item/azuresque_dike_core.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "spectrum:item/azuresque_dike_core" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/spectrum/textures/item/azuresque_dike_core.png b/src/main/resources/assets/spectrum/textures/item/azuresque_dike_core.png new file mode 100755 index 0000000000..44e56657d9 Binary files /dev/null and b/src/main/resources/assets/spectrum/textures/item/azuresque_dike_core.png differ diff --git a/src/main/resources/data/spectrum/advancements/hidden/get_substantial_azure_dike_charge.json b/src/main/resources/data/spectrum/advancements/hidden/get_substantial_azure_dike_charge.json new file mode 100644 index 0000000000..8204544508 --- /dev/null +++ b/src/main/resources/data/spectrum/advancements/hidden/get_substantial_azure_dike_charge.json @@ -0,0 +1,16 @@ +{ + "criteria": { + "criteria": { + "max_azure_dike_charge": { + "trigger": "spectrum:azure_dike_charge_change", + "new_charges": { + "min": 30 + } + }, + "gotten_previous": { + "trigger":"revelationary:advancement_gotten", + "conditions": { "advancement_identifier": "spectrum:midgame/get_azure_dike_charge" } + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/advancements/unlocks/trinkets/azuresque_dike_core.json b/src/main/resources/data/spectrum/advancements/unlocks/trinkets/azuresque_dike_core.json new file mode 100644 index 0000000000..95b296e7e0 --- /dev/null +++ b/src/main/resources/data/spectrum/advancements/unlocks/trinkets/azuresque_dike_core.json @@ -0,0 +1,28 @@ +{ + "criteria": { + "collected_aether_vestiges": { + "trigger": "revelationary:advancement_gotten", + "conditions": { + "advancement_identifier": "spectrum:lategame/collect_aether_vestiges" + } + }, + "collected_moonstone_core": { + "trigger": "revelationary:advancement_gotten", + "conditions": { + "advancement_identifier": "spectrum:lategame/collect_moonstone_core" + } + }, + "collected_downstone_fragments": { + "trigger": "revelationary:advancement_gotten", + "conditions": { + "advancement_identifier": "spectrum:lategame/collect_downstone_fragments" + } + }, + "got_large_amounts_of_dike": { + "trigger": "revelationary:advancement_gotten", + "conditions": { + "advancement_identifier": "spectrum:hidden/get_substantial_azure_dike_charge" + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/equipment/trinkets/azuresque_dike_core.json b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/equipment/trinkets/azuresque_dike_core.json new file mode 100644 index 0000000000..f30f03bdbd --- /dev/null +++ b/src/main/resources/data/spectrum/modonomicon/books/guidebook/entries/equipment/trinkets/azuresque_dike_core.json @@ -0,0 +1,33 @@ +{ + "name": "item.spectrum.azuresque_dike_core", + "condition": { + "type": "modonomicon:advancement", + "advancement_id": "spectrum:unlocks/trinkets/azuresque_dike_core" + }, + "icon": "spectrum:azuresque_dike_core", + "category": "spectrum:equipment", + "hide_while_locked": true, + "parents": [ + { + "entry": "spectrum:equipment/trinkets/base_trinkets", + "line_enabled": false + } + ], + "background_u_index": 0, + "background_v_index": 1, + "x": 10, + "y": -3, + "pages": [ + { + "type": "modonomicon:text", + "text": "book.spectrum.guidebook.azuresque_dike_core.page0.text", + "title": "item.spectrum.azuresque_dike_core" + }, + { + "type": "spectrum:fusion_shrine_crafting", + "text": "book.spectrum.guidebook.azuresque_dike_core.page1.text", + "title": "container.spectrum.rei.fusion_recipe", + "recipe_id": "spectrum:fusion_shrine/trinkets/azuresque_dike_core" + } + ] +} diff --git a/src/main/resources/data/spectrum/recipes/fusion_shrine/trinkets/azuresque_dike_core.json b/src/main/resources/data/spectrum/recipes/fusion_shrine/trinkets/azuresque_dike_core.json new file mode 100644 index 0000000000..c543f69913 --- /dev/null +++ b/src/main/resources/data/spectrum/recipes/fusion_shrine/trinkets/azuresque_dike_core.json @@ -0,0 +1,36 @@ +{ + "type": "spectrum:fusion_shrine", + "time": 1200, + "experience": 20.0, + "fluid": { + "fluid": "spectrum:liquid_crystal" + }, + "ingredients": [ + { + "item": "spectrum:downstone_fragments", + "count": 4 + }, + { + "item": "spectrum:aether_vestiges" + }, + { + "item": "spectrum:moonstone_core" + }, + { + "item": "spectrum:refined_azurite", + "count": 16 + }, + { + "item": "spectrum:blue_pigment", + "count": 16 + } + ], + "result": { + "item": "spectrum:azuresque_dike_core" + }, + "required_advancement": "spectrum:unlocks/trinkets/azuresque_dike_core", + "world_conditions": [], + "start_crafting_effect": "nothing", + "during_crafting_effects": [], + "finish_crafting_effect": "single_visual_explosion_on_shrine" +} \ No newline at end of file diff --git a/src/main/resources/data/trinkets/tags/items/chest/pin.json b/src/main/resources/data/trinkets/tags/items/chest/pin.json index 25c6d93585..45bad66d8d 100644 --- a/src/main/resources/data/trinkets/tags/items/chest/pin.json +++ b/src/main/resources/data/trinkets/tags/items/chest/pin.json @@ -2,6 +2,7 @@ "replace": false, "values": [ "spectrum:radiance_pin", - "spectrum:gleaming_pin" + "spectrum:gleaming_pin", + "spectrum:azuresque_dike_core" ] } \ No newline at end of file