Skip to content

Commit 8f84583

Browse files
committed
75% completion
1 parent 5a48fb7 commit 8f84583

16 files changed

Lines changed: 401 additions & 55 deletions

File tree

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package mc.unraveled.reforged.command;
2+
3+
public class HaltCMD {
4+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package mc.unraveled.reforged.command;
2+
3+
public class JailCMD {
4+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package mc.unraveled.reforged.command;
2+
3+
public class LockCMD {
4+
}
Lines changed: 196 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,196 @@
1+
package mc.unraveled.reforged.command.base;
2+
3+
import mc.unraveled.reforged.api.annotations.CommandInfo;
4+
import mc.unraveled.reforged.data.InfractionData;
5+
import mc.unraveled.reforged.data.PlayerData;
6+
import mc.unraveled.reforged.permission.Rank;
7+
import mc.unraveled.reforged.plugin.Traverse;
8+
import net.kyori.adventure.text.Component;
9+
import net.kyori.adventure.text.format.NamedTextColor;
10+
import org.bukkit.command.CommandSender;
11+
import org.bukkit.entity.Player;
12+
13+
@CommandInfo(
14+
name = "playerdata",
15+
description = "Checks your player data. Also can be used to check and modify other players' data.",
16+
usage = "/<command> [<player> <info | reset <data> | set <data> <newValue>]",
17+
aliases = {"pd", "userdata", "ud"}
18+
)
19+
public class PlayerDataCMD extends AbstractCommandBase {
20+
public PlayerDataCMD(Traverse plugin) {
21+
super(plugin, "playerdata");
22+
}
23+
24+
@Override
25+
public Component cmd(CommandSender sender, String[] args) {
26+
switch (args.length) {
27+
case 0:
28+
if (sender instanceof Player player) {
29+
PlayerData data = getPlugin().getDataManager().getPlayerData(player.getUniqueId());
30+
31+
if (data == null) {
32+
return Component.text("Player data not found!").color(NamedTextColor.RED);
33+
}
34+
35+
String newLine = "\n";
36+
37+
String sb = "Player Data:" + newLine +
38+
"UUID: " + data.getUuid() + newLine +
39+
"Username: " + data.getUserName() + newLine +
40+
"Rank: " + data.getRank() + newLine +
41+
"Play Time: " + data.getPlaytime() + newLine +
42+
"Balance: " + data.getCoins() + newLine +
43+
"Infractions: " + data.getInfractionData().getInfractions() + newLine +
44+
"Last Login: " + data.getLastLogin() + newLine +
45+
"Login Message: " + data.getLoginMessage();
46+
47+
return Component.text(sb);
48+
} else return Component.text("This command can only be used by players!");
49+
50+
case 2:
51+
if (args[1].equalsIgnoreCase("info")) {
52+
Player target = getPlugin().getServer().getPlayer(args[0]);
53+
if (target == null) return MessageDefaults.MSG_NOT_FOUND;
54+
55+
PlayerData data = getPlugin().getDataManager().getPlayerData(target.getUniqueId());
56+
if (data == null) {
57+
return Component.text("Player data not found!").color(NamedTextColor.RED);
58+
}
59+
60+
String newLine = "\n";
61+
62+
String sb = "Player Data:" + newLine +
63+
"UUID: " + data.getUuid() + newLine +
64+
"Username: " + data.getUserName() + newLine +
65+
"Rank: " + data.getRank() + newLine +
66+
"Play Time: " + data.getPlaytime() + newLine +
67+
"Balance: " + data.getCoins() + newLine +
68+
"Infractions: " + data.getInfractionData().getInfractions() + newLine +
69+
"Last Login: " + data.getLastLogin() + newLine +
70+
"Login Message: " + data.getLoginMessage();
71+
72+
return Component.text(sb);
73+
} else {
74+
return usage();
75+
}
76+
case 3:
77+
if (args[1].equalsIgnoreCase("reset")) {
78+
Player target = getPlugin().getServer().getPlayer(args[0]);
79+
if (target == null) return MessageDefaults.MSG_NOT_FOUND;
80+
81+
switch (args[2]) {
82+
case "rank":
83+
PlayerData data = getPlugin().getDataManager().getPlayerData(target.getUniqueId());
84+
if (data == null) return MessageDefaults.MSG_NOT_FOUND;
85+
86+
data.setRank(Rank.NON_OP);
87+
getPlugin().getDataManager().updatePlayer(target.getUniqueId(), data);
88+
return Component.text("Reset " + target.getName() + "'s rank to " + Rank.NON_OP);
89+
case "playtime":
90+
data = getPlugin().getDataManager().getPlayerData(target.getUniqueId());
91+
if (data == null) return MessageDefaults.MSG_NOT_FOUND;
92+
93+
data.setPlaytime(0);
94+
getPlugin().getDataManager().updatePlayer(target.getUniqueId(), data);
95+
return Component.text("Reset " + target.getName() + "'s playtime to 0");
96+
case "balance":
97+
data = getPlugin().getDataManager().getPlayerData(target.getUniqueId());
98+
if (data == null) return MessageDefaults.MSG_NOT_FOUND;
99+
100+
data.setCoins(0);
101+
getPlugin().getDataManager().updatePlayer(target.getUniqueId(), data);
102+
return Component.text("Reset " + target.getName() + "'s balance to 0");
103+
case "infractions":
104+
data = getPlugin().getDataManager().getPlayerData(target.getUniqueId());
105+
if (data == null) return MessageDefaults.MSG_NOT_FOUND;
106+
107+
InfractionData inf = data.getInfractionData();
108+
while (inf.getInfractions() > 0) {
109+
inf.decrement();
110+
}
111+
112+
inf.setFrozen(false);
113+
inf.setJailed(false);
114+
inf.setMuted(false);
115+
inf.setLocked(false);
116+
117+
getPlugin().getDataManager().updatePlayer(target.getUniqueId(), data);
118+
return Component.text("Reset " + target.getName() + "'s infractions to 0");
119+
case "login":
120+
data = getPlugin().getDataManager().getPlayerData(target.getUniqueId());
121+
if (data == null) return MessageDefaults.MSG_NOT_FOUND;
122+
123+
data.setLoginMessage("");
124+
getPlugin().getDataManager().updatePlayer(target.getUniqueId(), data);
125+
return Component.text("Reset " + target.getName() + "'s login message to empty");
126+
default:
127+
return Component.text("Invalid data type!").color(NamedTextColor.RED);
128+
}
129+
}
130+
case 4:
131+
Player target = getPlugin().getServer().getPlayer(args[0]);
132+
if (target == null) return MessageDefaults.MSG_NOT_FOUND;
133+
134+
if (args[1].equalsIgnoreCase("set")) {
135+
switch (args[2]) {
136+
case "rank":
137+
PlayerData data = getPlugin().getDataManager().getPlayerData(target.getUniqueId());
138+
if (data == null) return MessageDefaults.MSG_NOT_FOUND;
139+
140+
Rank rank = Rank.valueOf(args[3].toUpperCase());
141+
data.setRank(rank);
142+
getPlugin().getDataManager().updatePlayer(target.getUniqueId(), data);
143+
return Component.text("Set " + target.getName() + "'s rank to " + rank);
144+
case "playtime":
145+
data = getPlugin().getDataManager().getPlayerData(target.getUniqueId());
146+
if (data == null) return MessageDefaults.MSG_NOT_FOUND;
147+
148+
int playtime = Integer.parseInt(args[3]);
149+
data.setPlaytime(playtime);
150+
getPlugin().getDataManager().updatePlayer(target.getUniqueId(), data);
151+
return Component.text("Set " + target.getName() + "'s playtime to " + playtime);
152+
case "balance":
153+
data = getPlugin().getDataManager().getPlayerData(target.getUniqueId());
154+
if (data == null) return MessageDefaults.MSG_NOT_FOUND;
155+
156+
int balance = Integer.parseInt(args[3]);
157+
data.setCoins(balance);
158+
getPlugin().getDataManager().updatePlayer(target.getUniqueId(), data);
159+
return Component.text("Set " + target.getName() + "'s balance to " + balance);
160+
case "infractions":
161+
data = getPlugin().getDataManager().getPlayerData(target.getUniqueId());
162+
if (data == null) return MessageDefaults.MSG_NOT_FOUND;
163+
164+
InfractionData inf = data.getInfractionData();
165+
int infractions = Integer.parseInt(args[3]);
166+
while (inf.getInfractions() > infractions) {
167+
inf.decrement();
168+
}
169+
170+
getPlugin().getDataManager().updatePlayer(target.getUniqueId(), data);
171+
return Component.text("Set " + target.getName() + "'s infractions to " + infractions);
172+
case "login":
173+
data = getPlugin().getDataManager().getPlayerData(target.getUniqueId());
174+
if (data == null) return MessageDefaults.MSG_NOT_FOUND;
175+
176+
String login = args[3];
177+
data.setLoginMessage(login);
178+
getPlugin().getDataManager().updatePlayer(target.getUniqueId(), data);
179+
return Component.text("Set " + target.getName() + "'s login message to " + login);
180+
default:
181+
return Component.text("Invalid data type!").color(NamedTextColor.RED);
182+
}
183+
} else {
184+
return usage();
185+
}
186+
default:
187+
return usage();
188+
}
189+
}
190+
191+
private Component usage() {
192+
return Component
193+
.text("/<command> [<player> <info | reset <data> | set <data> <newValue>]")
194+
.color(NamedTextColor.GRAY);
195+
}
196+
}

src/main/java/mc/unraveled/reforged/config/Yaml.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,18 @@ public void unbake() {
7272
getPlugin().getLogger().warning("Failed to unbake " + getFileName());
7373
}
7474
}
75+
76+
@SneakyThrows
77+
public void saveToFile() {
78+
unbake();
79+
super.save(yamlFile);
80+
bake();
81+
}
82+
83+
@SneakyThrows
84+
public void loadFromFile() {
85+
unbake();
86+
super.load(yamlFile);
87+
bake();
88+
}
7589
}

src/main/java/mc/unraveled/reforged/config/YamlManager.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,10 @@ public void saveAll() {
6363
}
6464
});
6565
}
66-
public static class Builder {
6766

67+
public static class Builder {
6868
private final Traverse plugin;
69+
6970
private String fileName;
7071
private File dataFolder;
7172
private boolean copyDefaults;
@@ -76,6 +77,8 @@ public Builder(Traverse plugin) {
7677

7778
public Builder fileName(String fileName) {
7879
this.fileName = fileName;
80+
this.dataFolder = plugin.getDataFolder();
81+
this.copyDefaults = false;
7982
return this;
8083
}
8184

@@ -90,7 +93,8 @@ public Builder copyDefaults(boolean copyDefaults) {
9093
}
9194

9295
public Yaml build() {
93-
return new Yaml(plugin, fileName, dataFolder, copyDefaults){};
96+
return new Yaml(plugin, fileName, dataFolder, copyDefaults) {
97+
};
9498
}
9599
}
96100
}

src/main/java/mc/unraveled/reforged/data/CustomLoginData.java

Lines changed: 0 additions & 11 deletions
This file was deleted.

src/main/java/mc/unraveled/reforged/data/DataManager.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import mc.unraveled.reforged.api.Locker;
66
import mc.unraveled.reforged.plugin.Traverse;
77
import mc.unraveled.reforged.storage.DBUser;
8+
import org.bukkit.entity.Player;
89
import org.jetbrains.annotations.Nullable;
910

1011
import java.util.HashSet;
@@ -42,6 +43,13 @@ public PlayerData getPlayerData(UUID uuid) {
4243
.orElse(null);
4344
}
4445

46+
public void updatePlayer(UUID uuid, PlayerData data) {
47+
if (baked) throw new IllegalStateException("Cannot update player data while the data manager is baked.");
48+
49+
playerDataCache.removeIf(playerData -> playerData.getUuid().equals(uuid));
50+
playerDataCache.add(data);
51+
}
52+
4553
public void addPlayerData(PlayerData data) {
4654
if (baked) throw new IllegalStateException("Cannot add player data while the data manager is baked.");
4755

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package mc.unraveled.reforged.data;
2+
3+
import lombok.Data;
4+
import lombok.NoArgsConstructor;
5+
import net.kyori.adventure.text.Component;
6+
7+
/**
8+
* Login Message Information Bean
9+
*/
10+
@Data
11+
@NoArgsConstructor
12+
public class LoginInfo {
13+
private Component loginMessage;
14+
}

src/main/java/mc/unraveled/reforged/data/LoginManager.java

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,11 @@
66
import mc.unraveled.reforged.plugin.Traverse;
77
import mc.unraveled.reforged.storage.DBUser;
88
import mc.unraveled.reforged.util.Pair;
9+
import net.kyori.adventure.text.Component;
10+
import org.bukkit.OfflinePlayer;
911
import org.bukkit.entity.Player;
1012
import org.bukkit.event.EventHandler;
13+
import org.bukkit.event.player.PlayerJoinEvent;
1114
import org.bukkit.event.player.PlayerLoginEvent;
1215
import org.jetbrains.annotations.Nullable;
1316

@@ -18,33 +21,39 @@
1821
@Getter
1922
public class LoginManager implements Baker {
2023
private final Traverse plugin;
21-
private Set<Pair<Player, CustomLoginData>> dataSet = new HashSet<>(); // VALUE ONLY MODIFIED BY BAKER
24+
private Set<Pair<OfflinePlayer, LoginInfo>> dataSet = new HashSet<>(); // VALUE ONLY MODIFIED BY BAKER
2225
private boolean baked = false;
2326

2427
public LoginManager(Traverse plugin) {
2528
this.plugin = plugin;
2629

30+
DBUser user = new DBUser(plugin.getSQLManager().establish());
31+
user.getLoginMessages().forEach((oPlayer, info) -> dataSet.add(new Pair<>(oPlayer, info)));
32+
user.close();
33+
34+
bake();
35+
2736
new LoginListener(plugin);
2837
}
2938

30-
public void add(Player player, CustomLoginData data) {
39+
public void add(OfflinePlayer player, LoginInfo data) {
3140
dataSet.add(new Pair<>(player, data));
3241
}
3342

34-
public void remove(Player player) {
43+
public void remove(OfflinePlayer player) {
3544
dataSet.removeIf(pair -> pair.getFirst().equals(player));
3645
}
3746

3847
@Nullable
39-
public CustomLoginData get(Player player) {
48+
public LoginInfo get(OfflinePlayer player) {
4049
return dataSet.stream()
4150
.filter(pair -> pair.getFirst().equals(player))
4251
.map(Pair::getSecond)
4352
.findFirst()
4453
.orElse(null);
4554
}
4655

47-
public void set(Player player, CustomLoginData data) {
56+
public void set(OfflinePlayer player, LoginInfo data) {
4857
remove(player);
4958
add(player, data);
5059
}
@@ -54,8 +63,8 @@ public void bake() {
5463
if (baked) return;
5564

5665
dataSet.forEach(pair -> {
57-
Player player = pair.getFirst();
58-
CustomLoginData data = pair.getSecond();
66+
OfflinePlayer player = pair.getFirst();
67+
LoginInfo data = pair.getSecond();
5968

6069
DBUser user = new DBUser(plugin.getSQLManager().establish());
6170
user.setLoginMessage(player.getUniqueId().toString(), data.getLoginMessage().toString());
@@ -74,14 +83,18 @@ public void unbake() {
7483
this.baked = false;
7584
}
7685

77-
private final class LoginListener extends AbstractListener {
86+
private static final class LoginListener extends AbstractListener {
7887
public LoginListener(Traverse plugin) {
7988
super(plugin);
8089
}
8190

8291
@EventHandler
83-
public void onLogin(PlayerLoginEvent event) {
92+
public void onLogin(PlayerJoinEvent event) {
8493
Player player = event.getPlayer();
94+
DBUser user = new DBUser(getPlugin().getSQLManager().establish());
95+
LoginInfo info = user.getLoginInfo(player.getUniqueId().toString());
96+
user.close();
97+
event.joinMessage(info.getLoginMessage());
8598
}
8699
}
87100
}

0 commit comments

Comments
 (0)