Fixed molting season advancements #45

This commit is contained in:
Sollace 2022-01-14 11:09:01 +02:00
parent 9f3f012c93
commit 6d48b1ad57
5 changed files with 46 additions and 208 deletions

View file

@ -41,14 +41,19 @@ public class CustomEventCriterion extends AbstractCriterion<CustomEventCriterion
playerPredicate,
JsonHelper.getString(json, "event"),
races,
json.has("flying") ? json.get("flying").getAsBoolean() : null
json.has("flying") ? json.get("flying").getAsBoolean() : null,
JsonHelper.getInt(json, "repeats", 0)
);
}
public CustomEventCriterion.Trigger createTrigger(String name) {
return player -> {
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<CustomEventCriterion
private final Boolean flying;
public Conditions(Extended playerPredicate, String event, Set<Race> races, Boolean flying) {
private final int repeatCount;
public Conditions(Extended playerPredicate, String event, Set<Race> 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<CustomEventCriterion
if (flying != null) {
json.addProperty("flying", flying);
}
if (repeatCount > 0) {
json.addProperty("repeats", repeatCount);
}
return json;
}
}

View file

@ -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<PlayerEntity> implements Transmittable, Copieab
private final PlayerCamera camera = new PlayerCamera(this);
private final TraitDiscovery discoveries = new TraitDiscovery(this);
private final Map<String, Integer> advancementProgress = new HashMap<>();
private final ManaContainer mana;
private final PlayerLevelStore levels;
@ -158,6 +162,10 @@ public class Pony extends Living<PlayerEntity> implements Transmittable, Copieab
return 1 - (((float)animationDuration) / animationMaxDuration);
}
public Map<String, Integer> getAdvancementProgress() {
return advancementProgress;
}
@Override
public Race getSpecies() {
if (getMaster() == null) {
@ -526,6 +534,12 @@ public class Pony extends Living<PlayerEntity> 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<PlayerEntity> 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<PlayerEntity> 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();
}

View file

@ -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" ]
]
}

View file

@ -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" ]
]
}

View file

@ -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" ]
]
}