Skip to content

Commit 1b1151b

Browse files
v2.0
1 parent 4c6f077 commit 1b1151b

18 files changed

Lines changed: 2585 additions & 0 deletions
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package org.vortex.resourceloader;
2+
3+
import org.bukkit.ChatColor;
4+
import org.bukkit.command.Command;
5+
import org.bukkit.command.CommandExecutor;
6+
import org.bukkit.command.CommandSender;
7+
8+
public class HelpCommand implements CommandExecutor {
9+
10+
@Override
11+
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
12+
sender.sendMessage(ChatColor.YELLOW + "=== ResourceLoader Help ===");
13+
14+
// Basic commands (available to all players)
15+
if (sender.hasPermission("resourceloader.load")) {
16+
sender.sendMessage(ChatColor.GOLD + "/load " + ChatColor.WHITE + "- Load the default server resource pack");
17+
sender.sendMessage(ChatColor.GOLD + "/load <packname> " + ChatColor.WHITE + "- Load a specific resource pack");
18+
}
19+
20+
if (sender.hasPermission("resourceloader.list")) {
21+
sender.sendMessage(ChatColor.GOLD + "/listpacks " + ChatColor.WHITE + "- List all available resource packs");
22+
}
23+
24+
// Admin commands
25+
if (sender.hasPermission("resourceloader.admin")) {
26+
sender.sendMessage(ChatColor.RED + "\nAdmin Commands:");
27+
sender.sendMessage(ChatColor.GOLD + "/mergepack <output>.zip <pack1> <pack2> [pack3...] " + ChatColor.WHITE +
28+
"- Merge multiple resource packs into one");
29+
sender.sendMessage(ChatColor.GOLD + "/removepack <packname> " + ChatColor.WHITE +
30+
"- Remove a resource pack and its config entry");
31+
sender.sendMessage(ChatColor.GOLD + "/resourcereload " + ChatColor.WHITE +
32+
"- Reload the plugin configuration and packs");
33+
sender.sendMessage(ChatColor.GOLD + "/resourceversion " + ChatColor.WHITE +
34+
"- Check plugin version and updates");
35+
sender.sendMessage(ChatColor.GOLD + "/clearcache " + ChatColor.WHITE +
36+
"- Clear the resource pack cache");
37+
}
38+
39+
// Show permissions info
40+
sender.sendMessage(ChatColor.YELLOW + "\nPermissions:");
41+
if (sender.hasPermission("resourceloader.admin")) {
42+
sender.sendMessage(ChatColor.GRAY + "You have admin access to all commands");
43+
} else if (sender.hasPermission("resourceloader.load")) {
44+
sender.sendMessage(ChatColor.GRAY + "You can use basic resource pack commands");
45+
}
46+
47+
if (sender.hasPermission("resourceloader.bypass")) {
48+
sender.sendMessage(ChatColor.GRAY + "You can bypass forced resource packs");
49+
}
50+
51+
return true;
52+
}
53+
}
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
package org.vortex.resourceloader;
2+
3+
import org.bukkit.ChatColor;
4+
import org.bukkit.command.Command;
5+
import org.bukkit.command.CommandExecutor;
6+
import org.bukkit.command.CommandSender;
7+
import org.bukkit.command.TabCompleter;
8+
import org.bukkit.util.StringUtil;
9+
import org.bukkit.scheduler.BukkitRunnable;
10+
11+
import java.io.File;
12+
import java.io.IOException;
13+
import java.util.ArrayList;
14+
import java.util.Collections;
15+
import java.util.List;
16+
17+
public class MergeCommand implements CommandExecutor, TabCompleter {
18+
private final Resourceloader plugin;
19+
private final ResourcePackMerger merger;
20+
private boolean isCurrentlyMerging = false;
21+
22+
public MergeCommand(Resourceloader plugin) {
23+
this.plugin = plugin;
24+
this.merger = new ResourcePackMerger(plugin);
25+
}
26+
27+
public ResourcePackMerger getMerger() {
28+
return merger;
29+
}
30+
31+
@Override
32+
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
33+
if (!sender.hasPermission("resourceloader.admin")) {
34+
sender.sendMessage(ChatColor.RED + "You don't have permission to merge resource packs.");
35+
return true;
36+
}
37+
38+
if (isCurrentlyMerging) {
39+
sender.sendMessage(ChatColor.RED + "A merge operation is already in progress. Please wait.");
40+
return true;
41+
}
42+
43+
if (args.length < 3) {
44+
sender.sendMessage(ChatColor.RED + "Usage: /mergepack <output_name> <pack1> <pack2> [pack3...]");
45+
return true;
46+
}
47+
48+
String outputName = args[0];
49+
if (!outputName.toLowerCase().endsWith(".zip")) {
50+
outputName += ".zip";
51+
}
52+
53+
// Validate all packs exist before starting the merge
54+
List<File> inputPacks = new ArrayList<>();
55+
for (int i = 1; i < args.length; i++) {
56+
String packName = args[i];
57+
File packFile = plugin.getResourcePacks().get(packName);
58+
if (packFile == null) {
59+
sender.sendMessage(ChatColor.RED + "Resource pack '" + packName + "' not found!");
60+
return true;
61+
}
62+
inputPacks.add(packFile);
63+
}
64+
65+
// Mark as merging
66+
isCurrentlyMerging = true;
67+
sender.sendMessage(ChatColor.YELLOW + "Starting resource pack merge process...");
68+
69+
// Use final variables for the inner class
70+
final String finalOutputName = outputName;
71+
final List<File> finalInputPacks = inputPacks;
72+
73+
new BukkitRunnable() {
74+
@Override
75+
public void run() {
76+
try {
77+
// Perform merge operation async
78+
merger.mergeResourcePacks(finalInputPacks, finalOutputName);
79+
80+
// Switch back to main thread to update plugin state
81+
new BukkitRunnable() {
82+
@Override
83+
public void run() {
84+
try {
85+
plugin.loadResourcePacks();
86+
sender.sendMessage(ChatColor.GREEN + "Successfully merged resource packs into: " + finalOutputName);
87+
} catch (Exception e) {
88+
sender.sendMessage(ChatColor.RED + "Error loading merged pack: " + e.getMessage());
89+
plugin.getLogger().warning("Error loading merged pack: " + e.getMessage());
90+
e.printStackTrace();
91+
} finally {
92+
isCurrentlyMerging = false;
93+
}
94+
}
95+
}.runTask(plugin);
96+
97+
} catch (IOException e) {
98+
// Switch back to main thread to send error message
99+
new BukkitRunnable() {
100+
@Override
101+
public void run() {
102+
sender.sendMessage(ChatColor.RED + "Failed to merge resource packs: " + e.getMessage());
103+
plugin.getLogger().warning("Failed to merge resource packs: " + e.getMessage());
104+
e.printStackTrace();
105+
isCurrentlyMerging = false;
106+
}
107+
}.runTask(plugin);
108+
}
109+
}
110+
}.runTaskAsynchronously(plugin);
111+
112+
return true;
113+
}
114+
115+
@Override
116+
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
117+
List<String> completions = new ArrayList<>();
118+
119+
if (args.length >= 2) {
120+
if (sender.hasPermission("resourceloader.admin")) {
121+
List<String> packs = new ArrayList<>(plugin.getResourcePacks().keySet());
122+
StringUtil.copyPartialMatches(args[args.length - 1], packs, completions);
123+
}
124+
}
125+
126+
Collections.sort(completions);
127+
return completions;
128+
}
129+
}
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
package org.vortex.resourceloader;
2+
3+
import org.bukkit.ChatColor;
4+
import org.bukkit.command.Command;
5+
import org.bukkit.command.CommandExecutor;
6+
import org.bukkit.command.CommandSender;
7+
import org.bukkit.command.TabCompleter;
8+
import org.bukkit.configuration.file.FileConfiguration;
9+
import org.bukkit.util.StringUtil;
10+
11+
import java.io.File;
12+
import java.nio.file.Files;
13+
import java.util.ArrayList;
14+
import java.util.Collections;
15+
import java.util.List;
16+
17+
public class RemovePackCommand implements CommandExecutor, TabCompleter {
18+
private final Resourceloader plugin;
19+
20+
public RemovePackCommand(Resourceloader plugin) {
21+
this.plugin = plugin;
22+
}
23+
24+
@Override
25+
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
26+
if (!sender.hasPermission("resourceloader.admin")) {
27+
sender.sendMessage(ChatColor.RED + "You don't have permission to remove resource packs.");
28+
return true;
29+
}
30+
31+
if (args.length < 1) {
32+
sender.sendMessage(ChatColor.RED + "Usage: /removepack <packname>");
33+
return true;
34+
}
35+
36+
String packName = args[0].toLowerCase();
37+
FileConfiguration config = plugin.getConfig();
38+
39+
// Check if it's the server pack
40+
if (packName.equals("server")) {
41+
String serverPack = config.getString("server-pack");
42+
if (serverPack != null && !serverPack.startsWith("http")) {
43+
File packFile = new File(plugin.getDataFolder(), "packs" + File.separator + serverPack);
44+
try {
45+
if (Files.deleteIfExists(packFile.toPath())) {
46+
config.set("server-pack", null);
47+
plugin.saveConfig();
48+
plugin.loadResourcePacks();
49+
sender.sendMessage(ChatColor.GREEN + "Successfully removed server pack: " + serverPack);
50+
} else {
51+
sender.sendMessage(ChatColor.RED + "Server pack file not found: " + serverPack);
52+
}
53+
} catch (Exception e) {
54+
sender.sendMessage(ChatColor.RED + "Failed to remove server pack: " + e.getMessage());
55+
}
56+
} else {
57+
sender.sendMessage(ChatColor.RED + "Server pack is either not set or is a URL.");
58+
}
59+
return true;
60+
}
61+
62+
// Handle regular resource packs
63+
if (config.contains("resource-packs." + packName)) {
64+
String packPath = config.getString("resource-packs." + packName);
65+
if (packPath != null && !packPath.startsWith("http")) {
66+
File packFile = new File(plugin.getDataFolder(), "packs" + File.separator + packPath);
67+
try {
68+
if (Files.deleteIfExists(packFile.toPath())) {
69+
config.set("resource-packs." + packName, null);
70+
plugin.saveConfig();
71+
plugin.loadResourcePacks();
72+
sender.sendMessage(ChatColor.GREEN + "Successfully removed resource pack: " + packPath);
73+
} else {
74+
sender.sendMessage(ChatColor.RED + "Resource pack file not found: " + packPath);
75+
}
76+
} catch (Exception e) {
77+
sender.sendMessage(ChatColor.RED + "Failed to remove resource pack: " + e.getMessage());
78+
}
79+
} else {
80+
sender.sendMessage(ChatColor.RED + "Cannot remove URL-based resource packs using this command.");
81+
}
82+
} else {
83+
sender.sendMessage(ChatColor.RED + "Resource pack '" + packName + "' not found in configuration!");
84+
}
85+
86+
return true;
87+
}
88+
89+
@Override
90+
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
91+
List<String> completions = new ArrayList<>();
92+
93+
if (args.length == 1) {
94+
if (sender.hasPermission("resourceloader.admin")) {
95+
List<String> packs = new ArrayList<>(plugin.getResourcePacks().keySet());
96+
StringUtil.copyPartialMatches(args[0], packs, completions);
97+
}
98+
}
99+
100+
Collections.sort(completions);
101+
return completions;
102+
}
103+
}

0 commit comments

Comments
 (0)