Skip to content

Commit 622132a

Browse files
committed
Updated command completions, fixed message spam when warp points set in rain
1 parent 7a7bcb5 commit 622132a

File tree

7 files changed

+143
-52
lines changed

7 files changed

+143
-52
lines changed

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
Plugin now updated for Minecraft 1.21, also I'm open to any suggestions on what to add or change
1+
Plugin now updated for Minecraft 1.21
2+
3+
I lost my other mc account so I'm not fully able to test everything here, so please lmk if you find bugs or have any feedback or suggestions :)
24

35
() indicate placeholder values, | is meant as 'or'
46

@@ -24,10 +26,10 @@ Permissions:
2426
- set_warps - Needed to set warp points
2527
- remove_warps - Needed to remove existing warp points
2628
- list_warps - Needed to use /listwarps to see a list of all warp points
29+
- use_warps - Needed to teleport to warp points via chorus fruits
2730

2831
### Known issues:
2932
- Chorus fruit available area check interferes with ability to go to warp points
30-
- Message spam when warp point set in rain
3133
- Permissions break if manual edits in the plugin data file leave !permission and permission together
3234

3335
### To Do: (by priority)

src/main/java/com/brambles/acf/PluginData.java

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,33 @@ public static void writeData() {
6868
} catch (IOException e) { e.printStackTrace(); }
6969
}
7070

71-
public static List<String> getPermissions(UUID playerId) {
72-
List<String> permissions = dataInstance.playerPermissions.get(playerId);
71+
public static List<String> getPermissions(Player player) {
72+
if (player.isOp())
73+
return dataInstance.defaultPermissions.stream().map(
74+
permission -> permission.startsWith("!") ? permission.substring(1) : permission
75+
).toList();
7376

74-
return permissions != null ? permissions : dataInstance.defaultPermissions;
77+
List<String> playerPermissions = dataInstance.playerPermissions.get(player.getUniqueId());
78+
79+
if (playerPermissions == null)
80+
return new ArrayList<>(dataInstance.defaultPermissions);
81+
82+
List<String> playerPermissionsCopy = new ArrayList<>(playerPermissions);
83+
84+
dataInstance.defaultPermissions.forEach(permission -> {
85+
if (playerPermissions.stream().noneMatch(playerPermission -> playerPermission.endsWith(permission.substring(1))))
86+
playerPermissionsCopy.add(permission);
87+
});
88+
89+
return playerPermissionsCopy;
90+
}
91+
92+
public static boolean playerHasPermission(Player player, PluginPermission permission) {
93+
if (player.isOp()) return true;
94+
95+
List<String> permissions = getPermissions(player);
96+
97+
return permissions.contains(permission.id());
7598
}
7699

77100
public static List<String> getPermissions() { return dataInstance.defaultPermissions; }
@@ -92,17 +115,6 @@ public static void updatePermissions(UUID playerId, PluginPermission permission,
92115
currentPermissions.add(permission.id());
93116
currentPermissions.remove(allowed ? "!" + permission.id() : permission.id());
94117
}
95-
96-
public static boolean playerHasPermission(Player player, PluginPermission permission) {
97-
if (player.isOp()) return true;
98-
99-
List<String> permissions = dataInstance.playerPermissions.get(player.getUniqueId());
100-
101-
if (permissions == null)
102-
return dataInstance.defaultPermissions.contains(permission.id());
103-
104-
return permissions.contains(permission.id()) || (!permissions.contains("!" + permission.id()) && dataInstance.defaultPermissions.contains(permission.id()));
105-
}
106118

107119
public static void resetPermissions(UUID playerId) {
108120
dataInstance.playerPermissions.remove(playerId);

src/main/java/com/brambles/acf/commands/ListWarps.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.brambles.acf.commands;
22

3+
import java.util.ArrayList;
4+
import java.util.List;
35
import java.util.Map;
46
import java.util.regex.Pattern;
57

@@ -8,11 +10,12 @@
810
import org.bukkit.command.Command;
911
import org.bukkit.command.CommandExecutor;
1012
import org.bukkit.command.CommandSender;
13+
import org.bukkit.command.TabCompleter;
1114
import org.bukkit.entity.Player;
1215

1316
import static com.brambles.acf.AdvancedChorusFruit.PluginPermission;
1417

15-
public class ListWarps implements CommandExecutor {
18+
public class ListWarps implements CommandExecutor, TabCompleter {
1619

1720
@Override
1821
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
@@ -60,4 +63,19 @@ public boolean onCommand(CommandSender sender, Command cmd, String label, String
6063

6164
return true;
6265
}
66+
67+
@Override
68+
public List<String> onTabComplete(CommandSender sender, Command command, String label, String[] args) {
69+
70+
if (args.length != 1) return new ArrayList<>();
71+
72+
List<String> completions = new ArrayList<>();
73+
completions.add("overworld");
74+
completions.add("nether");
75+
completions.add("end");
76+
77+
String currentArg = args[args.length - 1];
78+
completions.removeIf(str -> !str.startsWith(currentArg));
79+
return completions;
80+
}
6381
}

src/main/java/com/brambles/acf/commands/Permission.java

Lines changed: 53 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.bukkit.entity.Player;
1010

1111
import java.util.ArrayList;
12+
import java.util.Arrays;
1213
import java.util.List;
1314

1415
import static com.brambles.acf.AdvancedChorusFruit.PluginPermission;
@@ -26,13 +27,16 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
2627
if (playerTarget == null && !args[0].equalsIgnoreCase("default")) { sender.sendMessage("Player not found"); return false; }
2728

2829
String targetName = playerTarget != null ? playerTarget.getName() : "Default";
29-
targetPermissions = playerTarget != null ? PluginData.getPermissions(playerTarget.getUniqueId()) : PluginData.getPermissions();
30+
targetPermissions = playerTarget != null ? PluginData.getPermissions(playerTarget) : PluginData.getPermissions();
3031

3132
if (args.length < 2) return false;
3233

3334
if (args[1].equalsIgnoreCase("list")) {
3435
StringBuilder builder = new StringBuilder(targetName).append(" permissions:");
35-
for(String permission : targetPermissions) builder.append("\n - ").append(permission);
36+
37+
for(String permission : targetPermissions)
38+
builder.append("\n - ").append(permission);
39+
3640
sender.sendMessage(builder.toString());
3741
return true;
3842
}
@@ -44,32 +48,63 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
4448
if (permission == null) { sender.sendMessage("Permission \"" + args[1] + "\" doesn't exist"); return false; }
4549
if (args.length < 3) { sender.sendMessage("Incomplete command"); return false; }
4650

47-
boolean allowed = args[2].equalsIgnoreCase("allow");
48-
49-
if (!allowed && !args[2].equalsIgnoreCase("disallow")) { sender.sendMessage("Invalid argument \"" + args[2] + "\""); return false; }
50-
51-
if (playerTarget != null)
52-
PluginData.updatePermissions(playerTarget.getUniqueId(), permission, allowed);
53-
else
54-
PluginData.updateDefaultPermission(permission, allowed);
51+
switch (args[2].toLowerCase()) {
52+
case "allow":
53+
updatePermission(playerTarget, permission, true);
54+
break;
55+
case "disallow":
56+
updatePermission(playerTarget, permission, false);
57+
break;
58+
case "reset":
59+
if (playerTarget == null) {
60+
sender.sendMessage("Resetting is only for player permissions");
61+
return false;
62+
}
63+
PluginData.resetPermissions(playerTarget.getUniqueId());
64+
break;
65+
default:
66+
sender.sendMessage("Invalid argument \"" + args[2] + "\"");
67+
return false;
68+
}
5569

5670
sender.sendMessage(playerTarget != null ? "Permissions for " + playerTarget.getName() + " updated" : "Default permissions updated");
5771
return true;
5872
}
5973

74+
private static void updatePermission(Player target, PluginPermission permission, boolean allowed) {
75+
if (target != null)
76+
PluginData.updatePermissions(target.getUniqueId(), permission, allowed);
77+
else
78+
PluginData.updateDefaultPermission(permission, allowed);
79+
}
80+
6081
@Override
6182
public List<String> onTabComplete(CommandSender sender, Command command, String label, String[] args) {
6283
List<String> completions = new ArrayList<>();
6384

64-
if (args.length == 1) {
65-
completions.add("edit");
66-
completions.add("remove");
67-
completions.add("list");
68-
} else if (args.length == 2) {
69-
Bukkit.getOnlinePlayers().forEach(player -> completions.add(player.getName()));
70-
} else if (args.length == 3) {
71-
for (PluginPermission permission : PluginPermission.values()) completions.add(permission.id());
85+
switch (args.length) {
86+
case 1:
87+
completions.add("default");
88+
Bukkit.getOnlinePlayers().forEach(player -> completions.add(player.getName()));
89+
break;
90+
case 2:
91+
completions.add("list");
92+
Arrays.stream(PluginPermission.values()).forEach(permission -> completions.add(permission.id()));
93+
break;
94+
case 3:
95+
if (args[1].equalsIgnoreCase("list"))
96+
return completions;
97+
98+
completions.add("allow");
99+
completions.add("disallow");
100+
101+
if (!args[0].equalsIgnoreCase("default"))
102+
completions.add("reset");
103+
break;
104+
default:
105+
return completions;
72106
}
107+
73108
String currentArg = args[args.length - 1];
74109
completions.removeIf(str -> !str.startsWith(currentArg));
75110
return completions;

src/main/java/com/brambles/acf/commands/RemoveWarp.java

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.brambles.acf.commands;
22

3+
import java.util.ArrayList;
4+
import java.util.List;
35
import java.util.Map;
46

57
import com.brambles.acf.AdvancedChorusFruit;
@@ -8,9 +10,10 @@
810
import org.bukkit.command.Command;
911
import org.bukkit.command.CommandExecutor;
1012
import org.bukkit.command.CommandSender;
13+
import org.bukkit.command.TabCompleter;
1114
import org.bukkit.entity.Player;
1215

13-
public class RemoveWarp implements CommandExecutor {
16+
public class RemoveWarp implements CommandExecutor, TabCompleter {
1417
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
1518
Environment env;
1619

@@ -40,20 +43,11 @@ public boolean onCommand(CommandSender sender, Command cmd, String label, String
4043
return false;
4144
}
4245

43-
String dimensionName = args[0].toLowerCase();
44-
switch(dimensionName) {
45-
case "overworld":
46-
env = Environment.NORMAL;
47-
break;
48-
case "nether":
49-
env = Environment.NETHER;
50-
break;
51-
case "end":
52-
env = Environment.THE_END;
53-
break;
54-
default:
55-
sender.sendMessage("No data found for dimension \"" + args[0] + "\"");
56-
return false;
46+
env = getEnvironment(args[0]);
47+
48+
if (env == null) {
49+
sender.sendMessage("No data found for dimension \"" + args[0] + "\"");
50+
return false;
5751
}
5852

5953
++extraArgs;
@@ -75,4 +69,30 @@ public boolean onCommand(CommandSender sender, Command cmd, String label, String
7569
sender.sendMessage("No warp point found with name \"" + warpPointName + "\"");
7670
return false;
7771
}
72+
73+
@Override
74+
public List<String> onTabComplete(CommandSender sender, Command command, String label, String[] args) {
75+
List<String> completions = new ArrayList<>();
76+
77+
boolean isPlayer = sender instanceof Player;
78+
79+
if (args.length != (isPlayer ? 1 : 2)) return completions;
80+
81+
Environment env = isPlayer ? ((Player) sender).getWorld().getEnvironment() : getEnvironment(args[0]);
82+
83+
PluginData.getWarpPoints(env).forEach((pointName, location) -> completions.add(pointName));
84+
85+
String currentArg = args[isPlayer ? 0 : 1];
86+
completions.removeIf(str -> !str.startsWith(currentArg));
87+
return completions;
88+
}
89+
90+
private Environment getEnvironment(String envName) {
91+
return switch(envName.toLowerCase()) {
92+
case "overworld" -> Environment.NORMAL;
93+
case "nether" -> Environment.NETHER;
94+
case "end" -> Environment.THE_END;
95+
default -> null;
96+
};
97+
}
7898
}

src/main/java/com/brambles/acf/listeners/EntityBurn.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ public void onItemBurn(EntityCombustByBlockEvent event) {
3232

3333
if (dropper == null) return;
3434

35+
item.getItemStack().setAmount(0);
36+
3537
if (!PluginData.playerHasPermission(dropper, PluginPermission.SET_WARPS)) {
3638
dropper.sendMessage("Couldn't set warp point; Missing Permissions");
3739
return;
@@ -54,7 +56,8 @@ public void onItemBurn(EntityCombustByBlockEvent event) {
5456
+ " Z:"
5557
+ item.getLocation().getBlockZ()
5658
);
57-
} else {
59+
}
60+
else {
5861
warpPoints.put(displayName, Math.floor(entityLoc.getX()) + 0.5 + "|" + Math.floor(entityLoc.getY()) + "|" + (Math.floor(entityLoc.getZ()) + 0.5));
5962
Bukkit.broadcastMessage(
6063
"New warp location \""

src/main/resources/plugin.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@ commands:
1414
Modifies players ability to use certain parts of the plugin
1515
set_warps - Needed for setting warp points
1616
remove_warps - Needed for removing existing warp points with the /removewarp command
17-
Listing - Needed for running /listwarps to see a list of all warp points
17+
list_warps - Needed for running /listwarps to see a list of all warp points
18+
use_warps - Needed for teleporting to warp points via chorus fruit

0 commit comments

Comments
 (0)