From 207320f6a0bb806a575dc4c63874c6b36d8d8960 Mon Sep 17 00:00:00 2001 From: Sollace Date: Fri, 5 May 2023 23:21:45 +0100 Subject: [PATCH] Add an advancement for killing phantoms whilst flying --- .../unicopia/advancement/UCriteria.java | 1 + .../unicopia/entity/player/Pony.java | 6 ++++ .../mixin/MixinServerPlayerEntity.java | 8 +++++ .../resources/assets/unicopia/lang/en_us.json | 3 ++ .../unicopia/pegasus/deter_phantom.json | 32 +++++++++++++++++++ .../unicopia/pegasus/molting_season_1.json | 2 +- .../unicopia/pegasus/molting_season_2.json | 2 +- .../unicopia/pegasus/molting_season_3.json | 2 +- 8 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 src/main/resources/data/unicopia/advancements/unicopia/pegasus/deter_phantom.json diff --git a/src/main/java/com/minelittlepony/unicopia/advancement/UCriteria.java b/src/main/java/com/minelittlepony/unicopia/advancement/UCriteria.java index 7b51695c..c6b077ed 100644 --- a/src/main/java/com/minelittlepony/unicopia/advancement/UCriteria.java +++ b/src/main/java/com/minelittlepony/unicopia/advancement/UCriteria.java @@ -18,6 +18,7 @@ public interface UCriteria { CustomEventCriterion.Trigger SEND_OATS = CUSTOM_EVENT.createTrigger("send_oats"); CustomEventCriterion.Trigger RECEIVE_OATS = CUSTOM_EVENT.createTrigger("receive_oats"); CustomEventCriterion.Trigger BREAK_WINDOW = CUSTOM_EVENT.createTrigger("break_window"); + CustomEventCriterion.Trigger KILL_PHANTOM_WHILE_FLYING = CUSTOM_EVENT.createTrigger("kill_phantom_while_flying"); static void bootstrap() { } } 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 eafc4ec4..bcd1b7da 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java @@ -538,6 +538,12 @@ public class Pony extends Living implements Copyable, Update } } + public void onKill(Entity killedEntity, DamageSource damage) { + if (killedEntity != null && killedEntity.getType() == EntityType.PHANTOM && getPhysics().isFlying()) { + UCriteria.KILL_PHANTOM_WHILE_FLYING.trigger(entity); + } + } + @Override public boolean subtractEnergyCost(double foodSubtract) { diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinServerPlayerEntity.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinServerPlayerEntity.java index f96499d2..c73851b4 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinServerPlayerEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinServerPlayerEntity.java @@ -13,6 +13,8 @@ import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.server.world.UGameRules; import com.mojang.datafixers.util.Either; +import net.minecraft.entity.Entity; +import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.screen.ScreenHandlerListener; import net.minecraft.server.network.ServerPlayerEntity; @@ -44,4 +46,10 @@ abstract class MixinServerPlayerEntity extends PlayerEntity implements ScreenHan info.setReturnValue(Either.left(PlayerEntity.SleepFailureReason.OTHER_PROBLEM)); } } + + @Inject(method = "updateKilledAdvancementCriterion(Lnet/minecraft/entity/Entity;ILnet/minecraft/entity/damage/DamageSource;)V", + at = @At("TAIL")) + private void onUpdateKilledAdvancementCriterion(Entity entityKilled, int score, DamageSource damageSource, CallbackInfo info) { + get().onKill(entityKilled, damageSource); + } } diff --git a/src/main/resources/assets/unicopia/lang/en_us.json b/src/main/resources/assets/unicopia/lang/en_us.json index 821e60e4..e12edb49 100644 --- a/src/main/resources/assets/unicopia/lang/en_us.json +++ b/src/main/resources/assets/unicopia/lang/en_us.json @@ -651,6 +651,9 @@ "advancements.unicopia.rainbow_crash.title": "Dammit, Rainbow", "advancements.unicopia.rainbow_crash.description": "Wage war on the evil glass window nation", + "advancements.unicopia.deter_phantom.title": "What Flies Around", + "advancements.unicopia.deter_phantom.description": "Get up there and give those phantoms a taste of their own medicine", + "unicopia.toast.discoveries.title": "New Discoveries!", "unicopia.toast.discoveries.description": "Check your spellbook" } diff --git a/src/main/resources/data/unicopia/advancements/unicopia/pegasus/deter_phantom.json b/src/main/resources/data/unicopia/advancements/unicopia/pegasus/deter_phantom.json new file mode 100644 index 00000000..ba8f52bb --- /dev/null +++ b/src/main/resources/data/unicopia/advancements/unicopia/pegasus/deter_phantom.json @@ -0,0 +1,32 @@ +{ + "parent": "unicopia:unicopia/pegasus/sky_route", + "display": { + "icon": { + "item": "unicopia:phantom_membrane" + }, + "title": { + "translate": "advancements.unicopia.deter_phantom.title" + }, + "description": { + "translate": "advancements.unicopia.deter_phantom.description" + }, + "frame": "challenge", + "show_toast": true, + "announce_to_chat": true, + "hidden": true + }, + "criteria": { + "the_thing": { + "trigger": "unicopia:custom", + "conditions": { + "event": "kill_phantom_while_flying" + } + } + }, + "requirements": [ + [ "the_thing" ] + ], + "rewards": { + "experience": 100 + } +} diff --git a/src/main/resources/data/unicopia/advancements/unicopia/pegasus/molting_season_1.json b/src/main/resources/data/unicopia/advancements/unicopia/pegasus/molting_season_1.json index 9f13e080..f6003423 100644 --- a/src/main/resources/data/unicopia/advancements/unicopia/pegasus/molting_season_1.json +++ b/src/main/resources/data/unicopia/advancements/unicopia/pegasus/molting_season_1.json @@ -24,6 +24,6 @@ } }, "requirements": [ - [ "shed_feather" ] + [ "shed_feather" ] ] } diff --git a/src/main/resources/data/unicopia/advancements/unicopia/pegasus/molting_season_2.json b/src/main/resources/data/unicopia/advancements/unicopia/pegasus/molting_season_2.json index 9ba5d3d3..107577eb 100644 --- a/src/main/resources/data/unicopia/advancements/unicopia/pegasus/molting_season_2.json +++ b/src/main/resources/data/unicopia/advancements/unicopia/pegasus/molting_season_2.json @@ -25,6 +25,6 @@ } }, "requirements": [ - [ "shed_feather_5" ] + [ "shed_feather_5" ] ] } diff --git a/src/main/resources/data/unicopia/advancements/unicopia/pegasus/molting_season_3.json b/src/main/resources/data/unicopia/advancements/unicopia/pegasus/molting_season_3.json index 842e678b..c9446440 100644 --- a/src/main/resources/data/unicopia/advancements/unicopia/pegasus/molting_season_3.json +++ b/src/main/resources/data/unicopia/advancements/unicopia/pegasus/molting_season_3.json @@ -25,6 +25,6 @@ } }, "requirements": [ - [ "shed_feather_15" ] + [ "shed_feather_15" ] ] }