mirror of
https://github.com/BentoBoxWorld/Warps.git
synced 2025-02-20 06:12:35 +01:00
feat: toggle warp command
This commit is contained in:
parent
ef81a1c2f0
commit
eeead7fb49
@ -17,6 +17,7 @@ import world.bentobox.bentobox.api.flags.clicklisteners.CycleClick;
|
|||||||
import world.bentobox.bentobox.managers.RanksManager;
|
import world.bentobox.bentobox.managers.RanksManager;
|
||||||
import world.bentobox.bentobox.util.Util;
|
import world.bentobox.bentobox.util.Util;
|
||||||
import world.bentobox.level.Level;
|
import world.bentobox.level.Level;
|
||||||
|
import world.bentobox.warps.commands.ToggleWarpCommand;
|
||||||
import world.bentobox.warps.commands.WarpCommand;
|
import world.bentobox.warps.commands.WarpCommand;
|
||||||
import world.bentobox.warps.commands.WarpsCommand;
|
import world.bentobox.warps.commands.WarpsCommand;
|
||||||
import world.bentobox.warps.config.Settings;
|
import world.bentobox.warps.config.Settings;
|
||||||
@ -100,6 +101,7 @@ public class Warp extends Addon {
|
|||||||
// Load the master warp and warps command
|
// Load the master warp and warps command
|
||||||
new WarpCommand(this);
|
new WarpCommand(this);
|
||||||
new WarpsCommand(this);
|
new WarpsCommand(this);
|
||||||
|
new ToggleWarpCommand(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -140,6 +142,7 @@ public class Warp extends Addon {
|
|||||||
|
|
||||||
new WarpCommand(this, gameModeAddon.getPlayerCommand().get());
|
new WarpCommand(this, gameModeAddon.getPlayerCommand().get());
|
||||||
new WarpsCommand(this, gameModeAddon.getPlayerCommand().get());
|
new WarpsCommand(this, gameModeAddon.getPlayerCommand().get());
|
||||||
|
new ToggleWarpCommand(this, gameModeAddon.getPlayerCommand().get());
|
||||||
this.hooked = true;
|
this.hooked = true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -0,0 +1,58 @@
|
|||||||
|
package world.bentobox.warps.commands;
|
||||||
|
|
||||||
|
import org.bukkit.World;
|
||||||
|
import world.bentobox.bentobox.api.commands.CompositeCommand;
|
||||||
|
import world.bentobox.bentobox.api.user.User;
|
||||||
|
import world.bentobox.warps.Warp;
|
||||||
|
import world.bentobox.warps.objects.PlayerWarp;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class ToggleWarpCommand extends CompositeCommand {
|
||||||
|
|
||||||
|
private final Warp addon;
|
||||||
|
|
||||||
|
public ToggleWarpCommand(Warp addon, CompositeCommand bsbIslandCmd) {
|
||||||
|
super(bsbIslandCmd, addon.getSettings().getToggleWarpCommand());
|
||||||
|
this.addon = addon;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ToggleWarpCommand(Warp addon) {
|
||||||
|
super(addon.getSettings().getToggleWarpCommand());
|
||||||
|
this.addon = addon;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setup() {
|
||||||
|
this.setPermission(this.getParent() == null ? Warp.WELCOME_WARP_SIGNS + ".togglewarp" : "island.warp.toggle");
|
||||||
|
this.setOnlyPlayer(true);
|
||||||
|
this.setDescription("togglewarp.help.description");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean execute(User user, String s, List<String> list) {
|
||||||
|
UUID userUUID = user.getUniqueId();
|
||||||
|
World userWorld = user.getWorld();
|
||||||
|
|
||||||
|
// Check if the user has a warp
|
||||||
|
boolean hasWarp = addon.getWarpSignsManager().hasWarp(userWorld, userUUID);
|
||||||
|
|
||||||
|
if (hasWarp) {
|
||||||
|
// If the user has a warp, toggle its visibility
|
||||||
|
PlayerWarp warp = addon.getWarpSignsManager().getPlayerWarp(userWorld, userUUID);
|
||||||
|
// Check extreme case if PlayerWarp is null
|
||||||
|
if (warp == null) {
|
||||||
|
user.sendMessage("togglewarp.error.generic");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
warp.toggle();
|
||||||
|
String message = warp.isEnabled() ? "togglewarp.enabled" : "togglewarp.disabled";
|
||||||
|
user.sendMessage(message);
|
||||||
|
} else {
|
||||||
|
user.sendMessage("togglewarp.error.no-warp");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
@ -50,12 +50,12 @@ public class WarpCommand extends DelayedTeleportCommand {
|
|||||||
user.sendMessage("warps.warpTip", "[text]", addon.getSettings().getWelcomeLine());
|
user.sendMessage("warps.warpTip", "[text]", addon.getSettings().getWelcomeLine());
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
// Attemp to find warp with exact player's name
|
// Attempt to find warp with exact player's name
|
||||||
UUID foundWarp = warpList.stream().filter(u -> getPlayers().getName(u).equalsIgnoreCase(args.get(0))).findFirst().orElse(null);
|
UUID foundWarp = warpList.stream().filter(u -> getPlayers().getName(u).equalsIgnoreCase(args.get(0))).findFirst().orElse(null);
|
||||||
|
|
||||||
if (foundWarp == null) {
|
if (foundWarp == null) {
|
||||||
|
|
||||||
// Atempt to find warp which starts with the given name
|
// Attempt to find warp which starts with the given name
|
||||||
UUID foundAlernativeWarp = warpList.stream().filter(u -> getPlayers().getName(u).toLowerCase().startsWith(args.get(0).toLowerCase())).findFirst().orElse(null);
|
UUID foundAlernativeWarp = warpList.stream().filter(u -> getPlayers().getName(u).toLowerCase().startsWith(args.get(0).toLowerCase())).findFirst().orElse(null);
|
||||||
|
|
||||||
if (foundAlernativeWarp == null) {
|
if (foundAlernativeWarp == null) {
|
||||||
|
@ -61,6 +61,8 @@ public class Settings implements ConfigObject
|
|||||||
String warpCommand = "warp";
|
String warpCommand = "warp";
|
||||||
@ConfigEntry(path = "warps-command")
|
@ConfigEntry(path = "warps-command")
|
||||||
String warpsCommand = "warps";
|
String warpsCommand = "warps";
|
||||||
|
@ConfigEntry(path = "togglewarp-command")
|
||||||
|
String toggleWarpCommand = "togglewarp";
|
||||||
|
|
||||||
// ---------------------------------------------------------------------
|
// ---------------------------------------------------------------------
|
||||||
// Section: Constructor
|
// Section: Constructor
|
||||||
@ -205,6 +207,21 @@ public class Settings implements ConfigObject
|
|||||||
this.warpsCommand = warpsCommand;
|
this.warpsCommand = warpsCommand;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the toggleWarpCommand
|
||||||
|
*/
|
||||||
|
public String getToggleWarpCommand() {
|
||||||
|
return "togglewarp";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param toggleWarpCommand the toggleWarpCommand to set
|
||||||
|
*/
|
||||||
|
public void setToggleWarpCommand(String toggleWarpCommand) {
|
||||||
|
this.toggleWarpCommand = toggleWarpCommand;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the removeExistingWarpsWhenFlagChanges
|
* @return the removeExistingWarpsWhenFlagChanges
|
||||||
*/
|
*/
|
||||||
|
@ -169,6 +169,10 @@ public class WarpSignsManager {
|
|||||||
// Bigger value of time means a more recent login
|
// Bigger value of time means a more recent login
|
||||||
TreeMap<Long, UUID> map = new TreeMap<>();
|
TreeMap<Long, UUID> map = new TreeMap<>();
|
||||||
getWarpMap(world).forEach((uuid, value) -> {
|
getWarpMap(world).forEach((uuid, value) -> {
|
||||||
|
// If the warp is not enabled, skip this iteration
|
||||||
|
if (!value.isEnabled()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
// If never played, will be zero
|
// If never played, will be zero
|
||||||
long lastPlayed = addon.getServer().getOfflinePlayer(uuid).getLastPlayed();
|
long lastPlayed = addon.getServer().getOfflinePlayer(uuid).getLastPlayed();
|
||||||
// This aims to avoid the chance that players logged off at exactly the same time
|
// This aims to avoid the chance that players logged off at exactly the same time
|
||||||
@ -197,7 +201,11 @@ public class WarpSignsManager {
|
|||||||
public Set<UUID> listWarps(@NonNull World world) {
|
public Set<UUID> listWarps(@NonNull World world) {
|
||||||
// Remove any null locations
|
// Remove any null locations
|
||||||
getWarpMap(world).values().removeIf(Objects::isNull);
|
getWarpMap(world).values().removeIf(Objects::isNull);
|
||||||
return getWarpMap(world).entrySet().stream().filter(e -> Util.sameWorld(world, Objects.requireNonNull(e.getValue().getLocation().getWorld()))).map(Map.Entry::getKey).collect(Collectors.toSet());
|
// Remove any warps that have not been toggled on
|
||||||
|
Map<UUID, PlayerWarp> enabledWarps = getWarpMap(world).entrySet().stream()
|
||||||
|
.filter(entry -> entry.getValue().isEnabled())
|
||||||
|
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
|
||||||
|
return enabledWarps.keySet();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -18,3 +18,6 @@ permissions:
|
|||||||
'[gamemode].island.addwarp':
|
'[gamemode].island.addwarp':
|
||||||
description: Player can create a welcome warp sign
|
description: Player can create a welcome warp sign
|
||||||
default: true
|
default: true
|
||||||
|
'[gamemode].island.togglewarp':
|
||||||
|
description: Player can toggle a warp sign
|
||||||
|
default: true
|
||||||
|
@ -33,3 +33,4 @@ allow-in-other-worlds: false
|
|||||||
# Warp and warps commands. You can change them if they clash with other addons or plugins.
|
# Warp and warps commands. You can change them if they clash with other addons or plugins.
|
||||||
warp-command: warp
|
warp-command: warp
|
||||||
warps-command: warps
|
warps-command: warps
|
||||||
|
togglewarp-command: togglewarp
|
||||||
|
@ -60,6 +60,16 @@ warps:
|
|||||||
# Prefix for messages that are send from server.
|
# Prefix for messages that are send from server.
|
||||||
prefix: "&l&6 [BentoBox]: &r"
|
prefix: "&l&6 [BentoBox]: &r"
|
||||||
|
|
||||||
|
togglewarp:
|
||||||
|
help:
|
||||||
|
description: "toggle the warp sign"
|
||||||
|
enabled: "&a Your warp is now visible!"
|
||||||
|
disabled: "&c Your warp is now hidden!"
|
||||||
|
error:
|
||||||
|
no-permission: "&c You do not have permission to do that!"
|
||||||
|
generic: "&c An error occurred while toggling your warp."
|
||||||
|
no-warp: "&c You do not have a warp to toggle!"
|
||||||
|
|
||||||
protection:
|
protection:
|
||||||
flags:
|
flags:
|
||||||
PLACE_WARP:
|
PLACE_WARP:
|
||||||
|
Loading…
Reference in New Issue
Block a user