Skip to content

Commit

Permalink
Added /warp
Browse files Browse the repository at this point in the history
  • Loading branch information
Calcilore committed Mar 27, 2024
1 parent 8c1bc33 commit 3bd7ca2
Show file tree
Hide file tree
Showing 7 changed files with 423 additions and 8 deletions.
23 changes: 22 additions & 1 deletion src/main/java/net/serble/estools/CMD.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.attribute.Attribute;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
Expand Down Expand Up @@ -93,6 +94,14 @@ public static int tryParseInt(String obj, int defaultValue) {
return defaultValue;
}
}

public static double tryParseDouble(String obj, double defaultValue) {
try {
return Double.parseDouble(obj);
} catch (NumberFormatException e) {
return defaultValue;
}
}

public static boolean checkPerms(CommandSender sender, String perm) {
if (!sender.hasPermission("estools." + perm)) {
Expand All @@ -103,7 +112,7 @@ public static boolean checkPerms(CommandSender sender, String perm) {
}

public static String genUsage(String use) {
return "&r&c&lUsage: &r&c" + use;
return "&r&c&lUsage: &r&c" + use.replace("\n", "\n ");
}

public static Player getPlayer(CommandSender sender, String name) {
Expand Down Expand Up @@ -147,6 +156,18 @@ public static String argsToString(String[] args, int skipAmount) {
return outp.toString();
}

public static double parseCoorinate(String coord, double playerLoc) {
if (coord.startsWith("~")) {
return tryParseDouble(coord.substring(1), 0) + playerLoc;
}

return tryParseDouble(coord, 0);
}

public static String locationToString(Location loc) {
return String.format("%d %d %d", Math.round(loc.getX()), Math.round(loc.getY()), Math.round(loc.getZ()));
}

public static ItemStack getMainHand(Player p) {
if (Main.version > 8) {
return p.getInventory().getItemInMainHand();
Expand Down
80 changes: 80 additions & 0 deletions src/main/java/net/serble/estools/Commands/Warps/Warp.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package net.serble.estools.Commands.Warps;

import net.serble.estools.CMD;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

import java.util.ArrayList;
import java.util.List;

public class Warp extends CMD {
private static final String usage = genUsage("/warp <warp>");

@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (isNotPlayer(sender)) {
return false;
}

Player p = (Player)sender;

if (args.length == 0) {
s(p, usage);
return false;
}

String warpName = args[0].toLowerCase();
WarpLocation warp = WarpManager.warps.get(warpName);

if (args.length != 1) {
s(p, usage);
return false;
}

if (!canUseWarp(p, warp)) {
s(p, "&cWarp &6%s&c does not exist.", warpName);
return false;
}

p.teleport(warp.location);
s(p, "&aTeleported to warp &6%s&a.", warpName);
return true;
}

private static boolean canUseWarp(Player p, WarpLocation warp) {
if (warp == null) {
return false;
}

boolean hasManage = p.hasPermission("estools.warps.manage");
boolean hasDefault = p.hasPermission("estools.warps.default");
String warpPermission = "estools.warp." + warp.name;

// you can only use global warps if you are in the same world, or have manage permission
if (!warp.global && !hasManage && !p.getWorld().equals(warp.location.getWorld())) {
return false;
}

// If you don't have a warp specific permission, you need the default permission
return (!p.isPermissionSet(warpPermission) && hasDefault) ||
(p.isPermissionSet(warpPermission) && p.hasPermission(warpPermission));
}

@Override
public List<String> tabComplete(CommandSender sender, String[] args, String lArg) {
List<String> tab = new ArrayList<>();

Player p = (Player)sender;

if (args.length == 1) {
for (WarpLocation warp : WarpManager.warps.values()) {
if (canUseWarp(p, warp)) {
tab.add(warp.name);
}
}
}

return tab;
}
}
37 changes: 37 additions & 0 deletions src/main/java/net/serble/estools/Commands/Warps/WarpLocation.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package net.serble.estools.Commands.Warps;

import org.bukkit.Location;
import org.bukkit.configuration.serialization.ConfigurationSerializable;
import org.bukkit.configuration.serialization.SerializableAs;

import java.util.Map;
import java.util.HashMap;

@SerializableAs("WarpLocation")
public class WarpLocation implements ConfigurationSerializable {
public Location location;
public String name;
public boolean global;

@Override
public Map<String, Object> serialize() {
Map<String, Object> result = new HashMap<>();

result.put("location", location);
result.put("name", name);
result.put("global", global);

return result;
}

@SuppressWarnings("unused")
public static WarpLocation deserialize(Map<String, Object> args) {
WarpLocation warp = new WarpLocation();

warp.location = (Location)args.get("location");
warp.name = (String)args.get("name");
warp.global = (boolean)args.get("global");

return warp;
}
}
Loading

0 comments on commit 3bd7ca2

Please sign in to comment.