blob: 1c3b2676804df2e26775d2b152d80079a91542f4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
package dev.mayaqq.ygasi.util;
import net.minecraft.advancement.Advancement;
import net.minecraft.advancement.PlayerAdvancementTracker;
import net.minecraft.server.ServerAdvancementLoader;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.Identifier;
import org.jetbrains.annotations.NotNull;
import static dev.mayaqq.ygasi.Ygasi.LOGGER;
public class YgasiUtils {
public static void grantAdvancementCriterion(@NotNull ServerPlayerEntity serverPlayerEntity, Identifier advancementIdentifier, String criterion) {
if (serverPlayerEntity.getServer() == null) {
return;
}
ServerAdvancementLoader sal = serverPlayerEntity.getServer().getAdvancementLoader();
PlayerAdvancementTracker tracker = serverPlayerEntity.getAdvancementTracker();
Advancement advancement = sal.get(advancementIdentifier);
if (advancement == null) {
LOGGER.error("Trying to grant a criterion \"" + criterion + "\" for an advancement that does not exist: " + advancementIdentifier);
} else {
if (!tracker.getProgress(advancement).isDone()) {
tracker.grantCriterion(advancement, criterion);
}
}
}
public static void revokeAllAdvancements(ServerPlayerEntity player, String namespace ,String path) {
if (player.getServer() == null) {
return;
}
ServerAdvancementLoader sal = player.getServer().getAdvancementLoader();
PlayerAdvancementTracker tracker = player.getAdvancementTracker();
for (Advancement advancement : sal.getAdvancements()) {
if (advancement.getId().getNamespace().equals(namespace) && advancement.getId().getPath().startsWith(path)) {
for (String criterion : advancement.getCriteria().keySet()) {
tracker.revokeCriterion(advancement, criterion);
}
}
}
}
public static boolean getAdvancementProgress(ServerPlayerEntity player, String namespace, String path) {
if (player.getServer() == null) {
return false;
}
return player.getAdvancementTracker().getProgress(player.getServer().getAdvancementLoader().get(new Identifier(namespace, path))).isDone();
}
}
|