From a2512f293a6597405b0cfa8e1bfaef69d7aab5f1 Mon Sep 17 00:00:00 2001 From: Sollace Date: Thu, 19 Aug 2021 14:43:15 +0200 Subject: [PATCH] More advancements, I say, more! --- .../unicopia/ability/BatEeeeAbility.java | 11 +++- .../advancement/CustomEventCriterion.java | 15 ++++- .../advancement/RaceChangeCriterion.java | 57 +++++++++++++++++++ .../unicopia/advancement/UCriteria.java | 3 + .../unicopia/entity/player/Pony.java | 2 + .../resources/assets/unicopia/lang/en_us.json | 10 +++- .../unicopia/{ => bat}/cool_potato.json | 4 +- .../unicopia/bat/night_route.json | 29 ++++++++++ .../unicopia/{ => bat}/praise_the_sun.json | 2 +- .../unicopia/bat/screech_self.json | 29 ++++++++++ .../unicopia/bat/screech_twenty_mobs.json | 30 ++++++++++ 11 files changed, 183 insertions(+), 9 deletions(-) create mode 100644 src/main/java/com/minelittlepony/unicopia/advancement/RaceChangeCriterion.java rename src/main/resources/data/unicopia/advancements/unicopia/{ => bat}/cool_potato.json (84%) create mode 100644 src/main/resources/data/unicopia/advancements/unicopia/bat/night_route.json rename src/main/resources/data/unicopia/advancements/unicopia/{ => bat}/praise_the_sun.json (91%) create mode 100644 src/main/resources/data/unicopia/advancements/unicopia/bat/screech_self.json create mode 100644 src/main/resources/data/unicopia/advancements/unicopia/bat/screech_twenty_mobs.json diff --git a/src/main/java/com/minelittlepony/unicopia/ability/BatEeeeAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/BatEeeeAbility.java index cd376305..994d8e9f 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/BatEeeeAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/BatEeeeAbility.java @@ -9,6 +9,7 @@ import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.USounds; import com.minelittlepony.unicopia.ability.data.Hit; import com.minelittlepony.unicopia.ability.magic.spell.SpellType; +import com.minelittlepony.unicopia.advancement.UCriteria; import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.util.MagicalDamageSource; @@ -79,9 +80,10 @@ public class BatEeeeAbility implements Ability { if (rng.nextInt(20000) == 0) { player.getMaster().damage(MagicalDamageSource.create("eeee", player), 0.1F); + UCriteria.SCREECH_SELF.trigger(player.getMaster()); } - player.findAllEntitiesInRange(5).forEach(e -> { + int total = player.findAllEntitiesInRange(5).mapToInt(e -> { if (e instanceof LivingEntity && !HAS_SHIELD.test(e)) { boolean isEarthPony = EquinePredicates.PLAYER_EARTH.test(e); e.damage(MagicalDamageSource.create("eeee", player), isEarthPony ? 0.1F : 0.3F); @@ -92,7 +94,12 @@ public class BatEeeeAbility implements Ability { e.addVelocity(0, 0.1, 0); } } - }); + return 1; + }).sum(); + + if (total >= 20) { + UCriteria.SCREECH_TWENTY_MOBS.trigger(player.getMaster()); + } } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/advancement/CustomEventCriterion.java b/src/main/java/com/minelittlepony/unicopia/advancement/CustomEventCriterion.java index 13fe240d..0333adfd 100644 --- a/src/main/java/com/minelittlepony/unicopia/advancement/CustomEventCriterion.java +++ b/src/main/java/com/minelittlepony/unicopia/advancement/CustomEventCriterion.java @@ -40,7 +40,8 @@ public class CustomEventCriterion extends AbstractCriterion races; - public Conditions(Extended playerPredicate, String event, Set races) { + private final Boolean flying; + + public Conditions(Extended playerPredicate, String event, Set races, Boolean flying) { super(ID, playerPredicate); this.event = event; this.races = races; + this.flying = flying; } public boolean test(String event, ServerPlayerEntity player) { - return this.event.equalsIgnoreCase(event) && (races.isEmpty() || races.contains(Pony.of(player).getSpecies())); + return this.event.equalsIgnoreCase(event) + && (races.isEmpty() || races.contains(Pony.of(player).getSpecies())) + && (flying == null || flying == Pony.of(player).getPhysics().isFlying()); } @Override @@ -80,6 +86,9 @@ public class CustomEventCriterion extends AbstractCriterion arr.add(r.name().toLowerCase())); json.add("race", arr); } + if (flying != null) { + json.addProperty("flying", flying); + } return json; } } diff --git a/src/main/java/com/minelittlepony/unicopia/advancement/RaceChangeCriterion.java b/src/main/java/com/minelittlepony/unicopia/advancement/RaceChangeCriterion.java new file mode 100644 index 00000000..811f11da --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/advancement/RaceChangeCriterion.java @@ -0,0 +1,57 @@ +package com.minelittlepony.unicopia.advancement; + +import com.google.gson.JsonObject; +import com.minelittlepony.unicopia.Race; +import com.minelittlepony.unicopia.entity.player.Pony; + +import net.minecraft.advancement.criterion.AbstractCriterion; +import net.minecraft.advancement.criterion.AbstractCriterionConditions; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.predicate.entity.AdvancementEntityPredicateDeserializer; +import net.minecraft.predicate.entity.AdvancementEntityPredicateSerializer; +import net.minecraft.predicate.entity.EntityPredicate.Extended; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.util.Identifier; +import net.minecraft.util.JsonHelper; + +public class RaceChangeCriterion extends AbstractCriterion { + + private static final Identifier ID = new Identifier("unicopia", "player_change_race"); + + @Override + public Identifier getId() { + return ID; + } + + @Override + protected Conditions conditionsFromJson(JsonObject json, Extended playerPredicate, AdvancementEntityPredicateDeserializer deserializer) { + return new Conditions(playerPredicate, Race.fromName(JsonHelper.getString(json, "race"))); + } + + public void trigger(PlayerEntity player) { + if (player instanceof ServerPlayerEntity) { + test((ServerPlayerEntity)player, c -> c.test((ServerPlayerEntity)player)); + } + } + + public static class Conditions extends AbstractCriterionConditions { + private final Race race; + + public Conditions(Extended playerPredicate, Race race) { + super(ID, playerPredicate); + this.race = race; + } + + public boolean test(ServerPlayerEntity player) { + return Pony.of(player).getSpecies() == race; + } + + @Override + public JsonObject toJson(AdvancementEntityPredicateSerializer serializer) { + JsonObject json = super.toJson(serializer); + json.addProperty("race", race.name().toLowerCase()); + + return json; + } + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/advancement/UCriteria.java b/src/main/java/com/minelittlepony/unicopia/advancement/UCriteria.java index 4271e618..1d86b246 100644 --- a/src/main/java/com/minelittlepony/unicopia/advancement/UCriteria.java +++ b/src/main/java/com/minelittlepony/unicopia/advancement/UCriteria.java @@ -6,12 +6,15 @@ import net.minecraft.advancement.criterion.Criterion; public interface UCriteria { CustomEventCriterion CUSTOM_EVENT = register(new CustomEventCriterion()); + RaceChangeCriterion PLAYER_CHANGE_RACE = register(new RaceChangeCriterion()); CustomEventCriterion.Trigger LOOK_INTO_SUN = CUSTOM_EVENT.createTrigger("look_into_sun"); CustomEventCriterion.Trigger WEAR_SHADES = CUSTOM_EVENT.createTrigger("wear_shades"); CustomEventCriterion.Trigger LIGHTNING_STRUCK = CUSTOM_EVENT.createTrigger("lightning_struck_player"); CustomEventCriterion.Trigger EAT_TRICK_APPLE = CUSTOM_EVENT.createTrigger("eat_trick_apple"); CustomEventCriterion.Trigger FEED_TRICK_APPLE = CUSTOM_EVENT.createTrigger("feed_trick_apple"); + CustomEventCriterion.Trigger SCREECH_SELF = CUSTOM_EVENT.createTrigger("screech_self"); + CustomEventCriterion.Trigger SCREECH_TWENTY_MOBS = CUSTOM_EVENT.createTrigger("screech_twenty_mobs"); private static > T register(T obj) { return MixinCriteria.register(obj); diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java b/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java index d7ec38fb..dae9db9f 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java @@ -130,6 +130,8 @@ public class Pony extends Living implements Transmittable, Copieab gravity.updateFlightState(); entity.sendAbilitiesUpdate(); + + UCriteria.PLAYER_CHANGE_RACE.trigger(entity); } public MagicReserves getMagicalReserves() { diff --git a/src/main/resources/assets/unicopia/lang/en_us.json b/src/main/resources/assets/unicopia/lang/en_us.json index c8b08fd8..080de638 100644 --- a/src/main/resources/assets/unicopia/lang/en_us.json +++ b/src/main/resources/assets/unicopia/lang/en_us.json @@ -403,6 +403,7 @@ "advancements.unicopia.feed_trick_apple.description": "Feed a zap apple to a mob", "advancements.unicopia.eat_trick_apple.title": "Crunchy", "advancements.unicopia.eat_trick_apple.description": "Bite into a zap apple", + "advancements.unicopia.burn_juice.title": "That doesn't seem right", "advancements.unicopia.burn_juice.description": "Burn the juice", "advancements.unicopia.apple_route.title": "Apple, Apple, Apple", @@ -412,5 +413,12 @@ "advancements.unicopia.sweet_apple_acres.title": "Sweet Apple Acres", "advancements.unicopia.sweet_apple_acres.description": "Obtain one of every apple", "advancements.unicopia.brew_cider.title": "Applejack's Finest", - "advancements.unicopia.brew_cider.description": "Brew some cider" + "advancements.unicopia.brew_cider.description": "Brew some cider", + + "advancements.unicopia.night_route.title": "I Am The Night", + "advancements.unicopia.night_route.description": "Walth the path of night", + "advancements.unicopia.screech_twenty_mobs.title": "Terror From The Skies", + "advancements.unicopia.screech_twenty_mobs.description": "Rain down terror on at least 20 mobs at once", + "advancements.unicopia.screech_self.title": "Jeepers!", + "advancements.unicopia.screech_self.description": "Be so terrifying that you even scared your self a little" } diff --git a/src/main/resources/data/unicopia/advancements/unicopia/cool_potato.json b/src/main/resources/data/unicopia/advancements/unicopia/bat/cool_potato.json similarity index 84% rename from src/main/resources/data/unicopia/advancements/unicopia/cool_potato.json rename to src/main/resources/data/unicopia/advancements/unicopia/bat/cool_potato.json index eae9ca6e..cddde5bf 100644 --- a/src/main/resources/data/unicopia/advancements/unicopia/cool_potato.json +++ b/src/main/resources/data/unicopia/advancements/unicopia/bat/cool_potato.json @@ -1,8 +1,8 @@ { - "parent": "unicopia:unicopia/praise_the_sun", + "parent": "unicopia:unicopia/bat/praise_the_sun", "display": { "icon": { - "item": "minecraft:potato" + "item": "minecraft:carved_pumpkin" }, "title": { "translate": "advancements.unicopia.cool_potato.title" diff --git a/src/main/resources/data/unicopia/advancements/unicopia/bat/night_route.json b/src/main/resources/data/unicopia/advancements/unicopia/bat/night_route.json new file mode 100644 index 00000000..2970cb40 --- /dev/null +++ b/src/main/resources/data/unicopia/advancements/unicopia/bat/night_route.json @@ -0,0 +1,29 @@ +{ + "parent": "unicopia:unicopia/root", + "display": { + "icon": { + "item": "minecraft:black_candle" + }, + "title": { + "translate": "advancements.unicopia.night_path.title" + }, + "description": { + "translate": "advancements.unicopia.night_path.description" + }, + "frame": "task", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "be_bat": { + "trigger": "unicopia:player_change_race", + "conditions": { + "race": "bat" + } + } + }, + "requirements": [ + [ "be_bat" ] + ] +} diff --git a/src/main/resources/data/unicopia/advancements/unicopia/praise_the_sun.json b/src/main/resources/data/unicopia/advancements/unicopia/bat/praise_the_sun.json similarity index 91% rename from src/main/resources/data/unicopia/advancements/unicopia/praise_the_sun.json rename to src/main/resources/data/unicopia/advancements/unicopia/bat/praise_the_sun.json index a45e81d0..6d0298ee 100644 --- a/src/main/resources/data/unicopia/advancements/unicopia/praise_the_sun.json +++ b/src/main/resources/data/unicopia/advancements/unicopia/bat/praise_the_sun.json @@ -1,5 +1,5 @@ { - "parent": "unicopia:unicopia/root", + "parent": "unicopia:unicopia/bat/night_route", "display": { "icon": { "item": "minecraft:light" diff --git a/src/main/resources/data/unicopia/advancements/unicopia/bat/screech_self.json b/src/main/resources/data/unicopia/advancements/unicopia/bat/screech_self.json new file mode 100644 index 00000000..a2d24129 --- /dev/null +++ b/src/main/resources/data/unicopia/advancements/unicopia/bat/screech_self.json @@ -0,0 +1,29 @@ +{ + "parent": "unicopia:unicopia/bat/night_route", + "display": { + "icon": { + "item": "minecraft:black_candle" + }, + "title": { + "translate": "advancements.unicopia.screech_self.title" + }, + "description": { + "translate": "advancements.unicopia.screech_self.description" + }, + "frame": "challenge", + "show_toast": true, + "announce_to_chat": true, + "hidden": true + }, + "criteria": { + "screech_self": { + "trigger": "unicopia:custom", + "conditions": { + "event": "screech_self" + } + } + }, + "requirements": [ + [ "screech_self" ] + ] +} diff --git a/src/main/resources/data/unicopia/advancements/unicopia/bat/screech_twenty_mobs.json b/src/main/resources/data/unicopia/advancements/unicopia/bat/screech_twenty_mobs.json new file mode 100644 index 00000000..3d50551c --- /dev/null +++ b/src/main/resources/data/unicopia/advancements/unicopia/bat/screech_twenty_mobs.json @@ -0,0 +1,30 @@ +{ + "parent": "unicopia:unicopia/bat/night_route", + "display": { + "icon": { + "item": "minecraft:black_candle" + }, + "title": { + "translate": "advancements.unicopia.screech_twenty_mobs.title" + }, + "description": { + "translate": "advancements.unicopia.screech_twenty_mobs.description" + }, + "frame": "challenge", + "show_toast": true, + "announce_to_chat": true, + "hidden": false + }, + "criteria": { + "screech_twenty_mobs": { + "trigger": "unicopia:custom", + "conditions": { + "event": "screech_twenty_mobs", + "flying": true + } + } + }, + "requirements": [ + [ "screech_twenty_mobs" ] + ] +}