summaryrefslogtreewikicommitdiff
path: root/src/main/java/net/tylermurphy/hideAndSeek/util
diff options
context:
space:
mode:
authortylermurphy534 <tylermurphy534@gmail.com>2023-02-05 19:02:59 +0000
committertylermurphy534 <tylermurphy534@gmail.com>2023-02-05 19:02:59 +0000
commit8fdd3461c14a70dd69b34ba7bb44130e3f3a8ef0 (patch)
treeb82610c3a320bdcb8dd45197f7db309d7a3a7aa3 /src/main/java/net/tylermurphy/hideAndSeek/util
parentUpdate 'README.md' (diff)
parent1.7.0 rc3 (diff)
downloadkenshinshideandseek-8fdd3461c14a70dd69b34ba7bb44130e3f3a8ef0.tar.gz
kenshinshideandseek-8fdd3461c14a70dd69b34ba7bb44130e3f3a8ef0.tar.bz2
kenshinshideandseek-8fdd3461c14a70dd69b34ba7bb44130e3f3a8ef0.zip
Merge pull request '1.7.0 - Multi Map Support' (#4) from dev into main
Reviewed-on: https://g.tylerm.dev/tylermurphy534/KenshinsHideAndSeek/pulls/4
Diffstat (limited to 'src/main/java/net/tylermurphy/hideAndSeek/util')
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/util/CommandHandler.java99
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/util/Location.java145
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/util/Pair.java21
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/util/TabCompleter.java59
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/util/Tuple.java27
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/util/packet/AbstractPacket.java4
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/util/packet/EntityMetadataPacket.java70
7 files changed, 264 insertions, 161 deletions
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/CommandHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/util/CommandHandler.java
deleted file mode 100644
index 2dda402..0000000
--- a/src/main/java/net/tylermurphy/hideAndSeek/util/CommandHandler.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * This file is part of Kenshins Hide and Seek
- *
- * Copyright (c) 2021 Tyler Murphy.
- *
- * Kenshins Hide and Seek free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * he Free Software Foundation version 3.
- *
- * Kenshins Hide and Seek is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-package net.tylermurphy.hideAndSeek.util;
-
-import net.tylermurphy.hideAndSeek.command.*;
-import net.tylermurphy.hideAndSeek.command.location.SetExitLocation;
-import net.tylermurphy.hideAndSeek.command.location.SetLobbyLocation;
-import net.tylermurphy.hideAndSeek.command.location.SetSeekerLobbyLocation;
-import net.tylermurphy.hideAndSeek.command.location.SetSpawnLocation;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import java.util.Arrays;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import static net.tylermurphy.hideAndSeek.configuration.Config.errorPrefix;
-import static net.tylermurphy.hideAndSeek.configuration.Config.permissionsRequired;
-import static net.tylermurphy.hideAndSeek.configuration.Localization.LOCAL;
-import static net.tylermurphy.hideAndSeek.configuration.Localization.message;
-
-public class CommandHandler {
-
- public static final Map<String,ICommand> COMMAND_REGISTER = new LinkedHashMap<>();
-
- private static void registerCommand(ICommand command) {
- if (!COMMAND_REGISTER.containsKey(command.getLabel())) {
- COMMAND_REGISTER.put(command.getLabel().toLowerCase(), command);
- }
- }
-
- public static void registerCommands() {
- registerCommand(new About());
- registerCommand(new Help());
- registerCommand(new Setup());
- registerCommand(new Start());
- registerCommand(new Stop());
- registerCommand(new SetSpawnLocation());
- registerCommand(new SetLobbyLocation());
- registerCommand(new SetSeekerLobbyLocation());
- registerCommand(new SetExitLocation());
- registerCommand(new SetBorder());
- registerCommand(new Reload());
- registerCommand(new SaveMap());
- registerCommand(new SetBounds());
- registerCommand(new Join());
- registerCommand(new Leave());
- registerCommand(new Top());
- registerCommand(new Wins());
- registerCommand(new Debug());
- }
-
- public static boolean handleCommand(CommandSender sender, String[] args) {
- if (!(sender instanceof Player)) {
- sender.sendMessage(errorPrefix + message("COMMAND_PLAYER_ONLY"));
- return true;
- }
- Player player = (Player) sender;
- if (args.length < 1 || !COMMAND_REGISTER.containsKey(args[0].toLowerCase()) ) {
- if (permissionsRequired && !sender.hasPermission("hideandseek.about")) {
- sender.sendMessage(errorPrefix + LOCAL.get(""));
- } else {
- COMMAND_REGISTER.get("about").execute(player, null);
- }
- } else {
- if (!args[0].equalsIgnoreCase("about") && !args[0].equalsIgnoreCase("help") && SaveMap.runningBackup) {
- sender.sendMessage(errorPrefix + message("MAPSAVE_INPROGRESS"));
- } else if (permissionsRequired && !sender.hasPermission("hideandseek."+args[0].toLowerCase())) {
- sender.sendMessage(errorPrefix + message("COMMAND_NOT_ALLOWED"));
- } else {
- try {
- COMMAND_REGISTER.get(args[0].toLowerCase()).execute(player,Arrays.copyOfRange(args, 1, args.length));
- } catch (Exception e) {
- sender.sendMessage(errorPrefix + "An error has occurred.");
- e.printStackTrace();
- }
- }
- }
- return true;
- }
-
-}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java b/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java
new file mode 100644
index 0000000..606b64b
--- /dev/null
+++ b/src/main/java/net/tylermurphy/hideAndSeek/util/Location.java
@@ -0,0 +1,145 @@
+package net.tylermurphy.hideAndSeek.util;
+
+import net.tylermurphy.hideAndSeek.Main;
+import net.tylermurphy.hideAndSeek.world.VoidGenerator;
+import org.bukkit.Bukkit;
+import org.bukkit.World;
+import org.bukkit.WorldCreator;
+import org.bukkit.WorldType;
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
+
+import java.io.File;
+
+public class Location {
+
+ private final String world;
+ private final double x;
+ private final double y;
+ private final double z;
+
+ public static Location getDefault() {
+ return new Location(
+ "",
+ 0.0,
+ 0.0,
+ 0.0
+ );
+ }
+
+ public static Location from(Player player) {
+ org.bukkit.Location location = player.getLocation();
+ return new Location(
+ player.getWorld().getName(),
+ location.getX(),
+ location.getY(),
+ location.getZ()
+ );
+ }
+
+ public Location(@NotNull String world, double x, double y, double z) {
+ this.world = world;
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ }
+
+ public Location(@NotNull String world, @NotNull org.bukkit.Location location) {
+ this.world = world;
+ this.x = location.getX();
+ this.y = location.getY();
+ this.z = location.getZ();
+ }
+
+ public World load(WorldType type, World.Environment environment) {
+ boolean mapSave = world.startsWith("hs_");
+ World bukkitWorld = Bukkit.getWorld(world);
+ if(bukkitWorld != null) return bukkitWorld;
+ WorldCreator creator = new WorldCreator(world);
+ if(type != null) {
+ creator.type(type);
+ }
+ if(environment != null) {
+ creator.environment(environment);
+ }
+ if(mapSave) {
+ creator.generator(new VoidGenerator());
+ }
+ Bukkit.getServer().createWorld(creator).setAutoSave(!mapSave);
+ return Bukkit.getWorld(world);
+ }
+
+ public World load() {
+ if(!exists()) return null;
+ if(!Main.getInstance().isLoaded()) return null;
+ return load(null, null);
+ }
+
+ private org.bukkit.Location toBukkit() {
+ return new org.bukkit.Location(
+ Bukkit.getWorld(world),
+ x,
+ y,
+ z
+ );
+ }
+
+ public void teleport(Player player) {
+ if(!exists()) return;
+ if(load() == null) return;
+ player.teleport(toBukkit());
+ }
+
+ public Location changeWorld(String world) {
+ return new Location(
+ world,
+ x,
+ y,
+ z
+ );
+ }
+
+ public String getWorld() {
+ return world;
+ }
+
+ public double getX() {
+ return x;
+ }
+
+ public double getY() {
+ return y;
+ }
+
+ public double getZ() {
+ return z;
+ }
+
+ public int getBlockX() {
+ return (int)x;
+ }
+
+ public int getBlockY() {
+ return (int)y;
+ }
+
+ public int getBlockZ() {
+ return (int)z;
+ }
+
+ public boolean exists() {
+ if(world.equals("")) return false;
+ String path = Main.getInstance().getWorldContainer()+File.separator+world;
+ File destination = new File(path);
+ return destination.isDirectory();
+ }
+
+ public boolean isNotSetup() {
+ return getBlockX() == 0 && getBlockY() == 0 && getBlockZ() == 0;
+ }
+
+ public boolean isNotInBounds(int xmin, int xmax, int zmin, int zmax) {
+ return getBlockX() < xmin || getBlockX() > xmax || getBlockZ() < zmin || getBlockZ() > zmax;
+ }
+
+}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/Pair.java b/src/main/java/net/tylermurphy/hideAndSeek/util/Pair.java
new file mode 100644
index 0000000..0aad195
--- /dev/null
+++ b/src/main/java/net/tylermurphy/hideAndSeek/util/Pair.java
@@ -0,0 +1,21 @@
+package net.tylermurphy.hideAndSeek.util;
+
+public class Pair<L, R> {
+
+ private final L left;
+ private final R right;
+
+ public Pair(L left, R right) {
+ this.left = left;
+ this.right = right;
+ }
+
+ public L getLeft() {
+ return left;
+ }
+
+ public R getRight() {
+ return right;
+ }
+
+}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/TabCompleter.java b/src/main/java/net/tylermurphy/hideAndSeek/util/TabCompleter.java
deleted file mode 100644
index 2605e7b..0000000
--- a/src/main/java/net/tylermurphy/hideAndSeek/util/TabCompleter.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * This file is part of Kenshins Hide and Seek
- *
- * Copyright (c) 2021 Tyler Murphy.
- *
- * Kenshins Hide and Seek free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * he Free Software Foundation version 3.
- *
- * Kenshins Hide and Seek is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-package net.tylermurphy.hideAndSeek.util;
-
-import org.bukkit.command.CommandSender;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-import java.util.stream.Collectors;
-
-public class TabCompleter {
-
- public static List<String> handleTabComplete(CommandSender sender, String[] args) {
- if (args.length == 1) {
- return new ArrayList<>(CommandHandler.COMMAND_REGISTER.keySet())
- .stream()
- .filter(handle -> sender.hasPermission("hideandseek."+handle.toLowerCase()) && handle.toLowerCase().startsWith(args[0].toLowerCase(Locale.ROOT)))
- .collect(Collectors.toList());
- } else if (args.length > 1) {
- if (!CommandHandler.COMMAND_REGISTER.containsKey(args[0].toLowerCase())) {
- return null;
- } else {
- String[] usage = CommandHandler.COMMAND_REGISTER.get(args[0].toLowerCase()).getUsage().split(" ");
- if (args.length - 2 < usage.length) {
- String parameter = usage[args.length-2];
- if (parameter.equals("<player>")) {
- return null;
- } else {
- List<String> temp = new ArrayList<>();
- temp.add(parameter.replace("<", "").replace(">", ""));
- return temp;
- }
- } else {
- return null;
- }
- }
- }
- return null;
- }
-
-}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/Tuple.java b/src/main/java/net/tylermurphy/hideAndSeek/util/Tuple.java
new file mode 100644
index 0000000..5a40ff8
--- /dev/null
+++ b/src/main/java/net/tylermurphy/hideAndSeek/util/Tuple.java
@@ -0,0 +1,27 @@
+package net.tylermurphy.hideAndSeek.util;
+
+public class Tuple<L, C, R> {
+
+ private final L left;
+ private final C center;
+ private final R right;
+
+ public Tuple(L left, C center, R right) {
+ this.left = left;
+ this.center = center;
+ this.right = right;
+ }
+
+ public L getLeft() {
+ return left;
+ }
+
+ public C getCenter() {
+ return center;
+ }
+
+ public R getRight() {
+ return right;
+ }
+
+}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/packet/AbstractPacket.java b/src/main/java/net/tylermurphy/hideAndSeek/util/packet/AbstractPacket.java
index 9293beb..4e3fc3b 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/util/packet/AbstractPacket.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/util/packet/AbstractPacket.java
@@ -23,9 +23,7 @@ public class AbstractPacket {
}
public void send(Player player){
- try {
- protocolManager.sendServerPacket(player, packet);
- } catch (InvocationTargetException ignored) {}
+ protocolManager.sendServerPacket(player, packet);
}
}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/packet/EntityMetadataPacket.java b/src/main/java/net/tylermurphy/hideAndSeek/util/packet/EntityMetadataPacket.java
new file mode 100644
index 0000000..d77a227
--- /dev/null
+++ b/src/main/java/net/tylermurphy/hideAndSeek/util/packet/EntityMetadataPacket.java
@@ -0,0 +1,70 @@
+package net.tylermurphy.hideAndSeek.util.packet;
+
+import com.comphenix.protocol.PacketType;
+import com.comphenix.protocol.wrappers.WrappedDataValue;
+import com.comphenix.protocol.wrappers.WrappedDataWatcher;
+import com.comphenix.protocol.wrappers.WrappedWatchableObject;
+import org.bukkit.entity.Entity;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class EntityMetadataPacket extends AbstractPacket {
+
+ private final WrappedDataWatcher watcher;
+ private final WrappedDataWatcher.Serializer serializer;
+
+ public EntityMetadataPacket(){
+ super(PacketType.Play.Server.ENTITY_METADATA);
+ watcher = new WrappedDataWatcher();
+ serializer = WrappedDataWatcher.Registry.get(Byte.class);
+ }
+
+ public void setEntity(@NotNull Entity target){
+ super.packet.getIntegers().write(0, target.getEntityId());
+ watcher.setEntity(target);
+ }
+
+ public void setGlow(boolean glowing){
+ if (glowing) {
+ watcher.setObject(0, serializer, (byte) (0x40));
+ } else {
+ watcher.setObject(0, serializer, (byte) (0x0));
+ }
+ }
+
+ public void writeMetadata() {
+
+ // thank you to
+ // https://www.spigotmc.org/threads/unable-to-modify-entity-metadata-packet-using-protocollib-1-19-3.582442/
+
+ try {
+ // 1.19.3 And Up
+ Class.forName("com.comphenix.protocol.wrappers.WrappedDataValue");
+
+ final List<WrappedDataValue> wrappedDataValueList = new ArrayList<>();
+
+ for(final WrappedWatchableObject entry : watcher.getWatchableObjects()) {
+ if(entry == null) continue;
+
+ final WrappedDataWatcher.WrappedDataWatcherObject watcherObject = entry.getWatcherObject();
+ wrappedDataValueList.add(
+ new WrappedDataValue(
+ watcherObject.getIndex(),
+ watcherObject.getSerializer(),
+ entry.getRawValue()
+ )
+ );
+ }
+
+ packet.getDataValueCollectionModifier().write(0, wrappedDataValueList);
+
+ } catch (ClassCastException | ClassNotFoundException ignored) {
+ // 1.9 to 1.19.2 And Up
+ packet.getWatchableCollectionModifier().write(0, watcher.getWatchableObjects());
+ }
+
+ }
+
+} \ No newline at end of file