Skip to content

Commit 5f90ee5

Browse files
committed
Complete rules system
1 parent e773a6f commit 5f90ee5

File tree

6 files changed

+161
-0
lines changed

6 files changed

+161
-0
lines changed

pom.xml

+6
Original file line numberDiff line numberDiff line change
@@ -124,5 +124,11 @@
124124
<version>1.0.6</version>
125125
<scope>compile</scope>
126126
</dependency>
127+
<dependency>
128+
<groupId>xyz.upperlevel.spigot.book</groupId>
129+
<artifactId>spigot-book-api</artifactId>
130+
<version>1.4.2</version>
131+
<scope>compile</scope>
132+
</dependency>
127133
</dependencies>
128134
</project>

src/main/java/io/github/bilektugrul/simpleservertools/SST.java

+9
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import io.github.bilektugrul.simpleservertools.features.maintenance.MaintenanceManager;
2222
import io.github.bilektugrul.simpleservertools.features.placeholders.CustomPlaceholderManager;
2323
import io.github.bilektugrul.simpleservertools.features.placeholders.PAPIPlaceholders;
24+
import io.github.bilektugrul.simpleservertools.features.rules.RulesManager;
2425
import io.github.bilektugrul.simpleservertools.features.spawn.SpawnManager;
2526
import io.github.bilektugrul.simpleservertools.features.spy.SpyManager;
2627
import io.github.bilektugrul.simpleservertools.features.tpa.TPAManager;
@@ -63,6 +64,7 @@ public class SST extends JavaPlugin {
6364
private MaintenanceManager maintenanceManager;
6465
private SpyManager spyManager;
6566
private ConverterManager converterManager;
67+
private RulesManager rulesManager;
6668

6769
private AsyncUserSaveThread asyncUserSaveThread;
6870

@@ -126,6 +128,7 @@ private void registerManagers() {
126128
joinMessageManager = new JoinMessageManager(this);
127129
tpaManager = new TPAManager(this);
128130
maintenanceManager = new MaintenanceManager(this);
131+
rulesManager = new RulesManager(this);
129132

130133
vanishManager = new VanishManager();
131134
spyManager = new SpyManager();
@@ -181,6 +184,7 @@ private void registerCommands() {
181184
registerCommand(new MaintenanceCommand(this), "maintenance");
182185
registerCommand(new SocialSpyCommand(this), "spy");
183186
registerCommand(new ConvertCommand(this), "convert");
187+
registerCommand(new RulesCommand(this), "rules");
184188
registerCommand(new AFKCommand(this), "afk");
185189

186190
if (!disabledCommands.isEmpty()) {
@@ -300,6 +304,10 @@ public boolean isConverterManagerReady() {
300304
return converterManager != null;
301305
}
302306

307+
public RulesManager getRulesManager() {
308+
return rulesManager;
309+
}
310+
303311
public void checkAndLoadPacketListener() {
304312
if (pluginManager.isPluginEnabled("ProtocolLib")) {
305313
PLibManager.loadPacketListener(this);
@@ -326,6 +334,7 @@ public void reload(boolean first) {
326334
joinMessageManager.reload();
327335
tpaManager.loadSettings();
328336
maintenanceManager.reload();
337+
rulesManager.reloadRules();
329338
if (Utils.getBoolean("auto-save-users")) {
330339
asyncUserSaveThread = new AsyncUserSaveThread(this);
331340
} else if (asyncUserSaveThread != null) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package io.github.bilektugrul.simpleservertools.commands;
2+
3+
import io.github.bilektugrul.simpleservertools.SST;
4+
import io.github.bilektugrul.simpleservertools.features.rules.RulesManager;
5+
import org.bukkit.command.Command;
6+
import org.bukkit.command.CommandExecutor;
7+
import org.bukkit.command.CommandSender;
8+
import org.jetbrains.annotations.NotNull;
9+
10+
public class RulesCommand implements CommandExecutor {
11+
12+
private final RulesManager rulesManager;
13+
14+
public RulesCommand(SST plugin) {
15+
this.rulesManager = plugin.getRulesManager();
16+
}
17+
18+
@Override
19+
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
20+
int page = 1;
21+
try {
22+
page = Integer.parseInt(args[0]);
23+
} catch (Exception ignored) {}
24+
rulesManager.sendRules(sender, page);
25+
return true;
26+
}
27+
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
package io.github.bilektugrul.simpleservertools.features.rules;
2+
3+
import io.github.bilektugrul.simpleservertools.SST;
4+
import io.github.bilektugrul.simpleservertools.utils.Utils;
5+
import me.despical.commons.configuration.ConfigUtils;
6+
import net.md_5.bungee.api.chat.*;
7+
import org.bukkit.command.CommandSender;
8+
import org.bukkit.configuration.file.FileConfiguration;
9+
import org.bukkit.entity.Player;
10+
import org.bukkit.inventory.ItemStack;
11+
import xyz.upperlevel.spigot.book.BookUtil;
12+
13+
import java.util.ArrayList;
14+
import java.util.List;
15+
import java.util.Locale;
16+
17+
public class RulesManager {
18+
19+
public final SST plugin;
20+
public FileConfiguration file;
21+
22+
public int splitRulesEvery;
23+
double pageCount;
24+
public List<String> rules;
25+
public RuleMode ruleMode;
26+
27+
public RulesManager(SST plugin) {
28+
this.plugin = plugin;
29+
reloadRules();
30+
}
31+
32+
public void reloadRules() {
33+
file = ConfigUtils.getConfig(plugin, "rules");
34+
rules = file.getStringList("lines");
35+
splitRulesEvery = file.getInt("split-rules-every");
36+
pageCount = (double) rules.size() / splitRulesEvery;
37+
pageCount = Math.ceil(pageCount);
38+
ruleMode = RuleMode.valueOf(file.getString("mode").toUpperCase(Locale.ROOT));
39+
}
40+
41+
public List<List<String>> setupRulePages(CommandSender sender) {
42+
List<List<String>> pages = new ArrayList<>();
43+
for (int i = 1; i <= pageCount; i++) {
44+
pages.add(getRulesPage(i));
45+
}
46+
return pages;
47+
}
48+
49+
public String pageToString(List<String> list) {
50+
StringBuilder builder = new StringBuilder();
51+
for (String s : list) {
52+
builder.append(s).append('\n');
53+
}
54+
return builder.toString();
55+
}
56+
57+
public <T> List<T> page(List<T> list, int page, int length) {
58+
int size = list.size();
59+
return list.subList(Math.min((page - 1) * length, size), Math.min(page * length, size));
60+
}
61+
62+
public List<String> getRulesPage(int page) {
63+
page = Math.max(1, page);
64+
return page(rules, page, splitRulesEvery);
65+
}
66+
67+
public void sendRules(CommandSender sender, int page) {
68+
if (rules.isEmpty()) {
69+
sender.sendMessage(Utils.getString(file, "no-rule", sender));
70+
return;
71+
}
72+
73+
if (ruleMode == RuleMode.BOOK && sender instanceof Player) {
74+
openRuleBook((Player) sender);
75+
} else {
76+
sender.sendMessage(Utils.getString(file, "prefix", sender));
77+
for (String s : getRulesPage(page)) {
78+
sender.sendMessage(Utils.replacePlaceholders(s, sender, true));
79+
}
80+
sender.sendMessage(Utils.getString(file, "suffix", sender));
81+
}
82+
}
83+
84+
public void openRuleBook(Player player) {
85+
List<List<String>> pages = setupRulePages(player);
86+
List<BaseComponent[]> pageComponents = new ArrayList<>();
87+
for (List<String> page : pages) {
88+
String pageString = Utils.replacePlaceholders(pageToString(page), player, true);
89+
pageComponents.add(new BaseComponent[]{new TextComponent(pageString)});
90+
}
91+
ItemStack book = BookUtil.writtenBook()
92+
.pages(pageComponents)
93+
.build();
94+
BookUtil.openPlayer(player, book);
95+
}
96+
97+
public enum RuleMode {
98+
99+
BOOK, CHAT
100+
101+
}
102+
103+
}

src/main/resources/plugin.yml

+2
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,8 @@ commands:
102102
tphere:
103103
usage: /tphere <player>
104104
aliases: [s]
105+
rules:
106+
usage: /rules
105107
afk:
106108
usage: /afk
107109

src/main/resources/rules.yml

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
no-rule: '%prefix% &cThere is no rule. ANARCHY!'
2+
split-rules-every: 2 # splits rules to pages by every given line
3+
prefix: '&b&b&b&b&m---&r &1Rules &b&m---&r'
4+
suffix: '&b&b&b&b&m---&r &1Rules &b&m---&r'
5+
mode: BOOK # Modes: BOOK, CHAT
6+
#page-selector-in-chat: true - not implemented yet
7+
lines:
8+
- '&cDo not use any kind of hacks.'
9+
- '&cDo not swear.'
10+
- '&cDo not use exploits to get better items or money.'
11+
- '&cDo not steal from others.'
12+
- '&cDo not attempt to scam.'
13+
- '&cDo not attempt to advertise your server or any kind of website/page.'

0 commit comments

Comments
 (0)