Skip to content

Commit 0442e0d

Browse files
committed
Add whitelist system
1 parent 9e66d62 commit 0442e0d

File tree

3 files changed

+60
-17
lines changed

3 files changed

+60
-17
lines changed

src/main/java/com/arckenver/nations/ConfigHandler.java

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ public static void load(CommandSource src)
7676
Utils.ensurePositiveNumber(config.getNode("others", "maxZoneNameLength"), 13);
7777
Utils.ensureBoolean(config.getNode("others", "enableNationRanks"), true);
7878
Utils.ensureBoolean(config.getNode("others", "enableNationTag"), true);
79-
Utils.ensureString(config.getNode("others", "gravestoneBlock"), "gravestone:gravestone");
8079
Utils.ensureBoolean(config.getNode("others", "enableGoldenAxe"), true);
8180
Utils.ensureString(config.getNode("others", "publicChatFormat"), " &r[&3{NATION}&r] &5{TITLE} &r");
8281
Utils.ensureString(config.getNode("others", "nationChatFormat"), " &r{&eNC&r} ");
@@ -118,6 +117,22 @@ public static void load(CommandSource src)
118117
Utils.ensureBoolean(config.getNode("zones", "perms").getNode(Nation.TYPE_COOWNER).getNode(Nation.PERM_BUILD), true);
119118
Utils.ensureBoolean(config.getNode("zones", "perms").getNode(Nation.TYPE_COOWNER).getNode(Nation.PERM_INTERACT), true);
120119

120+
if (!config.getNode("whitelist", "build").hasListChildren() || config.getNode("whitelist", "build").getChildrenList().isEmpty())
121+
{
122+
Utils.ensureString(config.getNode("whitelist", "build").getAppendedNode(), "gravestone:gravestone");
123+
Utils.ensureString(config.getNode("whitelist", "build").getAppendedNode(), "modname:blockname");
124+
}
125+
126+
if (!config.getNode("whitelist", "break").hasListChildren() || config.getNode("whitelist", "break").getChildrenList().isEmpty())
127+
{
128+
Utils.ensureString(config.getNode("whitelist", "break").getAppendedNode(), "modname:blockname");
129+
}
130+
131+
if (!config.getNode("whitelist", "use").hasListChildren() || config.getNode("whitelist", "use").getChildrenList().isEmpty())
132+
{
133+
Utils.ensureString(config.getNode("whitelist", "use").getAppendedNode(), "modname:blockname");
134+
}
135+
121136
if (config.getNode("others", "enableNationRanks").getBoolean())
122137
{
123138
if (!config.getNode("nationRanks").hasListChildren() || config.getNode("nationRanks").getChildrenList().isEmpty())
@@ -223,6 +238,23 @@ public static CommentedConfigurationNode getNationRank(int numCitizens)
223238
return rank;
224239
}
225240

241+
public static boolean isWhitelisted(String type, String id) {
242+
if (id.equals("minecraft:air"))
243+
return true;
244+
System.out.println("isWhitelisted " + type + " for " + id);
245+
if (!config.getNode("whitelist", type).hasListChildren())
246+
return false;
247+
System.out.println("whitelist has childs " + type + " for " + id);
248+
for (CommentedConfigurationNode item : config.getNode("whitelist", type).getChildrenList()) {
249+
System.out.println("item? " + item.getString());
250+
if (id.startsWith(item.getString())) {
251+
System.out.println("ALLOWED");
252+
return true;
253+
}
254+
}
255+
return false;
256+
}
257+
226258
public static class Utils
227259
{
228260
public static void ensureString(CommentedConfigurationNode node, String def)

src/main/java/com/arckenver/nations/listener/BuildPermListener.java

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,19 @@ public void onPlayerChangeBlock(ChangeBlockEvent.Pre event, @First Player player
3434
return;
3535
}
3636
for (Location<World> loc : event.getLocations()) {
37-
if(!DataHandler.getPerm("build", player.getUniqueId(), loc))
38-
{
39-
event.setCancelled(true);
40-
try {
41-
player.sendMessage(Text.of(TextColors.RED, LanguageHandler.ERROR_PERM_BUILD));
42-
} catch (Exception e) {}
43-
return;
37+
if (!ConfigHandler.isWhitelisted("break", loc.getBlock().getId())) {
38+
if(!DataHandler.getPerm("build", player.getUniqueId(), loc))
39+
{
40+
event.setCancelled(true);
41+
try {
42+
player.sendMessage(Text.of(TextColors.RED, LanguageHandler.ERROR_PERM_BUILD));
43+
} catch (Exception e) {}
44+
return;
45+
}
4446
}
4547
}
4648
}
47-
49+
4850
@Listener(order=Order.FIRST, beforeModifications = true)
4951
public void onPlayerPlacesBlock(ChangeBlockEvent.Place event, @First Player player)
5052
{
@@ -56,12 +58,11 @@ public void onPlayerPlacesBlock(ChangeBlockEvent.Place event, @First Player play
5658
{
5759
return;
5860
}
59-
String graveItem = ConfigHandler.getNode("others", "gravestoneBlock").getString("gravestone:gravestone");
6061
event
6162
.getTransactions()
6263
.stream()
6364
.forEach(trans -> trans.getOriginal().getLocation().ifPresent(loc -> {
64-
if (!trans.getFinal().getState().getType().getId().equals(graveItem)) {
65+
if (!ConfigHandler.isWhitelisted("build", trans.getFinal().getState().getType().getId())) {
6566
if(!DataHandler.getPerm("build", player.getUniqueId(), loc))
6667
{
6768
trans.setValid(false);
@@ -88,12 +89,14 @@ public void onPlayerBreaksBlock(ChangeBlockEvent.Break event, @First Player play
8889
.getTransactions()
8990
.stream()
9091
.forEach(trans -> trans.getOriginal().getLocation().ifPresent(loc -> {
91-
if(!DataHandler.getPerm("build", player.getUniqueId(), loc))
92-
{
93-
trans.setValid(false);
94-
try {
95-
player.sendMessage(Text.of(TextColors.RED, LanguageHandler.ERROR_PERM_BUILD));
96-
} catch (Exception e) {}
92+
if (!ConfigHandler.isWhitelisted("break", trans.getFinal().getState().getType().getId())) {
93+
if(!DataHandler.getPerm("build", player.getUniqueId(), loc))
94+
{
95+
trans.setValid(false);
96+
try {
97+
player.sendMessage(Text.of(TextColors.RED, LanguageHandler.ERROR_PERM_BUILD));
98+
} catch (Exception e) {}
99+
}
97100
}
98101
}));
99102
}

src/main/java/com/arckenver/nations/listener/InteractPermListener.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.arckenver.nations.listener;
22

3+
import java.util.Optional;
4+
35
import org.spongepowered.api.block.BlockTypes;
6+
import org.spongepowered.api.data.type.HandTypes;
47
import org.spongepowered.api.entity.Entity;
58
import org.spongepowered.api.entity.hanging.ItemFrame;
69
import org.spongepowered.api.entity.living.ArmorStand;
@@ -11,6 +14,8 @@
1114
import org.spongepowered.api.event.block.InteractBlockEvent;
1215
import org.spongepowered.api.event.entity.InteractEntityEvent;
1316
import org.spongepowered.api.event.filter.cause.First;
17+
import org.spongepowered.api.item.ItemTypes;
18+
import org.spongepowered.api.item.inventory.ItemStack;
1419
import org.spongepowered.api.text.Text;
1520
import org.spongepowered.api.text.format.TextColors;
1621

@@ -31,6 +36,9 @@ public void onInteract(InteractBlockEvent event, @First Player player)
3136
{
3237
return;
3338
}
39+
Optional<ItemStack> optItem = player.getItemInHand(HandTypes.MAIN_HAND);
40+
if (optItem.isPresent() && (ConfigHandler.isWhitelisted("use", optItem.get().getItem().getId()) || optItem.get().getItem().equals(ItemTypes.GOLDEN_AXE) && ConfigHandler.getNode("others", "enableGoldenAxe").getBoolean(true)))
41+
return;
3442
event.getTargetBlock().getLocation().ifPresent(loc -> {
3543
if (!DataHandler.getPerm("interact", player.getUniqueId(), loc))
3644
{

0 commit comments

Comments
 (0)