diff --git a/Common/libs.versions.toml b/Common/libs.versions.toml index f8a81b2..9b11d97 100644 --- a/Common/libs.versions.toml +++ b/Common/libs.versions.toml @@ -11,7 +11,7 @@ jetbrains_annotations = "24.1.0" vanilla_gradle = "0.2.1-SNAPSHOT" emi = "1.1.4+1.20.1" -icarus = "2.6.0" +icarus = "2.7.1" [libraries] minecraft = { module = "com.mojang:minecraft", version.ref = "minecraft" } diff --git a/Common/src/main/java/dev/upcraft/origins/icarae/util/IcaraeHelper.java b/Common/src/main/java/dev/upcraft/origins/icarae/util/IcaraeHelper.java new file mode 100644 index 0000000..bbc6d24 --- /dev/null +++ b/Common/src/main/java/dev/upcraft/origins/icarae/util/IcaraeHelper.java @@ -0,0 +1,10 @@ +package dev.upcraft.origins.icarae.util; + +import net.minecraft.world.entity.Entity; + +public class IcaraeHelper { + + public static boolean isWet(Entity entity) { + return entity.isInWaterRainOrBubble(); + } +} diff --git a/Common/src/main/resources/data/icarae_origin/origins/icarae.json b/Common/src/main/resources/data/icarae_origin/origins/icarae.json index 8f07264..ceda368 100644 --- a/Common/src/main/resources/data/icarae_origin/origins/icarae.json +++ b/Common/src/main/resources/data/icarae_origin/origins/icarae.json @@ -2,8 +2,9 @@ "powers": [ "icarae_origin:wings", "origins:aerial_combatant", + "icarae_origin:icarus", "icarae_origin:hollow_bones", - "origins:no_shield", + "icarae_origin:flimsy", "origins:carnivore" ], "icon": "icarus:white_feathered_wings", diff --git a/Common/src/main/resources/data/icarae_origin/powers/flimsy.json b/Common/src/main/resources/data/icarae_origin/powers/flimsy.json new file mode 100644 index 0000000..a6f2df7 --- /dev/null +++ b/Common/src/main/resources/data/icarae_origin/powers/flimsy.json @@ -0,0 +1,33 @@ +{ + "type": "origins:stacking_status_effect", + "min_stacks": 0, + "max_stacks": 1, + "duration_per_stack": 200, + "effect": { + "effect": "icarus:flightless", + "duration": 200, + "is_ambient": true, + "show_particles": false, + "show_icon": true + }, + "condition": { + "type": "origins:or", + "conditions": [ + { + "condition": { + "type": "origins:on_fire" + } + }, + { + "condition": { + "type": "icarae_origin:wet" + } + }, + { + "condition": { + "type": "origins:in_thunderstorm" + } + } + ] + } +} diff --git a/Common/src/main/resources/data/icarae_origin/powers/icarus.json b/Common/src/main/resources/data/icarae_origin/powers/icarus.json new file mode 100644 index 0000000..c5bac4a --- /dev/null +++ b/Common/src/main/resources/data/icarae_origin/powers/icarus.json @@ -0,0 +1,25 @@ +{ + "type": "origins:burn", + "interval": 20, + "burn_duration": 120, + "condition": { + "type": "origins:and", + "conditions": [ + { + "condition": { + "type": "origins:fall_flying" + } + }, + { + "condition": { + "type": "origins:block_collision", + "block_condition": { + "type": "origins:height", + "comparison": ">", + "compare_to": 288 + } + } + } + ] + } +} diff --git a/Fabric/src/main/java/dev/upcraft/origins/icarae/fabric/entrypoints/Main.java b/Fabric/src/main/java/dev/upcraft/origins/icarae/fabric/entrypoints/Main.java index 501b603..9152780 100644 --- a/Fabric/src/main/java/dev/upcraft/origins/icarae/fabric/entrypoints/Main.java +++ b/Fabric/src/main/java/dev/upcraft/origins/icarae/fabric/entrypoints/Main.java @@ -1,15 +1,14 @@ package dev.upcraft.origins.icarae.fabric.entrypoints; +import dev.upcraft.origins.icarae.fabric.init.IcaraeEntityConditions; import dev.upcraft.origins.icarae.fabric.init.IcaraePowers; -import dev.upcraft.origins.icarae.fabric.power.WingsPower; -import io.github.apace100.apoli.registry.ApoliRegistries; import net.fabricmc.api.ModInitializer; -import net.minecraft.core.Registry; public class Main implements ModInitializer { @Override public void onInitialize() { - Registry.register(ApoliRegistries.POWER_FACTORY, WingsPower.POWER_TYPE_ID, IcaraePowers.WINGS_POWER); + IcaraePowers.register(); + IcaraeEntityConditions.register(); } } diff --git a/Fabric/src/main/java/dev/upcraft/origins/icarae/fabric/init/IcaraeEntityConditions.java b/Fabric/src/main/java/dev/upcraft/origins/icarae/fabric/init/IcaraeEntityConditions.java new file mode 100644 index 0000000..e12e497 --- /dev/null +++ b/Fabric/src/main/java/dev/upcraft/origins/icarae/fabric/init/IcaraeEntityConditions.java @@ -0,0 +1,17 @@ +package dev.upcraft.origins.icarae.fabric.init; + +import dev.upcraft.origins.icarae.IcaraeOrigin; +import io.github.apace100.apoli.power.factory.condition.ConditionFactory; +import io.github.apace100.apoli.registry.ApoliRegistries; +import io.github.apace100.calio.data.SerializableData; +import net.minecraft.core.Registry; +import net.minecraft.world.entity.Entity; + +public class IcaraeEntityConditions { + + public static final ConditionFactory WET = new ConditionFactory<>(IcaraeOrigin.id("wet"), new SerializableData(), (instance, entity) -> entity.isInWaterRainOrBubble()); + + public static void register() { + Registry.register(ApoliRegistries.ENTITY_CONDITION, IcaraeOrigin.id("wet"), WET); + } +} diff --git a/Fabric/src/main/java/dev/upcraft/origins/icarae/fabric/init/IcaraePowers.java b/Fabric/src/main/java/dev/upcraft/origins/icarae/fabric/init/IcaraePowers.java index 108ccbc..1ca8946 100644 --- a/Fabric/src/main/java/dev/upcraft/origins/icarae/fabric/init/IcaraePowers.java +++ b/Fabric/src/main/java/dev/upcraft/origins/icarae/fabric/init/IcaraePowers.java @@ -2,8 +2,14 @@ import dev.upcraft.origins.icarae.fabric.power.WingsPower; import io.github.apace100.apoli.power.factory.PowerFactory; +import io.github.apace100.apoli.registry.ApoliRegistries; +import net.minecraft.core.Registry; public class IcaraePowers { public static final PowerFactory WINGS_POWER = WingsPower.createFactory().allowCondition(); + + public static void register() { + Registry.register(ApoliRegistries.POWER_FACTORY, WingsPower.POWER_TYPE_ID, IcaraePowers.WINGS_POWER); + } } diff --git a/NeoForge/src/main/java/dev/upcraft/origins/icarae/neoforge/entrypoints/Main.java b/NeoForge/src/main/java/dev/upcraft/origins/icarae/neoforge/entrypoints/Main.java index 4f9d9bf..4718722 100644 --- a/NeoForge/src/main/java/dev/upcraft/origins/icarae/neoforge/entrypoints/Main.java +++ b/NeoForge/src/main/java/dev/upcraft/origins/icarae/neoforge/entrypoints/Main.java @@ -1,6 +1,7 @@ package dev.upcraft.origins.icarae.neoforge.entrypoints; import dev.upcraft.origins.icarae.IcaraeOrigin; +import dev.upcraft.origins.icarae.neoforge.init.IcaraeConditionTypes; import dev.upcraft.origins.icarae.neoforge.init.IcaraePowers; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; @@ -11,5 +12,6 @@ public class Main { public Main() { var bus = FMLJavaModLoadingContext.get().getModEventBus(); IcaraePowers.POWER_FACTORIES.register(bus); + IcaraeConditionTypes.ENTITY_CONDITION_TYPES.register(bus); } } diff --git a/NeoForge/src/main/java/dev/upcraft/origins/icarae/neoforge/init/IcaraeConditionTypes.java b/NeoForge/src/main/java/dev/upcraft/origins/icarae/neoforge/init/IcaraeConditionTypes.java new file mode 100644 index 0000000..fa04279 --- /dev/null +++ b/NeoForge/src/main/java/dev/upcraft/origins/icarae/neoforge/init/IcaraeConditionTypes.java @@ -0,0 +1,15 @@ +package dev.upcraft.origins.icarae.neoforge.init; + +import dev.upcraft.origins.icarae.IcaraeOrigin; +import dev.upcraft.origins.icarae.neoforge.power.condition.EntityIsWetCondition; +import io.github.edwinmindcraft.apoli.api.power.factory.EntityCondition; +import io.github.edwinmindcraft.apoli.api.registry.ApoliRegistries; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.RegistryObject; + +public class IcaraeConditionTypes { + + public static final DeferredRegister> ENTITY_CONDITION_TYPES = DeferredRegister.create(ApoliRegistries.ENTITY_CONDITION_KEY, IcaraeOrigin.MODID); + + public static final RegistryObject WET = ENTITY_CONDITION_TYPES.register("wet", EntityIsWetCondition::new); +} diff --git a/NeoForge/src/main/java/dev/upcraft/origins/icarae/neoforge/power/condition/EntityIsWetCondition.java b/NeoForge/src/main/java/dev/upcraft/origins/icarae/neoforge/power/condition/EntityIsWetCondition.java new file mode 100644 index 0000000..372a91b --- /dev/null +++ b/NeoForge/src/main/java/dev/upcraft/origins/icarae/neoforge/power/condition/EntityIsWetCondition.java @@ -0,0 +1,25 @@ +package dev.upcraft.origins.icarae.neoforge.power.condition; + +import com.mojang.serialization.Codec; +import dev.upcraft.origins.icarae.util.IcaraeHelper; +import io.github.edwinmindcraft.apoli.api.IDynamicFeatureConfiguration; +import io.github.edwinmindcraft.apoli.api.power.factory.EntityCondition; +import net.minecraft.world.entity.Entity; + +public class EntityIsWetCondition extends EntityCondition { + + public EntityIsWetCondition() { + super(Configuration.CODEC); + } + + @Override + protected boolean check(Configuration configuration, Entity entity) { + return IcaraeHelper.isWet(entity); + } + + public record Configuration() implements IDynamicFeatureConfiguration { + + public static final Codec CODEC = Codec.unit(Configuration::new); + + } +} diff --git a/Quilt/src/main/java/dev/upcraft/origins/icarae/quilt/entrypoints/Main.java b/Quilt/src/main/java/dev/upcraft/origins/icarae/quilt/entrypoints/Main.java index d68cd32..499d1a4 100644 --- a/Quilt/src/main/java/dev/upcraft/origins/icarae/quilt/entrypoints/Main.java +++ b/Quilt/src/main/java/dev/upcraft/origins/icarae/quilt/entrypoints/Main.java @@ -1,9 +1,7 @@ package dev.upcraft.origins.icarae.quilt.entrypoints; +import dev.upcraft.origins.icarae.quilt.init.IcaraeEntityConditions; import dev.upcraft.origins.icarae.quilt.init.IcaraePowers; -import dev.upcraft.origins.icarae.quilt.power.WingsPower; -import io.github.apace100.apoli.registry.ApoliRegistries; -import net.minecraft.core.Registry; import org.quiltmc.loader.api.ModContainer; import org.quiltmc.qsl.base.api.entrypoint.ModInitializer; @@ -11,6 +9,7 @@ public class Main implements ModInitializer { @Override public void onInitialize(ModContainer mod) { - Registry.register(ApoliRegistries.POWER_FACTORY, WingsPower.POWER_TYPE_ID, IcaraePowers.WINGS_POWER); + IcaraePowers.register(); + IcaraeEntityConditions.register(); } } diff --git a/Quilt/src/main/java/dev/upcraft/origins/icarae/quilt/init/IcaraeEntityConditions.java b/Quilt/src/main/java/dev/upcraft/origins/icarae/quilt/init/IcaraeEntityConditions.java new file mode 100644 index 0000000..6279141 --- /dev/null +++ b/Quilt/src/main/java/dev/upcraft/origins/icarae/quilt/init/IcaraeEntityConditions.java @@ -0,0 +1,18 @@ +package dev.upcraft.origins.icarae.quilt.init; + +import dev.upcraft.origins.icarae.IcaraeOrigin; +import dev.upcraft.origins.icarae.util.IcaraeHelper; +import io.github.apace100.apoli.power.factory.condition.ConditionFactory; +import io.github.apace100.apoli.registry.ApoliRegistries; +import io.github.apace100.calio.data.SerializableData; +import net.minecraft.core.Registry; +import net.minecraft.world.entity.Entity; + +public class IcaraeEntityConditions { + + public static final ConditionFactory WET = new ConditionFactory<>(IcaraeOrigin.id("wet"), new SerializableData(), (cfg, entity) -> IcaraeHelper.isWet(entity)); + + public static void register() { + Registry.register(ApoliRegistries.ENTITY_CONDITION, IcaraeOrigin.id("wet"), WET); + } +} diff --git a/Quilt/src/main/java/dev/upcraft/origins/icarae/quilt/init/IcaraePowers.java b/Quilt/src/main/java/dev/upcraft/origins/icarae/quilt/init/IcaraePowers.java index 5daf6da..0060455 100644 --- a/Quilt/src/main/java/dev/upcraft/origins/icarae/quilt/init/IcaraePowers.java +++ b/Quilt/src/main/java/dev/upcraft/origins/icarae/quilt/init/IcaraePowers.java @@ -2,8 +2,14 @@ import dev.upcraft.origins.icarae.quilt.power.WingsPower; import io.github.apace100.apoli.power.factory.PowerFactory; +import io.github.apace100.apoli.registry.ApoliRegistries; +import net.minecraft.core.Registry; public class IcaraePowers { public static final PowerFactory WINGS_POWER = WingsPower.createFactory().allowCondition(); + + public static void register() { + Registry.register(ApoliRegistries.POWER_FACTORY, WingsPower.POWER_TYPE_ID, IcaraePowers.WINGS_POWER); + } }