mirror of
https://github.com/Sollace/Unicopia.git
synced 2025-02-01 19:46:42 +01:00
Fixed molting season advancements #45
This commit is contained in:
parent
9f3f012c93
commit
6d48b1ad57
5 changed files with 46 additions and 208 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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" ]
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -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" ]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -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" ]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue