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, playerPredicate,
JsonHelper.getString(json, "event"), JsonHelper.getString(json, "event"),
races, 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) { public CustomEventCriterion.Trigger createTrigger(String name) {
return player -> { return player -> {
if (player instanceof ServerPlayerEntity) { 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; 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); super(ID, playerPredicate);
this.event = event; this.event = event;
this.races = races; this.races = races;
this.flying = flying; 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) return this.event.equalsIgnoreCase(event)
&& (races.isEmpty() || races.contains(Pony.of(player).getSpecies())) && (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 @Override
@ -89,6 +98,9 @@ public class CustomEventCriterion extends AbstractCriterion<CustomEventCriterion
if (flying != null) { if (flying != null) {
json.addProperty("flying", flying); json.addProperty("flying", flying);
} }
if (repeatCount > 0) {
json.addProperty("repeats", repeatCount);
}
return json; return json;
} }
} }

View file

@ -1,6 +1,8 @@
package com.minelittlepony.unicopia.entity.player; package com.minelittlepony.unicopia.entity.player;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Stream; 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 PlayerCamera camera = new PlayerCamera(this);
private final TraitDiscovery discoveries = new TraitDiscovery(this); private final TraitDiscovery discoveries = new TraitDiscovery(this);
private final Map<String, Integer> advancementProgress = new HashMap<>();
private final ManaContainer mana; private final ManaContainer mana;
private final PlayerLevelStore levels; private final PlayerLevelStore levels;
@ -158,6 +162,10 @@ public class Pony extends Living<PlayerEntity> implements Transmittable, Copieab
return 1 - (((float)animationDuration) / animationMaxDuration); return 1 - (((float)animationDuration) / animationMaxDuration);
} }
public Map<String, Integer> getAdvancementProgress() {
return advancementProgress;
}
@Override @Override
public Race getSpecies() { public Race getSpecies() {
if (getMaster() == null) { if (getMaster() == null) {
@ -526,6 +534,12 @@ public class Pony extends Living<PlayerEntity> implements Transmittable, Copieab
getSpellSlot().get(true).ifPresent(effect ->{ getSpellSlot().get(true).ifPresent(effect ->{
compound.put("effect", Spell.writeNbt(effect)); compound.put("effect", Spell.writeNbt(effect));
}); });
NbtCompound progress = new NbtCompound();
advancementProgress.forEach((key, count) -> {
progress.putInt(key, count);
});
compound.put("advancementProgress", progress);
} }
@Override @Override
@ -544,6 +558,12 @@ public class Pony extends Living<PlayerEntity> implements Transmittable, Copieab
if (compound.contains("effect")) { if (compound.contains("effect")) {
getSpellSlot().put(Spell.readNbt(compound.getCompound("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 @Override
@ -559,6 +579,7 @@ public class Pony extends Living<PlayerEntity> implements Transmittable, Copieab
getDiscoveries().copyFrom(oldPlayer.getDiscoveries()); getDiscoveries().copyFrom(oldPlayer.getDiscoveries());
getCharms().equipSpell(Hand.MAIN_HAND, oldPlayer.getCharms().getEquippedSpell(Hand.MAIN_HAND)); getCharms().equipSpell(Hand.MAIN_HAND, oldPlayer.getCharms().getEquippedSpell(Hand.MAIN_HAND));
getCharms().equipSpell(Hand.OFF_HAND, oldPlayer.getCharms().getEquippedSpell(Hand.OFF_HAND)); getCharms().equipSpell(Hand.OFF_HAND, oldPlayer.getCharms().getEquippedSpell(Hand.OFF_HAND));
advancementProgress.putAll(oldPlayer.getAdvancementProgress());
setDirty(); setDirty();
} }

View file

@ -19,87 +19,16 @@
"experience": 90 "experience": 90
}, },
"criteria": { "criteria": {
"one": { "lightning_struck_player_10": {
"trigger": "unicopia:custom", "trigger": "unicopia:custom",
"conditions": { "conditions": {
"event": "lightning_struck_player", "event": "lightning_struck_player",
"race": ["bat"] "race": ["bat"],
} "repeats": 10
},
"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"]
} }
} }
}, },
"requirements": [ "requirements": [
[ "one" ], [ "lightning_struck_player_10" ]
[ "two" ],
[ "three" ],
[ "four" ],
[ "five" ],
[ "six" ],
[ "seven" ],
[ "eight" ],
[ "nine" ],
[ "ten" ]
] ]
} }

View file

@ -16,42 +16,15 @@
"hidden": true "hidden": true
}, },
"criteria": { "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": { "shed_feather_5": {
"trigger": "unicopia:custom", "trigger": "unicopia:custom",
"conditions": { "conditions": {
"event": "shed_feather" "event": "shed_feather",
"repeats": 5
} }
} }
}, },
"requirements": [ "requirements": [
[ "shed_feather_1" ],
[ "shed_feather_2" ],
[ "shed_feather_3" ],
[ "shed_feather_4" ],
[ "shed_feather_5" ] [ "shed_feather_5" ]
] ]
} }

View file

@ -16,112 +16,15 @@
"hidden": true "hidden": true
}, },
"criteria": { "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": { "shed_feather_15": {
"trigger": "unicopia:custom", "trigger": "unicopia:custom",
"conditions": { "conditions": {
"event": "shed_feather" "event": "shed_feather",
"repeats": 15
} }
} }
}, },
"requirements": [ "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" ] [ "shed_feather_15" ]
] ]
} }