mirror of
https://github.com/Sollace/Unicopia.git
synced 2025-02-01 11:36:43 +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,
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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" ]
|
||||
]
|
||||
}
|
||||
|
|
|
@ -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" ]
|
||||
]
|
||||
}
|
||||
|
|
|
@ -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" ]
|
||||
]
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue