Skip to content

Commit e3a42e3

Browse files
authored
GH-161 codebase maintenance: serializer fixes and API improvements
1 parent 467599a commit e3a42e3

6 files changed

Lines changed: 106 additions & 22 deletions

File tree

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.github.imdmk.playtime.api.event;
2+
3+
import com.github.imdmk.playtime.api.PlayTime;
4+
import org.bukkit.event.Event;
5+
import org.bukkit.event.HandlerList;
6+
import org.jetbrains.annotations.NotNull;
7+
8+
import java.util.UUID;
9+
10+
public final class PlayTimeChangedEvent extends Event {
11+
12+
private static final HandlerList HANDLERS = new HandlerList();
13+
private static final boolean ASYNC = true;
14+
15+
private final UUID playerId;
16+
private final PlayTime newTime;
17+
private final PlayTime oldTime;
18+
19+
public PlayTimeChangedEvent(
20+
@NotNull UUID playerId,
21+
@NotNull PlayTime newTime,
22+
@NotNull PlayTime oldTime
23+
) {
24+
super(ASYNC);
25+
this.playerId = playerId;
26+
this.newTime = newTime;
27+
this.oldTime = oldTime;
28+
}
29+
30+
@NotNull
31+
public UUID getPlayerId() {
32+
return playerId;
33+
}
34+
35+
@NotNull
36+
public PlayTime getNewTime() {
37+
return newTime;
38+
}
39+
40+
@NotNull
41+
public PlayTime getOldTime() {
42+
return oldTime;
43+
}
44+
45+
@NotNull
46+
@Override
47+
public HandlerList getHandlers() {
48+
return HANDLERS;
49+
}
50+
51+
@NotNull
52+
public static HandlerList getHandlerList() {
53+
return HANDLERS;
54+
}
55+
56+
}

playtime-core/src/main/java/com/github/imdmk/playtime/core/feature/playtime/PlayTimeCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ void playTimeOther(@Context CommandSender sender, @Arg UUID playerId) {
6969

7070
@Execute
7171
void setPlayTime(@Context CommandSender sender, @Arg UUID playerId, @Arg Duration time) {
72-
PlayTime playTime = PlayTime.of(time);
72+
PlayTime playTime = PlayTime.of(time);
7373

7474
userService.setPlayTime(playerId, playTime)
7575
.thenAccept(v -> messageService.create()

playtime-core/src/main/java/com/github/imdmk/playtime/core/feature/playtime/PlayTimeSaveListener.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ final class PlayTimeSaveListener implements Listener {
3434
@EventHandler
3535
void onPlayerJoin(PlayerJoinEvent event) {
3636
Player player = event.getPlayer();
37-
final UUID uuid = player.getUniqueId();
38-
final PlayTime playTime = playTimeAdapter.read(player);
37+
UUID uuid = player.getUniqueId();
38+
PlayTime playTime = playTimeAdapter.read(player);
3939

4040
userService.getOrCreate(uuid, playTime)
4141
.thenAccept(user -> playTimeAdapter.write(player, user.getPlayTime()))
@@ -47,9 +47,9 @@ void onPlayerJoin(PlayerJoinEvent event) {
4747

4848
@EventHandler
4949
void onPlayerQuit(PlayerQuitEvent event) {
50-
final Player player = event.getPlayer();
51-
final UUID uuid = player.getUniqueId();
52-
final PlayTime playTime = playTimeAdapter.read(player);
50+
Player player = event.getPlayer();
51+
UUID uuid = player.getUniqueId();
52+
PlayTime playTime = playTimeAdapter.read(player);
5353

5454
userService.setPlayTime(uuid, playTime)
5555
.exceptionally(e -> {

playtime-core/src/main/java/com/github/imdmk/playtime/core/feature/playtime/PlayTimeUserService.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.github.imdmk.playtime.core.feature.playtime;
22

33
import com.github.imdmk.playtime.api.PlayTime;
4+
import com.github.imdmk.playtime.api.event.PlayTimeChangedEvent;
45
import com.github.imdmk.playtime.core.injector.annotations.Service;
6+
import com.github.imdmk.playtime.core.platform.event.EventCaller;
57
import org.panda_lang.utilities.inject.annotations.Inject;
68

79
import java.util.UUID;
@@ -12,11 +14,17 @@ final class PlayTimeUserService {
1214

1315
private final PlayTimeUserCache cache;
1416
private final PlayTimeUserRepository repository;
17+
private final EventCaller eventCaller;
1518

1619
@Inject
17-
PlayTimeUserService(PlayTimeUserCache cache, PlayTimeUserRepository repository) {
20+
PlayTimeUserService(
21+
PlayTimeUserCache cache,
22+
PlayTimeUserRepository repository,
23+
EventCaller eventCaller
24+
) {
1825
this.cache = cache;
1926
this.repository = repository;
27+
this.eventCaller = eventCaller;
2028
}
2129

2230
CompletableFuture<PlayTimeUser> getOrCreate(
@@ -49,11 +57,14 @@ CompletableFuture<PlayTime> getPlayTime(UUID uuid) {
4957

5058
CompletableFuture<Void> setPlayTime(
5159
UUID uuid,
52-
PlayTime playTime
60+
PlayTime newPlayTime
5361
) {
5462
return getOrCreate(uuid)
5563
.thenCompose(user -> {
56-
user.setPlayTime(playTime);
64+
PlayTime oldPlayTime = user.getPlayTime();
65+
66+
user.setPlayTime(newPlayTime);
67+
eventCaller.callEvent(new PlayTimeChangedEvent(uuid, newPlayTime, oldPlayTime));
5768
return repository.save(user);
5869
});
5970
}

playtime-core/src/main/java/com/github/imdmk/playtime/core/platform/serdes/EnchantmentSerializer.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import eu.okaeri.configs.serdes.ObjectSerializer;
66
import eu.okaeri.configs.serdes.SerializationData;
77
import org.bukkit.NamespacedKey;
8+
import org.bukkit.Registry;
89
import org.bukkit.enchantments.Enchantment;
910

1011
public final class EnchantmentSerializer implements ObjectSerializer<Enchantment> {
@@ -16,14 +17,23 @@ public boolean supports(Class<? super Enchantment> type) {
1617

1718
@Override
1819
public void serialize(Enchantment enchantment, SerializationData data, GenericsDeclaration generics) {
19-
data.setValue(enchantment.getKey().getKey(), String.class);
20+
data.setValue(enchantment.getKeyOrThrow().toString(), String.class);
2021
}
2122

2223
@Override
2324
public Enchantment deserialize(DeserializationData data, GenericsDeclaration generics) {
24-
//return RegistryAccess.registryAccess()
25-
// .getRegistry(RegistryKey.ENCHANTMENT)
26-
// .get(NamespacedKey.minecraft(data.getValue(String.class)));
27-
return null;
25+
String value = data.getValue(String.class);
26+
27+
NamespacedKey key = NamespacedKey.fromString(value);
28+
if (key == null) {
29+
throw new IllegalArgumentException("Invalid enchantment key: " + value);
30+
}
31+
32+
Enchantment enchantment = Registry.ENCHANTMENT.get(key);
33+
if (enchantment == null) {
34+
throw new IllegalArgumentException("Unknown enchantment: " + value);
35+
}
36+
37+
return enchantment;
2838
}
29-
}
39+
}

playtime-core/src/main/java/com/github/imdmk/playtime/core/platform/serdes/SoundSerializer.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,23 @@ public boolean supports(Class<? super Sound> type) {
1717

1818
@Override
1919
public void serialize(Sound sound, SerializationData data, GenericsDeclaration generics) {
20-
// NamespacedKey key = Registry.SOUNDS.getKey(sound);
21-
// if (key == null) {
22-
// return;
23-
// }
24-
//
25-
// data.setValue(key.getKey(), String.class);
20+
data.setValue(sound.getKeyOrThrow().toString(), String.class);
2621
}
2722

2823
@Override
2924
public Sound deserialize(DeserializationData data, GenericsDeclaration generics) {
30-
return Registry.SOUNDS.get(NamespacedKey.minecraft(data.getValue(String.class)));
25+
String value = data.getValue(String.class);
26+
27+
NamespacedKey key = NamespacedKey.fromString(value);
28+
if (key == null) {
29+
throw new IllegalArgumentException("Invalid sound key: " + value);
30+
}
31+
32+
Sound sound = Registry.SOUNDS.get(key);
33+
if (sound == null) {
34+
throw new IllegalArgumentException("Unknown sound: " + value);
35+
}
36+
37+
return sound;
3138
}
3239
}

0 commit comments

Comments
 (0)