Skip to content

Commit 1802ac8

Browse files
authored
GH-909 Resolve auto-message issues with database query, and message ordering. (#909)
1 parent f49c85d commit 1802ac8

File tree

5 files changed

+44
-57
lines changed

5 files changed

+44
-57
lines changed

eternalcore-core/src/main/java/com/eternalcode/core/feature/automessage/AutoMessageCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
import com.eternalcode.annotations.scan.command.DescriptionDocs;
44
import com.eternalcode.core.injector.annotations.Inject;
55
import com.eternalcode.core.notice.NoticeService;
6+
import dev.rollczi.litecommands.annotations.command.Command;
67
import dev.rollczi.litecommands.annotations.context.Context;
78
import dev.rollczi.litecommands.annotations.execute.Execute;
89
import dev.rollczi.litecommands.annotations.permission.Permission;
9-
import dev.rollczi.litecommands.annotations.command.Command;
1010
import org.bukkit.entity.Player;
1111

1212
@Command(name = "automessage", aliases = { "automsg" })

eternalcore-core/src/main/java/com/eternalcode/core/feature/automessage/AutoMessageRepositoryOrmLite.java

Lines changed: 14 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,9 @@
55
import com.eternalcode.core.database.wrapper.AbstractRepositoryOrmLite;
66
import com.eternalcode.core.injector.annotations.Inject;
77
import com.eternalcode.core.injector.annotations.component.Repository;
8-
import com.j256.ormlite.field.DatabaseField;
98
import com.j256.ormlite.stmt.Where;
10-
import com.j256.ormlite.table.DatabaseTable;
119
import com.j256.ormlite.table.TableUtils;
1210
import java.sql.SQLException;
13-
import java.util.HashSet;
1411
import java.util.List;
1512
import java.util.Optional;
1613
import java.util.Set;
@@ -24,7 +21,7 @@ class AutoMessageRepositoryOrmLite extends AbstractRepositoryOrmLite implements
2421
@Inject
2522
private AutoMessageRepositoryOrmLite(DatabaseManager databaseManager, Scheduler scheduler) throws SQLException {
2623
super(databaseManager, scheduler);
27-
TableUtils.createTableIfNotExists(databaseManager.connectionSource(), AutoMessageIgnoreWrapper.class);
24+
TableUtils.createTableIfNotExists(databaseManager.connectionSource(), AutoMessageTable.class);
2825
}
2926

3027
@Override
@@ -33,16 +30,11 @@ public CompletableFuture<Set<UUID>> findReceivers(Set<UUID> onlineUniqueIds) {
3330
return CompletableFuture.completedFuture(onlineUniqueIds);
3431
}
3532

36-
CompletableFuture<List<AutoMessageIgnoreWrapper>> wrapperList =
37-
this.action(AutoMessageIgnoreWrapper.class, dao -> {
38-
Where<AutoMessageIgnoreWrapper, Object> where = dao.queryBuilder().where();
39-
40-
for (UUID onlineUniqueId : onlineUniqueIds) {
41-
where.eq("unique_id", onlineUniqueId);
42-
}
43-
44-
where.or(onlineUniqueIds.size());
45-
33+
CompletableFuture<List<AutoMessageTable>> wrapperList =
34+
this.action(
35+
AutoMessageTable.class, dao -> {
36+
Where<AutoMessageTable, Object> where = dao.queryBuilder().where();
37+
where.in("unique_id", onlineUniqueIds);
4638
return where.query();
4739
});
4840

@@ -51,47 +43,27 @@ public CompletableFuture<Set<UUID>> findReceivers(Set<UUID> onlineUniqueIds) {
5143
.map(wrapper -> wrapper.uniqueId)
5244
.collect(Collectors.toSet());
5345

54-
Set<UUID> onlineUniqueIdsWithoutIgnores = new HashSet<>();
55-
56-
for (UUID onlineUniqueId : onlineUniqueIds) {
57-
if (!ignoredIds.contains(onlineUniqueId)) {
58-
onlineUniqueIdsWithoutIgnores.add(onlineUniqueId);
59-
}
60-
}
61-
62-
return onlineUniqueIdsWithoutIgnores;
46+
return onlineUniqueIds.stream()
47+
.filter(onlineUniqueId -> !ignoredIds.contains(onlineUniqueId))
48+
.collect(Collectors.toSet());
6349
});
6450
}
6551

6652
@Override
6753
public CompletableFuture<Boolean> isReceiving(UUID uniqueId) {
68-
return this.selectSafe(AutoMessageIgnoreWrapper.class, uniqueId).thenApply(Optional::isEmpty);
54+
return this.selectSafe(AutoMessageTable.class, uniqueId).thenApply(Optional::isEmpty);
6955
}
7056

7157
@Override
7258
public CompletableFuture<Boolean> switchReceiving(UUID uniqueId) {
73-
return this.selectSafe(AutoMessageIgnoreWrapper.class, uniqueId).thenCompose(optional -> {
59+
return this.selectSafe(AutoMessageTable.class, uniqueId).thenCompose(optional -> {
7460
if (optional.isEmpty()) {
75-
return this.save(AutoMessageIgnoreWrapper.class, new AutoMessageIgnoreWrapper(uniqueId))
61+
return this.save(AutoMessageTable.class, new AutoMessageTable(uniqueId))
7662
.thenApply(result -> false);
7763
}
7864

79-
AutoMessageIgnoreWrapper wrapper = optional.get();
80-
81-
return this.delete(AutoMessageIgnoreWrapper.class, wrapper).thenApply(state -> true);
65+
AutoMessageTable wrapper = optional.get();
66+
return this.delete(AutoMessageTable.class, wrapper).thenApply(state -> true);
8267
});
8368
}
84-
85-
@DatabaseTable(tableName = "eternal_core_auto_message_ignore")
86-
private static class AutoMessageIgnoreWrapper {
87-
88-
@DatabaseField(columnName = "unique_id", id = true)
89-
UUID uniqueId;
90-
91-
AutoMessageIgnoreWrapper() {}
92-
93-
AutoMessageIgnoreWrapper(UUID uniqueId) {
94-
this.uniqueId = uniqueId;
95-
}
96-
}
9769
}

eternalcore-core/src/main/java/com/eternalcode/core/feature/automessage/AutoMessageService.java

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
package com.eternalcode.core.feature.automessage;
22

3-
import com.eternalcode.annotations.scan.feature.FeatureDocs;
43
import com.eternalcode.commons.RandomElementUtil;
54
import com.eternalcode.commons.scheduler.Scheduler;
65
import com.eternalcode.core.configuration.implementation.PluginConfiguration;
6+
import com.eternalcode.core.feature.automessage.messages.AutoMessageMessages;
77
import com.eternalcode.core.injector.annotations.Inject;
88
import com.eternalcode.core.injector.annotations.component.Service;
99
import com.eternalcode.core.notice.NoticeService;
10-
import com.eternalcode.core.feature.automessage.messages.AutoMessageMessages;
1110
import com.eternalcode.multification.notice.Notice;
1211
import java.util.Collection;
1312
import java.util.Optional;
@@ -19,7 +18,6 @@
1918
import org.bukkit.Server;
2019
import org.bukkit.entity.Entity;
2120

22-
@FeatureDocs(name = "AutoMessage", description = "Automatically sends messages to players at a given time interval.")
2321
@Service
2422
class AutoMessageService {
2523

@@ -55,6 +53,15 @@ CompletableFuture<Boolean> switchReceiving(UUID uniqueId) {
5553
return this.repository.switchReceiving(uniqueId);
5654
}
5755

56+
private void tick() {
57+
this.scheduler.timerAsync(
58+
() -> {
59+
if (this.settings.enabled()) {
60+
this.broadcastNextMessage();
61+
}
62+
}, this.settings.interval(), this.settings.interval());
63+
}
64+
5865
public void broadcastNextMessage() {
5966
Set<UUID> onlineUniqueIds = this.server.getOnlinePlayers().stream()
6067
.map(Entity::getUniqueId)
@@ -76,15 +83,6 @@ public void broadcastNextMessage() {
7683
.send();
7784
});
7885
}
79-
80-
private void tick() {
81-
this.scheduler.runLaterAsync(this::tick, this.settings.interval());
82-
83-
if (this.settings.enabled()) {
84-
this.broadcastNextMessage();
85-
}
86-
}
87-
8886
private Optional<Notice> nextAutoMessage(AutoMessageMessages messageSection) {
8987
Collection<Notice> messages = messageSection.messages();
9088

@@ -97,7 +95,6 @@ private Optional<Notice> nextAutoMessage(AutoMessageMessages messageSection) {
9795
}
9896

9997
int index = this.broadcastCount.getAndIncrement() % messages.size();
100-
10198
return messages.stream().skip(index).findFirst();
10299
}
103100
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.eternalcode.core.feature.automessage;
2+
3+
import com.j256.ormlite.field.DatabaseField;
4+
import com.j256.ormlite.table.DatabaseTable;
5+
import java.util.UUID;
6+
7+
@DatabaseTable(tableName = "eternal_core_auto_message_ignore")
8+
class AutoMessageTable {
9+
10+
@DatabaseField(columnName = "unique_id", id = true)
11+
UUID uniqueId;
12+
13+
AutoMessageTable() {}
14+
15+
AutoMessageTable(UUID uniqueId) {
16+
this.uniqueId = uniqueId;
17+
}
18+
}

eternalcore-core/src/main/java/com/eternalcode/core/feature/automessage/messages/ENAutoMessageMessages.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public class ENAutoMessageMessages implements AutoMessageMessages {
1717

1818
@Description({
1919
"",
20-
"# If you want to useplaceholder %server_online% you need to install",
20+
"# If you want to use placeholder %server_online% you need to install",
2121
"# PlaceholderAPI plugin and download placeholders for Server",
2222
"# like /papi ecloud download Server",
2323
})

0 commit comments

Comments
 (0)