From f5f89526a9b1fd656edf5ba98d8167ea2d644fbd Mon Sep 17 00:00:00 2001 From: Alluysl Date: Fri, 23 Jul 2021 00:34:55 +0200 Subject: [PATCH] Backport creative_flight power --- build.gradle | 3 ++ gradle.properties | 3 +- .../io/github/apace100/origins/Origins.java | 4 ++ .../origins/power/PlayerAbilityPower.java | 53 +++++++++++++++++++ .../origins/power/factory/PowerFactories.java | 6 +++ 5 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 src/main/java/io/github/apace100/origins/power/PlayerAbilityPower.java diff --git a/build.gradle b/build.gradle index bfe753d2..52a82bd2 100644 --- a/build.gradle +++ b/build.gradle @@ -47,6 +47,9 @@ dependencies { modImplementation "com.jamieswhiteshirt:reach-entity-attributes:${project.reach_version}" include "com.jamieswhiteshirt:reach-entity-attributes:${project.reach_version}" + modImplementation "io.github.ladysnake:PlayerAbilityLib:${pal_version}" + include "io.github.ladysnake:PlayerAbilityLib:${pal_version}" + modImplementation "com.github.adriantodt:FallFlyingLib:${project.ffl_version}" include "com.github.adriantodt:FallFlyingLib:${project.ffl_version}" diff --git a/gradle.properties b/gradle.properties index 6afc5756..5f8cb9cb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ org.gradle.jvmargs=-Xmx4G loader_version=0.11.1 # Mod Properties - mod_version = 0.7.3 + mod_version = 0.8.0 maven_group = io.github.apace100.origins archives_base_name = Origins-1.16.5 @@ -18,5 +18,6 @@ org.gradle.jvmargs=-Xmx4G cca_version=2.8.1 reach_version=1.1.1 ffl_version=1.1.0 + pal_version=1.2.2 clothconfig_version=4.11.14 modmenu_version=1.16.9 \ No newline at end of file diff --git a/src/main/java/io/github/apace100/origins/Origins.java b/src/main/java/io/github/apace100/origins/Origins.java index 4fa382c3..633c46eb 100644 --- a/src/main/java/io/github/apace100/origins/Origins.java +++ b/src/main/java/io/github/apace100/origins/Origins.java @@ -17,6 +17,8 @@ import io.github.apace100.origins.util.ElytraPowerFallFlying; import io.github.apace100.origins.util.GainedPowerCriterion; import io.github.apace100.origins.util.OriginsConfigSerializer; +import io.github.ladysnake.pal.AbilitySource; +import io.github.ladysnake.pal.Pal; import me.shedaniel.autoconfig.AutoConfig; import me.shedaniel.autoconfig.ConfigData; import me.shedaniel.autoconfig.annotation.Config; @@ -41,6 +43,8 @@ public class Origins implements ModInitializer { public static ServerConfig config; + public static final AbilitySource POWER_SOURCE = Pal.getAbilitySource(Origins.identifier("power_source")); + @Override public void onInitialize() { FabricLoader.getInstance().getModContainer(MODID).ifPresent(modContainer -> { diff --git a/src/main/java/io/github/apace100/origins/power/PlayerAbilityPower.java b/src/main/java/io/github/apace100/origins/power/PlayerAbilityPower.java new file mode 100644 index 00000000..bc358726 --- /dev/null +++ b/src/main/java/io/github/apace100/origins/power/PlayerAbilityPower.java @@ -0,0 +1,53 @@ +package io.github.apace100.origins.power; + +import io.github.apace100.origins.Origins; +import io.github.ladysnake.pal.PlayerAbility; +import net.minecraft.entity.player.PlayerEntity; + +public class PlayerAbilityPower extends Power { + + PlayerAbility ability; + + public PlayerAbilityPower(PowerType type, PlayerEntity player, PlayerAbility ability){ + super(type, player); + this.ability = ability; + setTicking(true); + } + + @Override + public void tick() { + if(!player.world.isClient) { + boolean isActive = isActive(); + boolean hasAbility = hasAbility(); + if(isActive && !hasAbility) { + grantAbility(); + } else if(!isActive && hasAbility) { + revokeAbility(); + } + } + } + + // Origins' onChosen is not as consistent as Apoli's onGained so hopefully tick does the job and I don't need to add onAdded/onRespawn callbacks + + @Override + public void onLost() { + if(!player.world.isClient && hasAbility()) { + revokeAbility(); + } + } + + public boolean hasAbility() { + return Origins.POWER_SOURCE.grants(player, ability); + } + + public void grantAbility() { + //Apoli.SCHEDULER.queue(server -> { + Origins.POWER_SOURCE.grantTo(player, ability); + // Apoli.POWER_SOURCE.grantTo((PlayerEntity)entity, VanillaAbilities.FLYING); + //}, 1); + } + + public void revokeAbility() { + Origins.POWER_SOURCE.revokeFrom(player, ability); + } +} diff --git a/src/main/java/io/github/apace100/origins/power/factory/PowerFactories.java b/src/main/java/io/github/apace100/origins/power/factory/PowerFactories.java index cc7ce0f9..0b2dbe7d 100644 --- a/src/main/java/io/github/apace100/origins/power/factory/PowerFactories.java +++ b/src/main/java/io/github/apace100/origins/power/factory/PowerFactories.java @@ -7,6 +7,7 @@ import io.github.apace100.origins.registry.ModDamageSources; import io.github.apace100.origins.registry.ModRegistries; import io.github.apace100.origins.util.*; +import io.github.ladysnake.pal.VanillaAbilities; import net.minecraft.block.pattern.CachedBlockPosition; import net.minecraft.enchantment.Enchantment; import net.minecraft.entity.*; @@ -89,6 +90,11 @@ public static void register() { (type, player) -> new CooldownPower(type, player, data.getInt("cooldown"), (HudRender)data.get("hud_render"))) .allowCondition()); + register(new PowerFactory<>(Origins.identifier("creative_flight"), + new SerializableData(), + data -> + (type, player) -> new PlayerAbilityPower(type, player, VanillaAbilities.ALLOW_FLYING)) + .allowCondition()); register(new PowerFactory<>(Origins.identifier("effect_immunity"), new SerializableData() .add("effect", SerializableDataType.STATUS_EFFECT, null)