Initially add setwarp

This commit is contained in:
zontreck 2025-04-06 14:10:25 -07:00
parent b31f35e647
commit a244de0169
8 changed files with 189 additions and 8 deletions

View file

@ -15,6 +15,7 @@ import org.bukkit.scheduler.BukkitScheduler;
import dev.zontreck.ase.guis.ChestGUI;
import dev.zontreck.ase.utils.TPACaches;
import dev.zontreck.ase.warps.Warp;
import io.papermc.lib.PaperLib;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
@ -24,6 +25,7 @@ public class AriasServerEssentials extends JavaPlugin implements Listener {
protected static Map<String, SavedData> cachedPlayerData = new HashMap<>();
private static List<TPACaches> cacheTPA = new ArrayList<>();
public static boolean disabled = false;
public Map<String, Warp> warps;
@Override
public void onEnable() {
@ -43,6 +45,54 @@ public class AriasServerEssentials extends JavaPlugin implements Listener {
PluginManager pm = getServer().getPluginManager();
pm.registerEvents(new EventsHandler(), this);
ReadConfiguration();
}
public void ReadConfiguration() {
ReadWarps();
}
/**
* This should be called by, and after player data is saved.
*/
public void SaveConfiguration() {
CommitWarps();
saveConfig();
}
public void ReadWarps() {
if (getConfig().contains("warps")) {
warps = new HashMap<>();
for (String warp : getConfig().getConfigurationSection("warps").getKeys(false)) {
ConfigurationSection sect = getConfig().getConfigurationSection("warps").getConfigurationSection(warp);
Warp w = new Warp();
w.restore(sect);
warps.put(w.warpName, w);
}
} else {
warps = new HashMap<>();
}
}
public void CommitWarps() {
ConfigurationSection warps = getConfig().createSection("warps");
// Begin serialization
for (Map.Entry<String, Warp> entry : this.warps.entrySet()) {
Warp warp = entry.getValue();
ConfigurationSection sect = warps.createSection(warp.warpName);
sect.set("name", warp.warpName);
sect.set("id", warp.owningPlayer.toString());
sect.set("location", warp.location);
sect.set("public", warp.isPublic);
warps.set(warp.warpName, sect);
}
getConfig().set("warps", warps);
}
@Override
@ -51,8 +101,8 @@ public class AriasServerEssentials extends JavaPlugin implements Listener {
disabled = true;
}
public static JavaPlugin getSelf() {
return plugin;
public static AriasServerEssentials getSelf() {
return (AriasServerEssentials) plugin;
}
public static SavedData getPlayerData(String playerID) {

View file

@ -1,17 +1,17 @@
package dev.zontreck.ase;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.bukkit.configuration.ConfigurationSection;
import dev.zontreck.ase.homes.Home;
/**
* PLAYER SAVED DATA
*/
public class SavedData {
public Map<String, Home> homes;
// TODO: Add warps
public SavedData() {
homes = new HashMap<>();
@ -39,7 +39,7 @@ public class SavedData {
// Apply to main configuration
AriasServerEssentials.getSelf().getConfig().getConfigurationSection("playerData").set(playerID, player);
AriasServerEssentials.getSelf().saveConfig();
AriasServerEssentials.getSelf().SaveConfiguration();
}
public static SavedData deserialize(ConfigurationSection section) {

View file

@ -14,6 +14,7 @@ import dev.zontreck.ase.commands.tpa.TPACommand;
import dev.zontreck.ase.commands.tpa.TPAHereCommand;
import dev.zontreck.ase.commands.tpa.TPAcceptCommand;
import dev.zontreck.ase.commands.tpa.TPDenyCommand;
import dev.zontreck.ase.commands.warps.SetWarpCommand;
import io.papermc.paper.command.brigadier.Commands;
import io.papermc.paper.command.brigadier.argument.ArgumentTypes;
import io.papermc.paper.command.brigadier.argument.resolvers.selector.PlayerSelectorArgumentResolver;
@ -107,5 +108,15 @@ public class CommandRegistry {
StringArgumentType.getString(ctx, "message"),
StringArgumentType.getString(ctx, "name")))))
.build());
cmds.register(Commands.literal("setwarp")
.requires(x -> x.getSender().isPermissionSet(SetWarpCommand.PERMISSION)
|| x.getSender().isOp())
.then(Commands.argument("name", StringArgumentType.string())
.executes(ctx -> SetWarpCommand.execute(ctx.getSource(),
StringArgumentType.getString(ctx, "name"))))
.build()
);
}
}

View file

@ -0,0 +1,54 @@
package dev.zontreck.ase.commands.warps;
import org.bukkit.entity.Player;
import com.mojang.brigadier.Command;
import dev.zontreck.ase.AriasServerEssentials;
import dev.zontreck.ase.warps.Warp;
import io.papermc.paper.command.brigadier.CommandSourceStack;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
public class SetWarpCommand {
public static final String PERMISSION = "ase.commands.setwarp";
public static int execute(CommandSourceStack ctx, String warpName) {
Player player = (Player) ctx.getSender();
Warp newWarp = Warp.create(warpName, player);
AriasServerEssentials ASE = AriasServerEssentials.getSelf();
Component permissionDenied = Component.text("[", NamedTextColor.YELLOW)
.append(Component.text("ASE", NamedTextColor.DARK_PURPLE))
.append(Component.text("] ", NamedTextColor.YELLOW)).append(Component.text(
"The warp could not be created, or updated, because the warp already exists and is owned by someone else.",
NamedTextColor.DARK_RED));
Component warpCreatedOrUpdated = Component.text("[", NamedTextColor.YELLOW)
.append(Component.text("ASE", NamedTextColor.DARK_PURPLE))
.append(Component.text("] ", NamedTextColor.YELLOW)).append(Component.text(
"The warp was successfully created or updated!", NamedTextColor.DARK_GREEN));
if (ASE.warps.containsKey(newWarp.warpName)) {
// Check if current player is the owner
if (ASE.warps.get(warpName).owningPlayer == player.getUniqueId()) {
// Allow updating warp position
newWarp = ASE.warps.get(warpName);
newWarp.location = player.getLocation();
ASE.warps.put(warpName, newWarp);
ASE.SaveConfiguration();
player.sendMessage(warpCreatedOrUpdated);
} else {
player.sendMessage(permissionDenied);
}
} else {
ASE.warps.put(warpName, newWarp);
ASE.SaveConfiguration();
player.sendMessage(warpCreatedOrUpdated);
}
return Command.SINGLE_SUCCESS;
}
}

View file

@ -1,10 +1,8 @@
package dev.zontreck.ase.homes;
import org.bukkit.EntityEffect;
import org.bukkit.Location;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
import org.bukkit.potion.PotionEffect;
public class Home {
String homeName;

View file

@ -0,0 +1,55 @@
package dev.zontreck.ase.warps;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.OfflinePlayer;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
public class Warp {
public String warpName;
public UUID owningPlayer;
public Location location;
public boolean isPublic;
/**
* This list is all the players who are allowed to go to this warp.
*
* NOTE: The owning player is ALWAYS allowed to go to the warp, and will never
* appear in the allowed list.
*/
public List<UUID> allowedPlayers = new ArrayList<>();
public OfflinePlayer getOwner() {
return Bukkit.getOfflinePlayer(owningPlayer);
}
public Warp() {
}
public static Warp create(String warpName, Player owner) {
Warp warp = new Warp();
warp.warpName = warpName;
warp.owningPlayer = owner.getUniqueId();
warp.location = owner.getLocation();
warp.isPublic = false; // False by default
return warp;
}
public void restore(ConfigurationSection section) {
warpName = section.getString("name");
owningPlayer = UUID.fromString(section.getString("id"));
location = section.getLocation("location");
isPublic = section.getBoolean("public");
allowedPlayers = new ArrayList<>();
for (String id : section.getStringList("allowed")) {
allowedPlayers.add(UUID.fromString(id));
}
}
}

View file

@ -45,6 +45,9 @@ commands:
broadcastas:
description: Broadcasts a message with a defined name
usage: "- /broadcastas [name] [message] -"
setwarp:
description: Create or update a named warp
usage: "- /setwarp [name] -"
permissions:
ase.commands.*:
description: Allow all commands
@ -100,3 +103,6 @@ permissions:
ase.broadcastas:
description: Allows broadcasting messages with a defined name
default: false
ase.commands.setwarp:
description: Allows creating or updating warps
default: false

View file

@ -2,6 +2,7 @@ main: ${PACKAGE}.${NAME}
name: ${NAME}
version: "${VERSION}"
api-version: "1.21.1"
bootstrapper: dev.zontreck.ase.Bootstrapper
author: AUTHOR
description: DESCRIPTION
commands:
@ -44,6 +45,9 @@ commands:
broadcastas:
description: Broadcasts a message with a defined name
usage: "- /broadcastas [name] [message] -"
setwarp:
description: Create or update a named warp
usage: "- /setwarp [name] -"
permissions:
ase.commands.*:
description: Allow all commands
@ -99,3 +103,6 @@ permissions:
ase.broadcastas:
description: Allows broadcasting messages with a defined name
default: false
ase.commands.setwarp:
description: Allows creating or updating warps
default: false