Moved features to separate projects
This commit is contained in:
230
Borders/src/cz/marwland/mc/features/Borders.java
Normal file
230
Borders/src/cz/marwland/mc/features/Borders.java
Normal file
@ -0,0 +1,230 @@
|
||||
package cz.marwland.mc.features;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.defaults.BukkitCommand;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.util.StringUtil;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import cz.marwland.mc.core.config.ConfigEntry;
|
||||
import cz.marwland.mc.core.config.EntryManager;
|
||||
import cz.marwland.mc.core.config.IValueExecuter;
|
||||
import cz.marwland.mc.core.config.ValueValidator;
|
||||
import cz.marwland.mc.core.features.Feature;
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
|
||||
public class Borders extends Feature {
|
||||
|
||||
FileConfiguration cfg;
|
||||
EntryManager emgr = new EntryManager();
|
||||
|
||||
public Borders() {
|
||||
super();
|
||||
// String name, String description, String usageMessage, List<String> aliases)
|
||||
this.addCommand(new BukkitCommand(
|
||||
"worldborder",
|
||||
"Modify the world's borders",
|
||||
"/border [world] (key) (value)",
|
||||
Arrays.asList() ) {
|
||||
@Override
|
||||
public boolean execute(CommandSender sender, String commandLabel, String[] args) {
|
||||
if (!permissionMissingCheck(sender, this.getPermission()))
|
||||
return false;
|
||||
|
||||
if (args.length < 2) {
|
||||
sender.sendMessage(
|
||||
ChatColor.YELLOW + "Format: " +
|
||||
ChatColor.GRAY + ChatColor.ITALIC + "/" + commandLabel +
|
||||
ChatColor.YELLOW + ChatColor.GRAY + " (world) (key) [value]");
|
||||
return true;
|
||||
}
|
||||
World w = Bukkit.getServer().getWorld(args[0]);
|
||||
if (w == null) {
|
||||
sender.sendMessage(ChatColor.RED + "Invalid world!");
|
||||
return true;
|
||||
}
|
||||
|
||||
ConfigEntry<?> entry = emgr.getEntry(args[1]);
|
||||
if (entry == null) {
|
||||
sender.sendMessage(
|
||||
ChatColor.RED + "Invalid key " +
|
||||
ChatColor.YELLOW + args[1] +
|
||||
ChatColor.RED + "! Available: " +
|
||||
ChatColor.GRAY + String.join(", ", emgr.getKeys()));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (args.length == 2) { // get
|
||||
if (!cfg.contains(w.getName())) {
|
||||
sender.sendMessage(
|
||||
ChatColor.RED + "No border specified for " +
|
||||
ChatColor.YELLOW + args[0] +
|
||||
ChatColor.RED + "!");
|
||||
return true;
|
||||
}
|
||||
Object val = entry.getFrom(cfg, w.getName());
|
||||
|
||||
sender.sendMessage(
|
||||
ChatColor.YELLOW + args[1] +
|
||||
ChatColor.GRAY + " @ " +
|
||||
ChatColor.AQUA + w.getName() +
|
||||
ChatColor.GRAY + ": " + (val == null ? ChatColor.ITALIC + "[" + entry.getDefaultValue() + "]": val));
|
||||
} else { // set
|
||||
String oldval = "" + entry.getFrom(cfg, w.getName());
|
||||
String newval = String.join(" ", args).substring(args[0].length() + args[1].length() + 2);
|
||||
if (entry.setIn(cfg, w.getName(), newval)) {
|
||||
plugin.getConfigManager().save();
|
||||
cfg = getConfig("borders.yml");
|
||||
loadWorlds();
|
||||
sender.sendMessage(
|
||||
ChatColor.GREEN + "Changed " +
|
||||
ChatColor.YELLOW + entry.getSubpath() +
|
||||
ChatColor.GRAY + " @ " +
|
||||
ChatColor.AQUA + w.getName() +
|
||||
ChatColor.GRAY + ": " + oldval +
|
||||
ChatColor.GOLD + " => " +
|
||||
ChatColor.GRAY + newval);
|
||||
} else {
|
||||
sender.sendMessage(
|
||||
ChatColor.RED + "Invalid value for " +
|
||||
ChatColor.YELLOW + args[1] +
|
||||
ChatColor.RED + ": " +
|
||||
ChatColor.GRAY + newval);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException {
|
||||
ArrayList<String> hints = new ArrayList<String>();
|
||||
if (!sender.hasPermission(this.getPermission()) || args.length < 1)
|
||||
return hints;
|
||||
|
||||
String lastWord = args[args.length - 1];
|
||||
if (args.length == 1) {
|
||||
for (World w : Bukkit.getServer().getWorlds()) {
|
||||
if (StringUtil.startsWithIgnoreCase(w.getName(), lastWord))
|
||||
hints.add(w.getName());
|
||||
}
|
||||
} else if(args.length == 2) {
|
||||
for (String key : emgr.getKeys()) {
|
||||
if (StringUtil.startsWithIgnoreCase(key, lastWord))
|
||||
hints.add(key);
|
||||
}
|
||||
}
|
||||
|
||||
Collections.sort(hints, String.CASE_INSENSITIVE_ORDER);
|
||||
return hints;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPermission() {
|
||||
return getPermissionPath() + "." + this.getName().toLowerCase();
|
||||
}
|
||||
});
|
||||
emgr.addEntry(new ConfigEntry<>("center", ValueValidator.VECTOR, new Vector(0, 0, 0)));
|
||||
// emgr.addEntry(new ConfigEntry<>("size", ValueValidator.DOUBLE));
|
||||
emgr.addEntry(new ConfigEntry<>("radius", ValueValidator.INTEGER, 60000000));
|
||||
emgr.addEntry(new ConfigEntry<>("warningdist", ValueValidator.INTEGER, 5));
|
||||
emgr.addEntry(new ConfigEntry<>("warningtime", ValueValidator.INTEGER, 15));
|
||||
emgr.addEntry(new ConfigEntry<>("damage", ValueValidator.DOUBLE, 0.2d));
|
||||
emgr.addEntry(new ConfigEntry<>("buffer", ValueValidator.DOUBLE, 5d));
|
||||
this.registerConfig("borders.yml");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
super.onEnable();
|
||||
cfg = getConfig("borders.yml");
|
||||
this.loadWorlds();
|
||||
}
|
||||
|
||||
public void loadWorlds() {
|
||||
for(World w : Bukkit.getServer().getWorlds()) {
|
||||
final String wname = w.getName();
|
||||
if (!cfg.contains(wname)) {
|
||||
w.getWorldBorder().reset();
|
||||
continue;
|
||||
}
|
||||
|
||||
emgr.getEntry("center").doStuff(cfg, wname, new IValueExecuter<Object>() {
|
||||
public void doStuff(Object val) {
|
||||
Vector v = (Vector) val;
|
||||
w.getWorldBorder().setCenter(v.getX(), v.getZ());
|
||||
}
|
||||
});
|
||||
emgr.getEntry("radius").doStuff(cfg, wname, new IValueExecuter<Object>() {
|
||||
public void doStuff(Object val) {
|
||||
w.getWorldBorder().setSize((int) val);
|
||||
}
|
||||
});
|
||||
emgr.getEntry("warningdist").doStuff(cfg, wname, new IValueExecuter<Object>() {
|
||||
public void doStuff(Object val) {
|
||||
w.getWorldBorder().setWarningDistance((int) val);
|
||||
}
|
||||
});
|
||||
emgr.getEntry("warningtime").doStuff(cfg, wname, new IValueExecuter<Object>() {
|
||||
public void doStuff(Object val) {
|
||||
w.getWorldBorder().setWarningTime((int) val);
|
||||
}
|
||||
});
|
||||
emgr.getEntry("damage").doStuff(cfg, wname, new IValueExecuter<Object>() {
|
||||
public void doStuff(Object val) {
|
||||
w.getWorldBorder().setDamageAmount((double) val);
|
||||
}
|
||||
});
|
||||
emgr.getEntry("buffer").doStuff(cfg, wname, new IValueExecuter<Object>() {
|
||||
public void doStuff(Object val) {
|
||||
w.getWorldBorder().setDamageBuffer((double) val);
|
||||
}
|
||||
});
|
||||
/*
|
||||
Region r = new Region();
|
||||
if (cfg.contains(wname + ".center") && cfg.contains(wname + ".size")) {
|
||||
plugin.getLogger().info("should i?");
|
||||
String centerstr = cfg.getString(wname + ".center");
|
||||
Vector center = LocationUtil.deserializeVector(centerstr);
|
||||
String sizestr = cfg.getString(wname + ".size");
|
||||
if (sizestr.indexOf(' ') == -1) {
|
||||
w.getWorldBorder().setCenter(center.getX(), center.getZ());
|
||||
w.getWorldBorder().setSize(cfg.getDouble(wname + ".size", 0));
|
||||
plugin.getLogger().info("set the ghetto way");
|
||||
} else {
|
||||
Vector size = LocationUtil.deserializeVector(sizestr);
|
||||
if (center == null) {
|
||||
plugin.getLogger().config("[Borders] Invalid center coordinates for " + wname + ": " + centerstr);
|
||||
} else if (size == null) {
|
||||
plugin.getLogger().config("[Borders] Invalid size for " + wname + ": " + sizestr);
|
||||
} else {
|
||||
size.divide(new Vector(2f, 2f, 2f));
|
||||
r.setOne(center.add(size));
|
||||
r.setTwo(center.subtract(size));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (cfg.contains(wname + ".points")) {
|
||||
List<String> points = cfg.getStringList(wname + ".points");
|
||||
for (String pstr : points) {
|
||||
Vector p = LocationUtil.deserializeVector(pstr);
|
||||
if (p == null)
|
||||
continue;
|
||||
r.ensureInside(p);
|
||||
}
|
||||
}
|
||||
if (r.isValid()) {
|
||||
Vector c = r.getCenter();
|
||||
w.getWorldBorder().setCenter(c.getX(), c.getZ());
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user