Files
PoketDimensions/src/main/java/dev/siskel/poketDimensions/commands/pdgamerule.java
T

114 lines
4.9 KiB
Java
Raw Normal View History

2025-05-13 18:35:25 +02:00
package dev.siskel.poketDimensions.commands;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.GameRule;
import org.bukkit.OfflinePlayer;
import org.bukkit.World;
import org.bukkit.WorldCreator;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
import org.bukkit.entity.Player;
public class pdgamerule implements CommandExecutor, TabCompleter {
public pdgamerule() {
}
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!(sender instanceof Player)) {
sender.sendMessage("This command can only be executed by a player.");
return true;
} else {
Player player = (Player)sender;
if (args.length < 2) {
player.sendMessage("Usage: /pdgamerule <playername> <gamerule> [value]");
return true;
} else {
OfflinePlayer targetPlayer = Bukkit.getOfflinePlayer(args[0]);
2025-10-17 23:22:45 +02:00
String worldName = "poketdimensions/pocketdimension-" + targetPlayer.getUniqueId().toString();
2025-05-13 18:35:25 +02:00
File worldFolder = new File(Bukkit.getWorldContainer(), worldName);
if (worldFolder.exists() && worldFolder.isDirectory()) {
World targetWorld = Bukkit.getWorld(worldName);
if (targetWorld == null) {
targetWorld = (new WorldCreator(worldName)).createWorld();
}
GameRule<?> gameRule = GameRule.getByName(args[1]);
if (gameRule == null) {
player.sendMessage("Unknown game rule: " + args[1]);
return true;
} else if (args.length == 2) {
Object currentValue = targetWorld.getGameRuleValue(gameRule);
if (currentValue != null) {
player.sendMessage("Current value of " + args[1] + ": " + currentValue.toString());
} else {
player.sendMessage("Unable to get the value for game rule " + args[1]);
}
return true;
} else {
String inputValue = args[2];
try {
if (gameRule.getType() == Boolean.class) {
if (!inputValue.equalsIgnoreCase("true") && !inputValue.equalsIgnoreCase("false")) {
player.sendMessage("Invalid Value, Valid Values are: true, false");
return true;
}
Boolean value = Boolean.parseBoolean(inputValue);
targetWorld.setGameRule((GameRule<Boolean>) gameRule, value);
} else {
if (gameRule.getType() != Integer.class) {
player.sendMessage("Unsupported game rule type.");
return true;
}
if (!inputValue.matches("[0-9]+")) {
player.sendMessage("Invalid Value, Valid Values are integers only.");
return true;
}
Integer value = Integer.parseInt(inputValue);
targetWorld.setGameRule((GameRule<Integer>) gameRule, value);
}
player.sendMessage("Game rule " + args[1] + " set to " + inputValue);
} catch (NumberFormatException var13) {
player.sendMessage("Invalid value for game rule " + args[1]);
}
return true;
}
} else {
player.sendMessage("That player doesn't have a pocket dimension.");
return true;
}
}
}
}
public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] args) {
List<String> suggestions = new ArrayList();
if (args.length == 2) {
OfflinePlayer targetPlayer = Bukkit.getOfflinePlayer(args[0]);
2025-10-17 23:22:45 +02:00
String worldName = "poketdimensions/pocketdimension-" + targetPlayer.getUniqueId().toString();
2025-05-13 18:35:25 +02:00
World targetWorld = Bukkit.getWorld(worldName);
if (targetWorld != null) {
for(String gameRule : targetWorld.getGameRules()) {
if (gameRule.toLowerCase().startsWith(args[1].toLowerCase())) {
suggestions.add(gameRule);
}
}
}
}
return suggestions;
}
}