Skip to content

Commit ecf559d

Browse files
committed
Better rule system
1 parent 5f90ee5 commit ecf559d

File tree

2 files changed

+74
-13
lines changed

2 files changed

+74
-13
lines changed

src/main/java/io/github/bilektugrul/simpleservertools/features/rules/RulesManager.java

+37-3
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ public class RulesManager {
2323
double pageCount;
2424
public List<String> rules;
2525
public RuleMode ruleMode;
26+
public boolean pageSelectorEnabled;
27+
public String prefix;
28+
public String suffix;
2629

2730
public RulesManager(SST plugin) {
2831
this.plugin = plugin;
@@ -36,6 +39,9 @@ public void reloadRules() {
3639
pageCount = (double) rules.size() / splitRulesEvery;
3740
pageCount = Math.ceil(pageCount);
3841
ruleMode = RuleMode.valueOf(file.getString("mode").toUpperCase(Locale.ROOT));
42+
pageSelectorEnabled = file.getBoolean("page-selector.enabled");
43+
prefix = file.getString("prefix");
44+
suffix = file.getString("suffix");
3945
}
4046

4147
public List<List<String>> setupRulePages(CommandSender sender) {
@@ -65,19 +71,47 @@ public List<String> getRulesPage(int page) {
6571
}
6672

6773
public void sendRules(CommandSender sender, int page) {
74+
page = Math.max(1, page);
6875
if (rules.isEmpty()) {
6976
sender.sendMessage(Utils.getString(file, "no-rule", sender));
7077
return;
7178
}
72-
7379
if (ruleMode == RuleMode.BOOK && sender instanceof Player) {
7480
openRuleBook((Player) sender);
7581
} else {
76-
sender.sendMessage(Utils.getString(file, "prefix", sender));
82+
String pageString = String.valueOf(page);
83+
sendComponent(sender, page, pageString);
84+
85+
if (!prefix.isEmpty()) {
86+
String coloredPrefix = Utils.replacePlaceholders(prefix, sender, true);
87+
sender.sendMessage(coloredPrefix.replace("%page%", pageString));
88+
}
7789
for (String s : getRulesPage(page)) {
7890
sender.sendMessage(Utils.replacePlaceholders(s, sender, true));
7991
}
80-
sender.sendMessage(Utils.getString(file, "suffix", sender));
92+
if (!suffix.isEmpty()) {
93+
String coloredSuffix = Utils.replacePlaceholders(suffix, sender, true);
94+
sender.sendMessage(coloredSuffix.replace("%page%", pageString));
95+
}
96+
97+
sendComponent(sender, page, pageString);
98+
}
99+
}
100+
101+
public void sendComponent(CommandSender sender, int page, String pageString) {
102+
if (pageSelectorEnabled) {
103+
TextComponent component = new TextComponent(Utils.getString(file, "page-selector.back", sender));
104+
component.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/rules " + (page - 1)));
105+
106+
TextComponent middle = new TextComponent(Utils.getString(file, "page-selector.middle", sender)
107+
.replace("%page%", pageString));
108+
109+
BaseComponent next = new TextComponent(Utils.getString(file, "page-selector.next", sender));
110+
next.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/rules " + (page + 1)));
111+
112+
component.addExtra(middle);
113+
component.addExtra(next);
114+
sender.sendMessage(component);
81115
}
82116
}
83117

src/main/resources/rules.yml

+37-10
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,40 @@
1+
# Fully configured for you!
2+
# I recommend using BOOK mode.
3+
# If you switch to CHAT, you'll have to configure rules again since this configuration is for BOOK mode.
4+
# It will not look good as good as BOOK mode in CHAT mode.
5+
16
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'
7+
split-rules-every: 11 # splits rules to pages by every given line
8+
prefix: '&b&b&b&b&m---&r &3Rules &b&m---&r' # leave empty if you don't want to see this, also only works for chat
9+
suffix: '&b&b&b&b&m---&r &3Rules &b&m---&r' # leave empty if you don't want to see this, also only works for chat
510
mode: BOOK # Modes: BOOK, CHAT
6-
#page-selector-in-chat: true - not implemented yet
11+
page-selector:
12+
enabled: true
13+
back: '&c&l<<< Back&r'
14+
middle: ' - &ePage %page%&r - '
15+
next: '&b&lNext >>>'
716
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.'
17+
# Minecraft's font renderer can get buggy sometimes, so you should repeat color codes sometimes.
18+
- '&1&lRULES'
19+
- ''
20+
- ''
21+
- ' &b↳ &cDo not use any kind &cof hacks.'
22+
- ' &b↳ &cDo not swear.'
23+
- ' &b↳ &cDo not use exploits &cto get better items or &cmoney.'
24+
- ''
25+
- ''
26+
- ''
27+
- ''
28+
- ''
29+
30+
- '&1&lRULES'
31+
- ''
32+
- ''
33+
- ' &b↳ &cDo not steal from &cothers.'
34+
- ' &b↳ &cDo not attempt to &cscam.'
35+
- ' &b↳ &cDo not attempt to &cadvertise your &cserver or any kind of &cwebsite/page.'
36+
- ''
37+
- ''
38+
- ''
39+
- ''
40+
- ''

0 commit comments

Comments
 (0)