-
-
Notifications
You must be signed in to change notification settings - Fork 294
/
PandaTrait.java
116 lines (102 loc) · 3.78 KB
/
PandaTrait.java
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package net.citizensnpcs.trait.versioned;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Panda;
import net.citizensnpcs.api.command.Command;
import net.citizensnpcs.api.command.CommandContext;
import net.citizensnpcs.api.command.Requirements;
import net.citizensnpcs.api.command.exception.CommandException;
import net.citizensnpcs.api.command.exception.CommandUsageException;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.api.persistence.Persist;
import net.citizensnpcs.api.trait.Trait;
import net.citizensnpcs.api.trait.TraitName;
import net.citizensnpcs.api.util.Messaging;
import net.citizensnpcs.util.Messages;
import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util;
@TraitName("pandatrait")
public class PandaTrait extends Trait {
@Persist
private Panda.Gene hiddenGene;
@Persist
private Panda.Gene mainGene = Panda.Gene.NORMAL;
@Persist
private boolean sitting;
public PandaTrait() {
super("pandatrait");
}
public Panda.Gene getHiddenGene() {
return hiddenGene;
}
public Panda.Gene getMainGene() {
return mainGene;
}
public boolean isSitting() {
return sitting;
}
@Override
public void run() {
if (npc.isSpawned() && npc.getEntity() instanceof Panda) {
Panda panda = (Panda) npc.getEntity();
panda.setMainGene(mainGene);
NMS.setPandaSitting(npc.getEntity(), sitting);
if (hiddenGene != null) {
panda.setHiddenGene(hiddenGene);
}
}
}
public void setHiddenGene(Panda.Gene gene) {
this.hiddenGene = gene;
}
public void setMainGene(Panda.Gene gene) {
this.mainGene = gene;
}
public void setSitting(boolean sitting) {
this.sitting = sitting;
}
public boolean toggleSitting() {
return sitting = !sitting;
}
@Command(
aliases = { "npc" },
usage = "panda --gene (main gene) --hgene (hidden gene) -s(itting)",
desc = "Sets panda modifiers",
modifiers = { "panda" },
flags = "s",
min = 1,
max = 1,
permission = "citizens.npc.panda")
@Requirements(selected = true, ownership = true, types = EntityType.PANDA)
public static void panda(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
PandaTrait trait = npc.getOrAddTrait(PandaTrait.class);
String output = "";
if (args.hasValueFlag("gene")) {
Panda.Gene gene = Util.matchEnum(Panda.Gene.values(), args.getFlag("gene"));
if (gene == null) {
throw new CommandUsageException(Messages.INVALID_PANDA_GENE,
Util.listValuesPretty(Panda.Gene.values()));
}
trait.setMainGene(gene);
output += ' ' + Messaging.tr(Messages.PANDA_MAIN_GENE_SET, args.getFlag("gene"));
}
if (args.hasValueFlag("hgene")) {
Panda.Gene gene = Util.matchEnum(Panda.Gene.values(), args.getFlag("hgene"));
if (gene == null) {
throw new CommandUsageException(Messages.INVALID_PANDA_GENE,
Util.listValuesPretty(Panda.Gene.values()));
}
trait.setHiddenGene(gene);
output += ' ' + Messaging.tr(Messages.PANDA_HIDDEN_GENE_SET, args.getFlag("hgene"));
}
if (args.hasFlag('s')) {
boolean isSitting = trait.toggleSitting();
output += ' ' + Messaging.tr(isSitting ? Messages.PANDA_SITTING : Messages.PANDA_STOPPED_SITTING);
}
if (!output.isEmpty()) {
Messaging.send(sender, output.trim());
} else {
throw new CommandUsageException();
}
}
}