From 6d48b1ad57ea6e37a4b1a7b818f66a210d39c267 Mon Sep 17 00:00:00 2001 From: Sollace Date: Fri, 14 Jan 2022 11:09:01 +0200 Subject: [PATCH] Fixed molting season advancements #45 --- .../advancement/CustomEventCriterion.java | 22 +++- .../unicopia/entity/player/Pony.java | 21 ++++ .../advancements/unicopia/lightning_bug.json | 79 +------------- .../unicopia/pegasus/molting_season_2.json | 31 +----- .../unicopia/pegasus/molting_season_3.json | 101 +----------------- 5 files changed, 46 insertions(+), 208 deletions(-) diff --git a/src/main/java/com/minelittlepony/unicopia/advancement/CustomEventCriterion.java b/src/main/java/com/minelittlepony/unicopia/advancement/CustomEventCriterion.java index 6f1f555c..87fe6db3 100644 --- a/src/main/java/com/minelittlepony/unicopia/advancement/CustomEventCriterion.java +++ b/src/main/java/com/minelittlepony/unicopia/advancement/CustomEventCriterion.java @@ -41,14 +41,19 @@ public class CustomEventCriterion extends AbstractCriterion { + if (player instanceof ServerPlayerEntity) { - trigger((ServerPlayerEntity)player, c -> c.test(name, (ServerPlayerEntity)player)); + ServerPlayerEntity p = (ServerPlayerEntity)player; + int counter = Pony.of(player).getAdvancementProgress().compute(name, (key, i) -> i == null ? 1 : i + 1); + + trigger((ServerPlayerEntity)player, c -> c.test(name, counter, p)); } }; } @@ -64,17 +69,21 @@ public class CustomEventCriterion extends AbstractCriterion races, Boolean flying) { + private final int repeatCount; + + public Conditions(Extended playerPredicate, String event, Set races, Boolean flying, int repeatCount) { super(ID, playerPredicate); this.event = event; this.races = races; this.flying = flying; + this.repeatCount = repeatCount; } - public boolean test(String event, ServerPlayerEntity player) { + public boolean test(String event, int count, ServerPlayerEntity player) { return this.event.equalsIgnoreCase(event) && (races.isEmpty() || races.contains(Pony.of(player).getSpecies())) - && (flying == null || flying == Pony.of(player).getPhysics().isFlying()); + && (flying == null || flying == Pony.of(player).getPhysics().isFlying()) + && (repeatCount <= 0 || (count > 0 && count % repeatCount == 0)); } @Override @@ -89,6 +98,9 @@ public class CustomEventCriterion extends AbstractCriterion 0) { + json.addProperty("repeats", repeatCount); + } return json; } } 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 6bce5a92..7ecc9658 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java @@ -1,6 +1,8 @@ package com.minelittlepony.unicopia.entity.player; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.stream.Stream; @@ -85,6 +87,8 @@ public class Pony extends Living implements Transmittable, Copieab private final PlayerCamera camera = new PlayerCamera(this); private final TraitDiscovery discoveries = new TraitDiscovery(this); + private final Map advancementProgress = new HashMap<>(); + private final ManaContainer mana; private final PlayerLevelStore levels; @@ -158,6 +162,10 @@ public class Pony extends Living implements Transmittable, Copieab return 1 - (((float)animationDuration) / animationMaxDuration); } + public Map getAdvancementProgress() { + return advancementProgress; + } + @Override public Race getSpecies() { if (getMaster() == null) { @@ -526,6 +534,12 @@ public class Pony extends Living implements Transmittable, Copieab getSpellSlot().get(true).ifPresent(effect ->{ compound.put("effect", Spell.writeNbt(effect)); }); + + NbtCompound progress = new NbtCompound(); + advancementProgress.forEach((key, count) -> { + progress.putInt(key, count); + }); + compound.put("advancementProgress", progress); } @Override @@ -544,6 +558,12 @@ public class Pony extends Living implements Transmittable, Copieab if (compound.contains("effect")) { getSpellSlot().put(Spell.readNbt(compound.getCompound("effect"))); } + + NbtCompound progress = compound.getCompound("advancementProgress"); + advancementProgress.clear(); + for (String key : progress.getKeys()) { + advancementProgress.put(key, progress.getInt(key)); + } } @Override @@ -559,6 +579,7 @@ public class Pony extends Living implements Transmittable, Copieab getDiscoveries().copyFrom(oldPlayer.getDiscoveries()); getCharms().equipSpell(Hand.MAIN_HAND, oldPlayer.getCharms().getEquippedSpell(Hand.MAIN_HAND)); getCharms().equipSpell(Hand.OFF_HAND, oldPlayer.getCharms().getEquippedSpell(Hand.OFF_HAND)); + advancementProgress.putAll(oldPlayer.getAdvancementProgress()); setDirty(); } diff --git a/src/main/resources/data/unicopia/advancements/unicopia/lightning_bug.json b/src/main/resources/data/unicopia/advancements/unicopia/lightning_bug.json index 3d91e905..2de400d7 100644 --- a/src/main/resources/data/unicopia/advancements/unicopia/lightning_bug.json +++ b/src/main/resources/data/unicopia/advancements/unicopia/lightning_bug.json @@ -19,87 +19,16 @@ "experience": 90 }, "criteria": { - "one": { + "lightning_struck_player_10": { "trigger": "unicopia:custom", "conditions": { "event": "lightning_struck_player", - "race": ["bat"] - } - }, - "two": { - "trigger": "unicopia:custom", - "conditions": { - "event": "lightning_struck_player", - "race": ["bat"] - } - }, - "three": { - "trigger": "unicopia:custom", - "conditions": { - "event": "lightning_struck_player", - "race": ["bat"] - } - }, - "four": { - "trigger": "unicopia:custom", - "conditions": { - "event": "lightning_struck_player", - "race": ["bat"] - } - }, - "five": { - "trigger": "unicopia:custom", - "conditions": { - "event": "lightning_struck_player", - "race": ["bat"] - } - }, - "six": { - "trigger": "unicopia:custom", - "conditions": { - "event": "lightning_struck_player", - "race": ["bat"] - } - }, - "seven": { - "trigger": "unicopia:custom", - "conditions": { - "event": "lightning_struck_player", - "race": ["bat"] - } - }, - "eight": { - "trigger": "unicopia:custom", - "conditions": { - "event": "lightning_struck_player", - "race": ["bat"] - } - }, - "nine": { - "trigger": "unicopia:custom", - "conditions": { - "event": "lightning_struck_player", - "race": ["bat"] - } - }, - "ten": { - "trigger": "unicopia:custom", - "conditions": { - "event": "lightning_struck_player", - "race": ["bat"] + "race": ["bat"], + "repeats": 10 } } }, "requirements": [ - [ "one" ], - [ "two" ], - [ "three" ], - [ "four" ], - [ "five" ], - [ "six" ], - [ "seven" ], - [ "eight" ], - [ "nine" ], - [ "ten" ] + [ "lightning_struck_player_10" ] ] } 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 fba0e60d..9ba5d3d3 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 @@ -16,42 +16,15 @@ "hidden": true }, "criteria": { - "shed_feather_1": { - "trigger": "unicopia:custom", - "conditions": { - "event": "shed_feather" - } - }, - "shed_feather_2": { - "trigger": "unicopia:custom", - "conditions": { - "event": "shed_feather" - } - }, - "shed_feather_3": { - "trigger": "unicopia:custom", - "conditions": { - "event": "shed_feather" - } - }, - "shed_feather_4": { - "trigger": "unicopia:custom", - "conditions": { - "event": "shed_feather" - } - }, "shed_feather_5": { "trigger": "unicopia:custom", "conditions": { - "event": "shed_feather" + "event": "shed_feather", + "repeats": 5 } } }, "requirements": [ - [ "shed_feather_1" ], - [ "shed_feather_2" ], - [ "shed_feather_3" ], - [ "shed_feather_4" ], [ "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 39793392..842e678b 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 @@ -16,112 +16,15 @@ "hidden": true }, "criteria": { - "shed_feather_1": { - "trigger": "unicopia:custom", - "conditions": { - "event": "shed_feather" - } - }, - "shed_feather_2": { - "trigger": "unicopia:custom", - "conditions": { - "event": "shed_feather" - } - }, - "shed_feather_3": { - "trigger": "unicopia:custom", - "conditions": { - "event": "shed_feather" - } - }, - "shed_feather_4": { - "trigger": "unicopia:custom", - "conditions": { - "event": "shed_feather" - } - }, - "shed_feather_5": { - "trigger": "unicopia:custom", - "conditions": { - "event": "shed_feather" - } - }, - "shed_feather_6": { - "trigger": "unicopia:custom", - "conditions": { - "event": "shed_feather" - } - }, - "shed_feather_7": { - "trigger": "unicopia:custom", - "conditions": { - "event": "shed_feather" - } - }, - "shed_feather_8": { - "trigger": "unicopia:custom", - "conditions": { - "event": "shed_feather" - } - }, - "shed_feather_9": { - "trigger": "unicopia:custom", - "conditions": { - "event": "shed_feather" - } - }, - "shed_feather_10": { - "trigger": "unicopia:custom", - "conditions": { - "event": "shed_feather" - } - }, - "shed_feather_11": { - "trigger": "unicopia:custom", - "conditions": { - "event": "shed_feather" - } - }, - "shed_feather_12": { - "trigger": "unicopia:custom", - "conditions": { - "event": "shed_feather" - } - }, - "shed_feather_13": { - "trigger": "unicopia:custom", - "conditions": { - "event": "shed_feather" - } - }, - "shed_feather_14": { - "trigger": "unicopia:custom", - "conditions": { - "event": "shed_feather" - } - }, "shed_feather_15": { "trigger": "unicopia:custom", "conditions": { - "event": "shed_feather" + "event": "shed_feather", + "repeats": 15 } } }, "requirements": [ - [ "shed_feather_1" ], - [ "shed_feather_2" ], - [ "shed_feather_3" ], - [ "shed_feather_4" ], - [ "shed_feather_5" ], - [ "shed_feather_6" ], - [ "shed_feather_7" ], - [ "shed_feather_8" ], - [ "shed_feather_9" ], - [ "shed_feather_10" ], - [ "shed_feather_11" ], - [ "shed_feather_12" ], - [ "shed_feather_13" ], - [ "shed_feather_14" ], [ "shed_feather_15" ] ] }