From be8bb92beb37fa0f3040934d5ef7cb3a45f3bda3 Mon Sep 17 00:00:00 2001 From: pop4959 Date: Fri, 25 Jun 2021 00:27:59 -0700 Subject: [PATCH 1/8] Random teleport improvements --- .../com/earth2me/essentials/Essentials.java | 11 +- .../essentials/EssentialsUpgrade.java | 7 +- .../com/earth2me/essentials/ISettings.java | 4 + .../earth2me/essentials/RandomTeleport.java | 127 ++++++++++++------ .../com/earth2me/essentials/Settings.java | 10 ++ .../essentials/commands/Commandsettpr.java | 25 ++-- .../essentials/commands/Commandtpr.java | 66 +++++++-- .../essentials/signs/SignRandomTeleport.java | 39 ++++++ .../com/earth2me/essentials/signs/Signs.java | 3 +- .../essentials/utils/VersionUtil.java | 1 + .../api/events/UserRandomTeleportEvent.java | 40 ++++++ Essentials/src/main/resources/config.yml | 8 +- Essentials/src/main/resources/tpr.yml | 2 +- .../spawn/EssentialsSpawnPlayerListener.java | 9 ++ 14 files changed, 279 insertions(+), 73 deletions(-) create mode 100644 Essentials/src/main/java/com/earth2me/essentials/signs/SignRandomTeleport.java diff --git a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java index 6215883ec5a..06a40e77132 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java @@ -283,6 +283,10 @@ public void onEnable() { upgrade.convertKits(); execTimer.mark("Kits"); + randomTeleport = new RandomTeleport(this); + confList.add(randomTeleport); + execTimer.mark("Init(RandomTeleport)"); + upgrade.afterSettings(); execTimer.mark("Upgrade2"); @@ -298,13 +302,6 @@ public void onEnable() { confList.add(itemDb); execTimer.mark("Init(ItemDB)"); - randomTeleport = new RandomTeleport(this); - if (randomTeleport.getPreCache()) { - randomTeleport.cacheRandomLocations(randomTeleport.getCenter(), randomTeleport.getMinRange(), randomTeleport.getMaxRange()); - } - confList.add(randomTeleport); - execTimer.mark("Init(RandomTeleport)"); - customItemResolver = new CustomItemResolver(this); try { itemDb.registerResolver(this, "custom_items", customItemResolver); diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsUpgrade.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsUpgrade.java index 16fe6e9f816..bfd29bb5f52 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsUpgrade.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsUpgrade.java @@ -146,6 +146,10 @@ public static void uuidFileConvert(final IEssentials ess, final Boolean ignoreUF ess.getLogger().info("To rerun the conversion type /essentials uuidconvert"); } + public void updateRandomTeleport() { + ess.getRandomTeleport().updateConfig(); + } + public void convertStupidCamelCaseUserdataKeys() { if (doneFile.getBoolean("updateUsersLegacyPathNames", false)) { return; @@ -783,7 +787,7 @@ private void repairUserMap() { if (index % 1000 == 0) { ess.getLogger().info("Reading: " + format.format((100d * (double) index) / files.length) - + "%"); + + "%"); } } catch (final IOException e) { ess.getLogger().log(Level.SEVERE, "Error while reading file: ", e); @@ -820,5 +824,6 @@ public void afterSettings() { repairUserMap(); convertIgnoreList(); convertStupidCamelCaseUserdataKeys(); + updateRandomTeleport(); } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java index 017af75fb90..c90c9132dbe 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java @@ -92,6 +92,10 @@ public interface ISettings extends IConf { boolean getRespawnAtHome(); + boolean isRandomRespawn(); + + String getRandomRespawnLocation(); + boolean isRespawnAtAnchor(); Set getMultipleHomes(); diff --git a/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java b/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java index f48eafd3f95..20b200ad6f8 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java +++ b/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java @@ -1,5 +1,6 @@ package com.earth2me.essentials; +import com.earth2me.essentials.config.ConfigurateUtil; import com.earth2me.essentials.config.EssentialsConfiguration; import com.earth2me.essentials.config.entities.LazyLocation; import com.earth2me.essentials.utils.LocationUtil; @@ -11,8 +12,11 @@ import org.bukkit.block.Biome; import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Queue; import java.util.Random; import java.util.Set; @@ -24,12 +28,12 @@ public class RandomTeleport implements IConf { private static final int HIGHEST_BLOCK_Y_OFFSET = VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_15_R01) ? 1 : 0; private final IEssentials essentials; private final EssentialsConfiguration config; - private final ConcurrentLinkedQueue cachedLocations = new ConcurrentLinkedQueue<>(); + private final Map> cachedLocations = new HashMap<>(); public RandomTeleport(final IEssentials essentials) { this.essentials = essentials; config = new EssentialsConfiguration(new File(essentials.getDataFolder(), "tpr.yml"), "/tpr.yml", - "Configuration for the random teleport command.\nSome settings may be defaulted, and can be changed via the /settpr command in-game."); + "Configuration for the random teleport command.\nUse the /settpr command in-game to set random teleport locations."); reloadConfig(); } @@ -39,43 +43,72 @@ public void reloadConfig() { cachedLocations.clear(); } - public Location getCenter() { + public void updateConfig() { try { final LazyLocation center = config.getLocation("center"); + if (center != null && center.location() != null) { + final double minRange = config.getDouble("min-range", Double.MIN_VALUE); + final double maxRange = config.getDouble("max-range", Double.MIN_VALUE); + for (World world : essentials.getServer().getWorlds()) { + setCenter(world.getName(), center.location()); + if (minRange != Double.MIN_VALUE) { + setMinRange(world.getName(), minRange); + } + if (maxRange != Double.MIN_VALUE) { + setMaxRange(world.getName(), maxRange); + } + } + } + config.removeProperty("center"); + } catch (InvalidWorldException ignored) { + } + } + + public Location getCenter(final String name) { + try { + final LazyLocation center = config.getLocation(locationKey(name, "center")); if (center != null && center.location() != null) { return center.location(); } } catch (final InvalidWorldException ignored) { } final Location center = essentials.getServer().getWorlds().get(0).getWorldBorder().getCenter(); - center.setY(center.getWorld().getHighestBlockYAt(center) + 1); - setCenter(center); + center.setY(center.getWorld().getHighestBlockYAt(center) + HIGHEST_BLOCK_Y_OFFSET); + setCenter(name, center); return center; } - public void setCenter(final Location center) { - config.setProperty("center", center); + public void setCenter(final String name, final Location center) { + config.setProperty(locationKey(name, "center"), center); config.save(); } - public double getMinRange() { - return config.getDouble("min-range", 0d); + public double getMinRange(final String name) { + return config.getDouble(locationKey(name, "min-range"), 0d); } - public void setMinRange(final double minRange) { - config.setProperty("min-range", minRange); + public void setMinRange(final String name, final double minRange) { + config.setProperty(locationKey(name, "min-range"), minRange); config.save(); } - public double getMaxRange() { - return config.getDouble("max-range", getCenter().getWorld().getWorldBorder().getSize() / 2); + public double getMaxRange(final String name) { + return config.getDouble(locationKey(name, "max-range"), getCenter(name).getWorld().getWorldBorder().getSize() / 2); } - public void setMaxRange(final double maxRange) { - config.setProperty("max-range", maxRange); + public void setMaxRange(final String name, final double maxRange) { + config.setProperty(locationKey(name, "max-range"), maxRange); config.save(); } + public String getDefaultLocation() { + return config.getString("default-location", "{world}"); + } + + public boolean isPerLocationPermission() { + return config.getBoolean("per-location-permission", false); + } + public Set getExcludedBiomes() { final List biomeNames = config.getList("excluded-biomes", String.class); final Set excludedBiomes = new HashSet<>(); @@ -96,39 +129,48 @@ public int getCacheThreshold() { return config.getInt("cache-threshold", 10); } - public boolean getPreCache() { - return config.getBoolean("pre-cache", false); + public List listLocations() { + return new ArrayList<>(ConfigurateUtil.getKeys(config.getRootNode().node("locations"))); } - public Queue getCachedLocations() { - return cachedLocations; + public Queue getCachedLocations(final String name) { + this.cachedLocations.computeIfAbsent(name, x -> new ConcurrentLinkedQueue<>()); + return cachedLocations.get(name); } - // Get a random location; cached if possible. Otherwise on demand. - public CompletableFuture getRandomLocation(final Location center, final double minRange, final double maxRange) { - final int findAttempts = this.getFindAttempts(); - final Queue cachedLocations = this.getCachedLocations(); + // Get a named random teleport location; cached if possible, otherwise on demand. + public CompletableFuture getRandomLocation(final String name) { + final Queue cached = this.getCachedLocations(name); // Try to build up the cache if it is below the threshold - if (cachedLocations.size() < this.getCacheThreshold()) { - cacheRandomLocations(center, minRange, maxRange); + if (cached.size() < this.getCacheThreshold()) { + cacheRandomLocations(name); } final CompletableFuture future = new CompletableFuture<>(); // Return a random location immediately if one is available, otherwise try to find one now - if (cachedLocations.isEmpty()) { + if (cached.isEmpty()) { + final int findAttempts = this.getFindAttempts(); + final Location center = this.getCenter(name); + final double minRange = this.getMinRange(name); + final double maxRange = this.getMaxRange(name); attemptRandomLocation(findAttempts, center, minRange, maxRange).thenAccept(future::complete); } else { - future.complete(cachedLocations.poll()); + future.complete(cached.poll()); } return future; } - // Prompts caching random valid locations, up to a maximum number of attempts - public void cacheRandomLocations(final Location center, final double minRange, final double maxRange) { + // Get a random location with specific parameters (note: not cached). + public CompletableFuture getRandomLocation(final Location center, final double minRange, final double maxRange) { + return attemptRandomLocation(this.getFindAttempts(), center, minRange, maxRange); + } + + // Prompts caching random valid locations, up to a maximum number of attempts. + public void cacheRandomLocations(final String name) { essentials.getServer().getScheduler().scheduleSyncDelayedTask(essentials, () -> { for (int i = 0; i < this.getFindAttempts(); ++i) { - calculateRandomLocation(center, minRange, maxRange).thenAccept(location -> { + calculateRandomLocation(getCenter(name), getMinRange(name), getMaxRange(name)).thenAccept(location -> { if (isValidRandomLocation(location)) { - this.getCachedLocations().add(location); + this.getCachedLocations(name).add(location); } }); } @@ -175,12 +217,12 @@ private CompletableFuture calculateRandomLocation(final Location cente offsetZ = -rectX; } final Location location = new Location( - center.getWorld(), - center.getX() + offsetX, - center.getWorld().getMaxHeight(), - center.getZ() + offsetZ, - 360 * RANDOM.nextFloat() - 180, - 0 + center.getWorld(), + center.getX() + offsetX, + center.getWorld().getMaxHeight(), + center.getZ() + offsetZ, + 360 * RANDOM.nextFloat() - 180, + 0 ); PaperLib.getChunkAtAsync(location).thenAccept(chunk -> { if (World.Environment.NETHER.equals(center.getWorld().getEnvironment())) { @@ -193,17 +235,22 @@ private CompletableFuture calculateRandomLocation(final Location cente return future; } - // Returns an appropriate elevation for a given location in the nether, or -1 if none is found + // Returns an appropriate elevation for a given location in the nether, or MIN_VALUE if none is found private double getNetherYAt(final Location location) { for (int y = 32; y < location.getWorld().getMaxHeight() / 2; ++y) { if (!LocationUtil.isBlockUnsafe(location.getWorld(), location.getBlockX(), y, location.getBlockZ())) { return y; } } - return -1; + return Double.MIN_VALUE; } private boolean isValidRandomLocation(final Location location) { - return location.getBlockY() > 0 && !this.getExcludedBiomes().contains(location.getBlock().getBiome()); + final int minHeight = VersionUtil.getServerBukkitVersion().isHigherThanOrEqualTo(VersionUtil.v1_17_R01) ? location.getWorld().getMinHeight() : 0; + return location.getBlockY() >= minHeight && !this.getExcludedBiomes().contains(location.getBlock().getBiome()); + } + + private String locationKey(String name, String key) { + return "locations." + name + "." + key; } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/Settings.java b/Essentials/src/main/java/com/earth2me/essentials/Settings.java index 6d5203a5152..80ed067db5f 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Settings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Settings.java @@ -146,6 +146,16 @@ public boolean getRespawnAtHome() { return config.getBoolean("respawn-at-home", false); } + @Override + public boolean isRandomRespawn() { + return config.getBoolean("random-respawn", false); + } + + @Override + public String getRandomRespawnLocation() { + return config.getString("random-respawn-location", "world"); + } + @Override public boolean isRespawnAtAnchor() { return config.getBoolean("respawn-at-anchor", false); diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandsettpr.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandsettpr.java index b9f25e073a1..137007848ed 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandsettpr.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandsettpr.java @@ -3,10 +3,12 @@ import com.earth2me.essentials.RandomTeleport; import com.earth2me.essentials.User; import org.bukkit.Server; +import org.bukkit.World; import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; import static com.earth2me.essentials.I18n.tl; @@ -17,22 +19,21 @@ public Commandsettpr() { @Override protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception { - if (args.length == 0) { + if (args.length < 2) { throw new NotEnoughArgumentsException(); } - final RandomTeleport randomTeleport = ess.getRandomTeleport(); - randomTeleport.getCachedLocations().clear(); - if ("center".equalsIgnoreCase(args[0])) { - randomTeleport.setCenter(user.getLocation()); + randomTeleport.reloadConfig(); + if ("center".equalsIgnoreCase(args[1])) { + randomTeleport.setCenter(args[0], user.getLocation()); user.sendMessage(tl("settpr")); - } else if (args.length > 1) { - if ("minrange".equalsIgnoreCase(args[0])) { - randomTeleport.setMinRange(Double.parseDouble(args[1])); - } else if ("maxrange".equalsIgnoreCase(args[0])) { - randomTeleport.setMaxRange(Double.parseDouble(args[1])); + } else if (args.length > 2) { + if ("minrange".equalsIgnoreCase(args[1])) { + randomTeleport.setMinRange(args[0], Double.parseDouble(args[2])); + } else if ("maxrange".equalsIgnoreCase(args[1])) { + randomTeleport.setMaxRange(args[0], Double.parseDouble(args[2])); } - user.sendMessage(tl("settprValue", args[0].toLowerCase(), args[1].toLowerCase())); + user.sendMessage(tl("settprValue", args[1].toLowerCase(), args[2].toLowerCase())); } else { throw new NotEnoughArgumentsException(); } @@ -41,6 +42,8 @@ protected void run(final Server server, final User user, final String commandLab @Override protected List getTabCompleteOptions(final Server server, final User user, final String commandLabel, final String[] args) { if (args.length == 1) { + return user.getServer().getWorlds().stream().map(World::getName).collect(Collectors.toList()); + } else if (args.length == 2) { return Arrays.asList("center", "minrange", "maxrange"); } return Collections.emptyList(); diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpr.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpr.java index d4679db5040..5e340ccff33 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpr.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpr.java @@ -1,5 +1,6 @@ package com.earth2me.essentials.commands; +import com.earth2me.essentials.CommandSource; import com.earth2me.essentials.RandomTeleport; import com.earth2me.essentials.Trade; import com.earth2me.essentials.User; @@ -10,6 +11,7 @@ import java.util.Collections; import java.util.List; import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; import static com.earth2me.essentials.I18n.tl; @@ -24,25 +26,67 @@ protected void run(final Server server, final User user, final String commandLab final Trade charge = new Trade(this.getName(), ess); charge.isAffordableFor(user); final RandomTeleport randomTeleport = ess.getRandomTeleport(); - final UserRandomTeleportEvent event = new UserRandomTeleportEvent(user, randomTeleport.getCenter(), randomTeleport.getMinRange(), randomTeleport.getMaxRange()); + final String defaultLocation = randomTeleport.getDefaultLocation().replace("{world}", user.getLocation().getWorld().getName()); + final String name = args.length > 0 ? args[0] : defaultLocation; + final User userToTeleport = args.length > 1 && user.isAuthorized("essentials.tpr.others") ? getPlayer(server, user, args, 1) : user; + if (randomTeleport.isPerLocationPermission() && !user.isAuthorized("essentials.tpr.location." + name)) { + throw new Exception(tl("warpUsePermission")); + } + final UserRandomTeleportEvent event = new UserRandomTeleportEvent(userToTeleport, name, randomTeleport.getCenter(name), randomTeleport.getMinRange(name), randomTeleport.getMaxRange(name)); server.getPluginManager().callEvent(event); if (event.isCancelled()) { return; } - randomTeleport.getRandomLocation(event.getCenter(), event.getMinRange(), event.getMaxRange()).thenAccept(location -> { - final CompletableFuture future = getNewExceptionFuture(user.getSource(), commandLabel); - user.getAsyncTeleport().teleport(location, charge, PlayerTeleportEvent.TeleportCause.COMMAND, future); - future.thenAccept(success -> { - if (success) { - user.sendMessage(tl("tprSuccess")); - } - }); - }); + (event.isModified() ? randomTeleport.getRandomLocation(event.getCenter(), event.getMinRange(), event.getMaxRange()) : randomTeleport.getRandomLocation(name)) + .thenAccept(location -> { + final CompletableFuture future = getNewExceptionFuture(user.getSource(), commandLabel); + future.thenAccept(success -> { + if (success) { + userToTeleport.sendMessage(tl("tprSuccess")); + } + }); + userToTeleport.getAsyncTeleport().teleport(location, charge, PlayerTeleportEvent.TeleportCause.COMMAND, future); + }); throw new NoChargeException(); } @Override - protected List getTabCompleteOptions(final Server server, final User user, final String commandLabel, final String[] args) { + protected void run(final Server server, final CommandSource sender, final String commandLabel, final String[] args) throws Exception { + if (args.length < 2) { + throw new NotEnoughArgumentsException(); + } + final RandomTeleport randomTeleport = ess.getRandomTeleport(); + final User userToTeleport = getPlayer(server, sender, args, 1); + final String name = args[0]; + final UserRandomTeleportEvent event = new UserRandomTeleportEvent(userToTeleport, name, randomTeleport.getCenter(name), randomTeleport.getMinRange(name), randomTeleport.getMaxRange(name)); + server.getPluginManager().callEvent(event); + if (event.isCancelled()) { + return; + } + (event.isModified() ? randomTeleport.getRandomLocation(event.getCenter(), event.getMinRange(), event.getMaxRange()) : randomTeleport.getRandomLocation(name)) + .thenAccept(location -> { + final CompletableFuture future = getNewExceptionFuture(sender, commandLabel); + future.thenAccept(success -> { + if (success) { + userToTeleport.sendMessage(tl("tprSuccess")); + } + }); + userToTeleport.getAsyncTeleport().now(location, false, PlayerTeleportEvent.TeleportCause.COMMAND, future); + }); + } + + @Override + protected List getTabCompleteOptions(final Server server, final CommandSource sender, final String commandLabel, final String[] args) { + final RandomTeleport randomTeleport = ess.getRandomTeleport(); + if (args.length == 1) { + if (randomTeleport.isPerLocationPermission()) { + return randomTeleport.listLocations().stream().filter(name -> sender.isAuthorized("essentials.tpr.location." + name, ess)).collect(Collectors.toList()); + } else { + return randomTeleport.listLocations(); + } + } else if (args.length == 2 && sender.isAuthorized("essentials.tpr.others", ess)) { + return getPlayers(server, sender); + } return Collections.emptyList(); } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/signs/SignRandomTeleport.java b/Essentials/src/main/java/com/earth2me/essentials/signs/SignRandomTeleport.java new file mode 100644 index 00000000000..def48caa666 --- /dev/null +++ b/Essentials/src/main/java/com/earth2me/essentials/signs/SignRandomTeleport.java @@ -0,0 +1,39 @@ +package com.earth2me.essentials.signs; + +import com.earth2me.essentials.ChargeException; +import com.earth2me.essentials.RandomTeleport; +import com.earth2me.essentials.User; +import net.ess3.api.IEssentials; +import net.ess3.api.MaxMoneyException; +import org.bukkit.event.player.PlayerTeleportEvent; + +import java.util.concurrent.CompletableFuture; + +import static com.earth2me.essentials.I18n.tl; + +public class SignRandomTeleport extends EssentialsSign { + public SignRandomTeleport() { + super("RandomTeleport"); + } + + @Override + protected boolean onSignCreate(ISign sign, User player, String username, IEssentials ess) throws SignException, ChargeException { + return true; + } + + @Override + protected boolean onSignInteract(ISign sign, User player, String username, IEssentials ess) throws SignException, ChargeException, MaxMoneyException { + final String name = sign.getLine(1); + final RandomTeleport randomTeleport = ess.getRandomTeleport(); + randomTeleport.getRandomLocation(name).thenAccept(location -> { + final CompletableFuture future = new CompletableFuture<>(); + future.thenAccept(success -> { + if (success) { + player.sendMessage(tl("tprSuccess")); + } + }); + player.getAsyncTeleport().now(location, false, PlayerTeleportEvent.TeleportCause.COMMAND, future); + }); + return true; + } +} diff --git a/Essentials/src/main/java/com/earth2me/essentials/signs/Signs.java b/Essentials/src/main/java/com/earth2me/essentials/signs/Signs.java index 1d2fab98054..594e625b2b7 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/signs/Signs.java +++ b/Essentials/src/main/java/com/earth2me/essentials/signs/Signs.java @@ -25,7 +25,8 @@ public enum Signs { TRADE(new SignTrade()), WARP(new SignWarp()), WEATHER(new SignWeather()), - WORKBENCH(new SignWorkbench()); + WORKBENCH(new SignWorkbench()), + RANDOMTELEPORT(new SignRandomTeleport()); private final EssentialsSign sign; Signs(final EssentialsSign sign) { diff --git a/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java b/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java index 11a9db6015c..d157b39331c 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/VersionUtil.java @@ -32,6 +32,7 @@ public final class VersionUtil { public static final BukkitVersion v1_15_2_R01 = BukkitVersion.fromString("1.15.2-R0.1-SNAPSHOT"); public static final BukkitVersion v1_16_1_R01 = BukkitVersion.fromString("1.16.1-R0.1-SNAPSHOT"); public static final BukkitVersion v1_16_5_R01 = BukkitVersion.fromString("1.16.5-R0.1-SNAPSHOT"); + public static final BukkitVersion v1_17_R01 = BukkitVersion.fromString("1.17-R0.1-SNAPSHOT"); private static final Set supportedVersions = ImmutableSet.of(v1_8_8_R01, v1_9_4_R01, v1_10_2_R01, v1_11_2_R01, v1_12_2_R01, v1_13_2_R01, v1_14_4_R01, v1_15_2_R01, v1_16_5_R01); diff --git a/Essentials/src/main/java/net/ess3/api/events/UserRandomTeleportEvent.java b/Essentials/src/main/java/net/ess3/api/events/UserRandomTeleportEvent.java index d7dc4403da1..74881e00fb8 100644 --- a/Essentials/src/main/java/net/ess3/api/events/UserRandomTeleportEvent.java +++ b/Essentials/src/main/java/net/ess3/api/events/UserRandomTeleportEvent.java @@ -14,11 +14,19 @@ public class UserRandomTeleportEvent extends Event implements Cancellable { private static final HandlerList handlers = new HandlerList(); private final IUser user; + private String name; private Location center; private double minRange; private double maxRange; private boolean cancelled = false; + private boolean modified = false; + public UserRandomTeleportEvent(final IUser user, final String name, final Location center, final double minRange, final double maxRange) { + this(user, center, minRange, maxRange); + this.name = name; + } + + @Deprecated public UserRandomTeleportEvent(final IUser user, final Location center, final double minRange, final double maxRange) { super(!Bukkit.isPrimaryThread()); this.user = user; @@ -35,11 +43,23 @@ public IUser getUser() { return user; } + public String getName() { + return name; + } + public Location getCenter() { return center; } + /** + * Sets the center location to teleport from. + * + * @param center Center location. + */ public void setCenter(final Location center) { + if (!this.center.equals(center)) { + modified = true; + } this.center = center; } @@ -47,7 +67,15 @@ public double getMinRange() { return minRange; } + /** + * Sets the minimum range for the teleport. + * + * @param minRange Minimum range. + */ public void setMinRange(final double minRange) { + if (this.minRange != minRange) { + modified = true; + } this.minRange = minRange; } @@ -55,7 +83,15 @@ public double getMaxRange() { return maxRange; } + /** + * Sets the maximum range for the teleport. + * + * @param maxRange Maximum range. + */ public void setMaxRange(final double maxRange) { + if (this.maxRange != maxRange) { + modified = true; + } this.maxRange = maxRange; } @@ -69,6 +105,10 @@ public void setCancelled(final boolean b) { cancelled = b; } + public boolean isModified() { + return modified; + } + @Override public HandlerList getHandlers() { return handlers; diff --git a/Essentials/src/main/resources/config.yml b/Essentials/src/main/resources/config.yml index 8e575d06c85..1e32033e184 100644 --- a/Essentials/src/main/resources/config.yml +++ b/Essentials/src/main/resources/config.yml @@ -365,6 +365,7 @@ enabledSigns: #- loom #- smithing #- workbench + #- randomteleport # How many times per second can Essentials signs be interacted with per player. # Values should be between 1-20, 20 being virtually no lag protection. @@ -862,7 +863,7 @@ chat: # If you are using group formats make sure to remove the '#' to allow the setting to be read. # Note: Group names are case-sensitive so you must match them up with your permission plugin. - + # You can use permissions to control whether players can use formatting codes in their chat messages. # See https://essentialsx.net/wiki/Color-Permissions.html for more information. @@ -1115,6 +1116,11 @@ respawn-at-home-bed: true # When users die, should EssentialsSpawn respect users' respawn anchors? respawn-at-anchor: false +# When users die, should they respawn randomly? +# The value of respawn-random-location will be the name of the location (set with /settpr) to teleport from. +random-respawn: false +random-respawn-location: world + # Teleport all joining players to the spawnpoint spawn-on-join: false # The following value of `guests` states that all players in group `guests` will be teleported to spawn when joining. diff --git a/Essentials/src/main/resources/tpr.yml b/Essentials/src/main/resources/tpr.yml index fcf721e7dd6..fdaf3c7209b 100644 --- a/Essentials/src/main/resources/tpr.yml +++ b/Essentials/src/main/resources/tpr.yml @@ -1,6 +1,6 @@ # Configuration for the random teleport command. # Some settings may be defaulted, and can be changed via the /settpr command in-game. -min-range: 0.0 +default-location: '{world}' excluded-biomes: - cold_ocean - deep_cold_ocean diff --git a/EssentialsSpawn/src/main/java/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java b/EssentialsSpawn/src/main/java/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java index e72522a856e..27a91f556f2 100644 --- a/EssentialsSpawn/src/main/java/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java +++ b/EssentialsSpawn/src/main/java/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java @@ -2,6 +2,7 @@ import com.earth2me.essentials.Kit; import com.earth2me.essentials.OfflinePlayer; +import com.earth2me.essentials.RandomTeleport; import com.earth2me.essentials.User; import com.earth2me.essentials.textreader.IText; import com.earth2me.essentials.textreader.KeywordReplacer; @@ -13,6 +14,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import java.util.List; @@ -64,6 +66,13 @@ void onPlayerRespawn(final PlayerRespawnEvent event) { event.setRespawnLocation(home); return; } + } else if (ess.getSettings().isRandomRespawn()) { + final String name = ess.getSettings().getRandomRespawnLocation(); + final RandomTeleport randomTeleport = ess.getRandomTeleport(); + randomTeleport.getRandomLocation(name).thenAccept(location -> { + final CompletableFuture future = new CompletableFuture<>(); + user.getAsyncTeleport().now(location, false, PlayerTeleportEvent.TeleportCause.COMMAND, future); + }); } final Location spawn = spawns.getSpawn(user.getGroup()); if (spawn != null) { From 571fb8d393acbbc5a1a9691d6887ea35cb20b455 Mon Sep 17 00:00:00 2001 From: pop4959 Date: Sat, 2 Jul 2022 01:50:08 -0700 Subject: [PATCH 2/8] random spawn option --- .../com/earth2me/essentials/ISettings.java | 2 +- .../earth2me/essentials/RandomTeleport.java | 4 +++ .../com/earth2me/essentials/Settings.java | 6 ++--- Essentials/src/main/resources/config.yml | 9 ++++--- .../spawn/EssentialsSpawnPlayerListener.java | 26 ++++++++++++------- 5 files changed, 30 insertions(+), 17 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java index 48f92e5de31..67623255ebb 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java @@ -101,7 +101,7 @@ public interface ISettings extends IConf { boolean getRespawnAtHome(); - boolean isRandomRespawn(); + String getRandomSpawnLocation(); String getRandomRespawnLocation(); diff --git a/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java b/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java index 95548d1dcb8..eb22e008358 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java +++ b/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java @@ -64,6 +64,10 @@ public void updateConfig() { } } + public boolean hasLocation(final String name) { + return config.hasProperty("locations." + name); + } + public Location getCenter(final String name) { try { final LazyLocation center = config.getLocation(locationKey(name, "center")); diff --git a/Essentials/src/main/java/com/earth2me/essentials/Settings.java b/Essentials/src/main/java/com/earth2me/essentials/Settings.java index 5872b2f5862..b178f62f482 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Settings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Settings.java @@ -156,13 +156,13 @@ public boolean getRespawnAtHome() { } @Override - public boolean isRandomRespawn() { - return config.getBoolean("random-respawn", false); + public String getRandomSpawnLocation() { + return config.getString("random-spawn-location", "none"); } @Override public String getRandomRespawnLocation() { - return config.getString("random-respawn-location", "world"); + return config.getString("random-respawn-location", "none"); } @Override diff --git a/Essentials/src/main/resources/config.yml b/Essentials/src/main/resources/config.yml index 76bb7d7fcab..af2a2f44393 100644 --- a/Essentials/src/main/resources/config.yml +++ b/Essentials/src/main/resources/config.yml @@ -1174,10 +1174,11 @@ respawn-at-home-bed: true # When users die, should EssentialsSpawn respect users' respawn anchors? respawn-at-anchor: false -# When users die, should they respawn randomly? -# The value of respawn-random-location will be the name of the location (set with /settpr) to teleport from. -random-respawn: false -random-respawn-location: world +# If configured, users will spawn at the random spawn location instead of the newbies spawnpoint. +random-spawn-location: "none" + +# If configured, when users die, they will respawn at the random respawn location. +random-respawn-location: "none" # Teleport all joining players to the spawnpoint spawn-on-join: false diff --git a/EssentialsSpawn/src/main/java/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java b/EssentialsSpawn/src/main/java/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java index 27a91f556f2..54423af7e99 100644 --- a/EssentialsSpawn/src/main/java/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java +++ b/EssentialsSpawn/src/main/java/com/earth2me/essentials/spawn/EssentialsSpawnPlayerListener.java @@ -2,7 +2,6 @@ import com.earth2me.essentials.Kit; import com.earth2me.essentials.OfflinePlayer; -import com.earth2me.essentials.RandomTeleport; import com.earth2me.essentials.User; import com.earth2me.essentials.textreader.IText; import com.earth2me.essentials.textreader.KeywordReplacer; @@ -66,13 +65,9 @@ void onPlayerRespawn(final PlayerRespawnEvent event) { event.setRespawnLocation(home); return; } - } else if (ess.getSettings().isRandomRespawn()) { - final String name = ess.getSettings().getRandomRespawnLocation(); - final RandomTeleport randomTeleport = ess.getRandomTeleport(); - randomTeleport.getRandomLocation(name).thenAccept(location -> { - final CompletableFuture future = new CompletableFuture<>(); - user.getAsyncTeleport().now(location, false, PlayerTeleportEvent.TeleportCause.COMMAND, future); - }); + } + if (tryRandomTeleport(user, ess.getSettings().getRandomRespawnLocation())) { + return; } final Location spawn = spawns.getSpawn(user.getGroup()); if (spawn != null) { @@ -112,7 +107,9 @@ private void delayedJoin(final Player player) { final User user = ess.getUser(player); - if (!"none".equalsIgnoreCase(ess.getSettings().getNewbieSpawn())) { + final boolean spawnRandomly = tryRandomTeleport(user, ess.getSettings().getRandomSpawnLocation()); + + if (!spawnRandomly && !"none".equalsIgnoreCase(ess.getSettings().getNewbieSpawn())) { ess.scheduleSyncDelayedTask(new NewPlayerTeleport(user), 1L); } @@ -169,4 +166,15 @@ public void run() { } } } + + private boolean tryRandomTeleport(final User user, final String name) { + if (!ess.getRandomTeleport().hasLocation(name)) { + return false; + } + ess.getRandomTeleport().getRandomLocation(name).thenAccept(location -> { + final CompletableFuture future = new CompletableFuture<>(); + user.getAsyncTeleport().now(location, false, PlayerTeleportEvent.TeleportCause.PLUGIN, future); + }); + return true; + } } From f8f4002d57c58277517bc46c03ab6cc534671cfc Mon Sep 17 00:00:00 2001 From: pop4959 Date: Sat, 2 Jul 2022 02:12:50 -0700 Subject: [PATCH 3/8] avoid teleporting onto bedrock --- .../java/com/earth2me/essentials/RandomTeleport.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java b/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java index eb22e008358..193b73fb3b6 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java +++ b/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java @@ -8,6 +8,7 @@ import io.papermc.lib.PaperLib; import net.ess3.api.InvalidWorldException; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Biome; @@ -241,8 +242,12 @@ private CompletableFuture calculateRandomLocation(final Location cente // Returns an appropriate elevation for a given location in the nether, or MIN_VALUE if none is found private double getNetherYAt(final Location location) { - for (int y = 32; y < ess.getWorldInfoProvider().getMaxHeight(location.getWorld()); ++y) { - if (!LocationUtil.isBlockUnsafe(ess, location.getWorld(), location.getBlockX(), y, location.getBlockZ())) { + final World world = location.getWorld(); + for (int y = 32; y < ess.getWorldInfoProvider().getMaxHeight(world); ++y) { + if (Material.BEDROCK.equals(world.getBlockAt(location.getBlockX(), y, location.getBlockZ()).getType())) { + break; + } + if (!LocationUtil.isBlockUnsafe(ess, world, location.getBlockX(), y, location.getBlockZ())) { return y; } } From 04defb1e491b7baa85c5076d33f99901b00fb0d9 Mon Sep 17 00:00:00 2001 From: JRoy <10731363+JRoy@users.noreply.github.com> Date: Sun, 24 Nov 2024 17:16:28 -0500 Subject: [PATCH 4/8] fix compile issues --- .../com/earth2me/essentials/commands/Commandtpr.java | 9 +++++---- .../earth2me/essentials/signs/SignRandomTeleport.java | 9 +-------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpr.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpr.java index b16032f6749..589a7f7c6f4 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpr.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandtpr.java @@ -4,6 +4,7 @@ import com.earth2me.essentials.RandomTeleport; import com.earth2me.essentials.Trade; import com.earth2me.essentials.User; +import net.ess3.api.TranslatableException; import net.ess3.api.events.UserRandomTeleportEvent; import org.bukkit.Server; import org.bukkit.event.player.PlayerTeleportEvent; @@ -28,7 +29,7 @@ protected void run(final Server server, final User user, final String commandLab final String name = args.length > 0 ? args[0] : defaultLocation; final User userToTeleport = args.length > 1 && user.isAuthorized("essentials.tpr.others") ? getPlayer(server, user, args, 1) : user; if (randomTeleport.isPerLocationPermission() && !user.isAuthorized("essentials.tpr.location." + name)) { - throw new Exception(tl("warpUsePermission")); + throw new TranslatableException("warpUsePermission"); } final UserRandomTeleportEvent event = new UserRandomTeleportEvent(userToTeleport, name, randomTeleport.getCenter(name), randomTeleport.getMinRange(name), randomTeleport.getMaxRange(name)); server.getPluginManager().callEvent(event); @@ -66,7 +67,7 @@ protected void run(final Server server, final CommandSource sender, final String final CompletableFuture future = getNewExceptionFuture(sender, commandLabel); future.thenAccept(success -> { if (success) { - userToTeleport.sendMessage(tl("tprSuccess")); + userToTeleport.sendTl("tprSuccess"); } }); userToTeleport.getAsyncTeleport().now(location, false, PlayerTeleportEvent.TeleportCause.COMMAND, future); @@ -78,11 +79,11 @@ protected List getTabCompleteOptions(final Server server, final CommandS final RandomTeleport randomTeleport = ess.getRandomTeleport(); if (args.length == 1) { if (randomTeleport.isPerLocationPermission()) { - return randomTeleport.listLocations().stream().filter(name -> sender.isAuthorized("essentials.tpr.location." + name, ess)).collect(Collectors.toList()); + return randomTeleport.listLocations().stream().filter(name -> sender.isAuthorized("essentials.tpr.location." + name)).collect(Collectors.toList()); } else { return randomTeleport.listLocations(); } - } else if (args.length == 2 && sender.isAuthorized("essentials.tpr.others", ess)) { + } else if (args.length == 2 && sender.isAuthorized("essentials.tpr.others")) { return getPlayers(server, sender); } return Collections.emptyList(); diff --git a/Essentials/src/main/java/com/earth2me/essentials/signs/SignRandomTeleport.java b/Essentials/src/main/java/com/earth2me/essentials/signs/SignRandomTeleport.java index def48caa666..8ffaf7bb2de 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/signs/SignRandomTeleport.java +++ b/Essentials/src/main/java/com/earth2me/essentials/signs/SignRandomTeleport.java @@ -9,18 +9,11 @@ import java.util.concurrent.CompletableFuture; -import static com.earth2me.essentials.I18n.tl; - public class SignRandomTeleport extends EssentialsSign { public SignRandomTeleport() { super("RandomTeleport"); } - @Override - protected boolean onSignCreate(ISign sign, User player, String username, IEssentials ess) throws SignException, ChargeException { - return true; - } - @Override protected boolean onSignInteract(ISign sign, User player, String username, IEssentials ess) throws SignException, ChargeException, MaxMoneyException { final String name = sign.getLine(1); @@ -29,7 +22,7 @@ protected boolean onSignInteract(ISign sign, User player, String username, IEsse final CompletableFuture future = new CompletableFuture<>(); future.thenAccept(success -> { if (success) { - player.sendMessage(tl("tprSuccess")); + player.sendTl("tprSuccess"); } }); player.getAsyncTeleport().now(location, false, PlayerTeleportEvent.TeleportCause.COMMAND, future); From e9445c7c583f3ed13dc932f2b29f8875d9806c9f Mon Sep 17 00:00:00 2001 From: JRoy <10731363+JRoy@users.noreply.github.com> Date: Sun, 24 Nov 2024 17:38:24 -0500 Subject: [PATCH 5/8] Move upgrades to EssentialsUpgrade --- .../essentials/EssentialsUpgrade.java | 32 +++++++++++++- .../earth2me/essentials/RandomTeleport.java | 44 +++++-------------- .../config/EssentialsConfiguration.java | 3 +- 3 files changed, 44 insertions(+), 35 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/EssentialsUpgrade.java b/Essentials/src/main/java/com/earth2me/essentials/EssentialsUpgrade.java index 8f9b21367e2..753421909a3 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/EssentialsUpgrade.java +++ b/Essentials/src/main/java/com/earth2me/essentials/EssentialsUpgrade.java @@ -3,6 +3,7 @@ import com.earth2me.essentials.config.ConfigurateUtil; import com.earth2me.essentials.config.EssentialsConfiguration; import com.earth2me.essentials.config.EssentialsUserConfiguration; +import com.earth2me.essentials.config.entities.LazyLocation; import com.earth2me.essentials.craftbukkit.BanLookup; import com.earth2me.essentials.userstorage.ModernUUIDCache; import com.earth2me.essentials.utils.AdventureUtil; @@ -157,7 +158,36 @@ public static void uuidFileConvert(final IEssentials ess, final Boolean ignoreUF } public void updateRandomTeleport() { - ess.getRandomTeleport().updateConfig(); + if (doneFile.getBoolean("updateRandomTeleport", false)) { + return; + } + + final EssentialsConfiguration config = ess.getRandomTeleport().getConfig(); + + final LazyLocation center = config.getLocation("center"); + final Location centerLoc = center != null ? center.location() : null; + if (center != null && centerLoc != null) { + final double minRange = config.getDouble("min-range", Double.MIN_VALUE); + final double maxRange = config.getDouble("max-range", Double.MIN_VALUE); + for (final World world : ess.getServer().getWorlds()) { + final String propPrefix = "locations." + world.getName() + "."; + config.setProperty(propPrefix + "center", centerLoc); + + if (minRange != Double.MIN_VALUE) { + config.setProperty(propPrefix + "min-range", minRange); + } + if (maxRange != Double.MIN_VALUE) { + config.setProperty(propPrefix + "max-range", maxRange); + } + } + } + config.removeProperty("center"); + + config.blockingSave(); + + doneFile.setProperty("updateRandomTeleport", true); + doneFile.save(); + ess.getLogger().info("Done converting random teleport config."); } public void convertMailList() { diff --git a/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java b/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java index a7a0445e787..1529fd74430 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java +++ b/Essentials/src/main/java/com/earth2me/essentials/RandomTeleport.java @@ -6,7 +6,6 @@ import com.earth2me.essentials.utils.LocationUtil; import com.earth2me.essentials.utils.VersionUtil; import io.papermc.lib.PaperLib; -import net.ess3.api.InvalidWorldException; import net.ess3.provider.BiomeKeyProvider; import org.bukkit.Location; import org.bukkit.Material; @@ -38,49 +37,30 @@ public RandomTeleport(final IEssentials essentials) { reloadConfig(); } + public EssentialsConfiguration getConfig() { + return config; + } + @Override public void reloadConfig() { config.load(); cachedLocations.clear(); } - public void updateConfig() { - try { - final LazyLocation center = config.getLocation("center"); - if (center != null && center.location() != null) { - final double minRange = config.getDouble("min-range", Double.MIN_VALUE); - final double maxRange = config.getDouble("max-range", Double.MIN_VALUE); - for (World world : ess.getServer().getWorlds()) { - setCenter(world.getName(), center.location()); - if (minRange != Double.MIN_VALUE) { - setMinRange(world.getName(), minRange); - } - if (maxRange != Double.MIN_VALUE) { - setMaxRange(world.getName(), maxRange); - } - } - } - config.removeProperty("center"); - } catch (InvalidWorldException ignored) { - } - } - public boolean hasLocation(final String name) { return config.hasProperty("locations." + name); } public Location getCenter(final String name) { - try { - final LazyLocation center = config.getLocation(locationKey(name, "center")); - if (center != null && center.location() != null) { - return center.location(); - } - } catch (final InvalidWorldException ignored) { + final LazyLocation center = config.getLocation(locationKey(name, "center")); + if (center != null && center.location() != null) { + return center.location(); } - final Location center = ess.getServer().getWorlds().get(0).getWorldBorder().getCenter(); - center.setY(center.getWorld().getHighestBlockYAt(center) + HIGHEST_BLOCK_Y_OFFSET); - setCenter(name, center); - return center; + + final Location worldCenter = ess.getServer().getWorlds().get(0).getWorldBorder().getCenter(); + worldCenter.setY(worldCenter.getWorld().getHighestBlockYAt(worldCenter) + HIGHEST_BLOCK_Y_OFFSET); + setCenter(name, worldCenter); + return worldCenter; } public void setCenter(final String name, final Location center) { diff --git a/Essentials/src/main/java/com/earth2me/essentials/config/EssentialsConfiguration.java b/Essentials/src/main/java/com/earth2me/essentials/config/EssentialsConfiguration.java index 2974a17c9e3..95d97ce9565 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/config/EssentialsConfiguration.java +++ b/Essentials/src/main/java/com/earth2me/essentials/config/EssentialsConfiguration.java @@ -13,7 +13,6 @@ import com.earth2me.essentials.config.serializers.MailMessageSerializer; import com.earth2me.essentials.config.serializers.MaterialTypeSerializer; import com.earth2me.essentials.utils.AdventureUtil; -import net.ess3.api.InvalidWorldException; import net.essentialsx.api.v2.services.mail.MailMessage; import org.bukkit.Location; import org.bukkit.Material; @@ -123,7 +122,7 @@ public void setProperty(String path, final Location location) { setInternal(path, LazyLocation.fromLocation(location)); } - public LazyLocation getLocation(final String path) throws InvalidWorldException { + public LazyLocation getLocation(final String path) { final CommentedConfigurationNode node = path == null ? getRootNode() : getSection(path); if (node == null) { return null; From 168ce3b2f1dc6733e72cf66cdbeb257ce6249f58 Mon Sep 17 00:00:00 2001 From: JRoy <10731363+JRoy@users.noreply.github.com> Date: Sun, 24 Nov 2024 17:42:31 -0500 Subject: [PATCH 6/8] get rid of InvalidWorldException was never used anyway --- .../earth2me/essentials/AsyncTeleport.java | 3 +-- .../java/com/earth2me/essentials/Warps.java | 3 +-- .../com/earth2me/essentials/api/IWarps.java | 3 +-- .../essentials/api/InvalidWorldException.java | 20 ------------------- .../essentials/commands/Commandsetwarp.java | 3 +-- .../net/ess3/api/InvalidWorldException.java | 18 ----------------- 6 files changed, 4 insertions(+), 46 deletions(-) delete mode 100644 Essentials/src/main/java/com/earth2me/essentials/api/InvalidWorldException.java delete mode 100644 Essentials/src/main/java/net/ess3/api/InvalidWorldException.java diff --git a/Essentials/src/main/java/com/earth2me/essentials/AsyncTeleport.java b/Essentials/src/main/java/com/earth2me/essentials/AsyncTeleport.java index a4f40daf774..fc98e97e175 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/AsyncTeleport.java +++ b/Essentials/src/main/java/com/earth2me/essentials/AsyncTeleport.java @@ -7,7 +7,6 @@ import io.papermc.lib.PaperLib; import net.ess3.api.IEssentials; import net.ess3.api.IUser; -import net.ess3.api.InvalidWorldException; import net.ess3.api.TranslatableException; import net.ess3.api.events.UserWarpEvent; import net.ess3.api.events.teleport.PreTeleportEvent; @@ -424,7 +423,7 @@ public void warp(final IUser otherUser, String warp, final Trade chargeFor, fina final Location loc; try { loc = ess.getWarps().getWarp(warp); - } catch (final WarpNotFoundException | InvalidWorldException e) { + } catch (final WarpNotFoundException e) { future.completeExceptionally(e); return; } diff --git a/Essentials/src/main/java/com/earth2me/essentials/Warps.java b/Essentials/src/main/java/com/earth2me/essentials/Warps.java index 84d5dc79f8f..37b8cc752c8 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Warps.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Warps.java @@ -5,7 +5,6 @@ import com.earth2me.essentials.utils.AdventureUtil; import com.earth2me.essentials.utils.StringUtil; import net.ess3.api.InvalidNameException; -import net.ess3.api.InvalidWorldException; import net.ess3.api.TranslatableException; import org.bukkit.Location; @@ -54,7 +53,7 @@ public Collection getList() { } @Override - public Location getWarp(final String warp) throws WarpNotFoundException, InvalidWorldException { + public Location getWarp(final String warp) throws WarpNotFoundException { final EssentialsConfiguration conf = warpPoints.get(new StringIgnoreCase(warp)); if (conf == null) { throw new WarpNotFoundException(); diff --git a/Essentials/src/main/java/com/earth2me/essentials/api/IWarps.java b/Essentials/src/main/java/com/earth2me/essentials/api/IWarps.java index d9af55ab6fd..93ed13f1a65 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/api/IWarps.java +++ b/Essentials/src/main/java/com/earth2me/essentials/api/IWarps.java @@ -22,9 +22,8 @@ public interface IWarps extends IConf { * @param warp - Warp name * @return - Location the warp is set to * @throws WarpNotFoundException When the warp is not found - * @throws net.ess3.api.InvalidWorldException When the world the warp is in is not found */ - Location getWarp(String warp) throws WarpNotFoundException, net.ess3.api.InvalidWorldException; + Location getWarp(String warp) throws WarpNotFoundException; /** * Checks if the provided name is a warp. diff --git a/Essentials/src/main/java/com/earth2me/essentials/api/InvalidWorldException.java b/Essentials/src/main/java/com/earth2me/essentials/api/InvalidWorldException.java deleted file mode 100644 index 670d229cc5f..00000000000 --- a/Essentials/src/main/java/com/earth2me/essentials/api/InvalidWorldException.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.earth2me.essentials.api; - -import net.ess3.api.TranslatableException; - -/** - * @deprecated This exception is unused. Use {@link net.ess3.api.InvalidWorldException} instead. - */ -@Deprecated -public class InvalidWorldException extends TranslatableException { - private final String world; - - public InvalidWorldException(final String world) { - super("invalidWorld"); - this.world = world; - } - - public String getWorld() { - return this.world; - } -} diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandsetwarp.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandsetwarp.java index 8f5af697533..f5adff26d03 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandsetwarp.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandsetwarp.java @@ -4,7 +4,6 @@ import com.earth2me.essentials.api.IWarps; import com.earth2me.essentials.utils.NumberUtil; import com.earth2me.essentials.utils.StringUtil; -import net.ess3.api.InvalidWorldException; import net.ess3.api.TranslatableException; import net.essentialsx.api.v2.events.WarpModifyEvent; import org.bukkit.Bukkit; @@ -31,7 +30,7 @@ public void run(final Server server, final User user, final String commandLabel, try { warpLoc = warps.getWarp(args[0]); - } catch (final WarpNotFoundException | InvalidWorldException ignored) { + } catch (final WarpNotFoundException ignored) { } if (warpLoc == null) { final WarpModifyEvent event = new WarpModifyEvent(user, args[0], null, user.getLocation(), WarpModifyEvent.WarpModifyCause.CREATE); diff --git a/Essentials/src/main/java/net/ess3/api/InvalidWorldException.java b/Essentials/src/main/java/net/ess3/api/InvalidWorldException.java deleted file mode 100644 index 4a536fdda89..00000000000 --- a/Essentials/src/main/java/net/ess3/api/InvalidWorldException.java +++ /dev/null @@ -1,18 +0,0 @@ -package net.ess3.api; - -/** - * Fired when trying to teleport a user to an invalid world. This usually only occurs if a world has been removed from - * the server and a player tries to teleport to a warp or home in that world. - */ -public class InvalidWorldException extends TranslatableException { - private final String world; - - public InvalidWorldException(final String world) { - super("invalidWorld"); - this.world = world; - } - - public String getWorld() { - return this.world; - } -} From 20f66a801ece570bbfbbbd9d456bcf6843586b4c Mon Sep 17 00:00:00 2001 From: JRoy <10731363+JRoy@users.noreply.github.com> Date: Sun, 24 Nov 2024 17:44:53 -0500 Subject: [PATCH 7/8] Don't Reload RTP Config in /settpr The setCenter, setMin/Max methods will save the config on their own --- .../java/com/earth2me/essentials/commands/Commandsettpr.java | 1 - 1 file changed, 1 deletion(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandsettpr.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandsettpr.java index aff2e0ec004..4e4d0c21cb6 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandsettpr.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandsettpr.java @@ -21,7 +21,6 @@ protected void run(final Server server, final User user, final String commandLab throw new NotEnoughArgumentsException(); } final RandomTeleport randomTeleport = ess.getRandomTeleport(); - randomTeleport.reloadConfig(); if ("center".equalsIgnoreCase(args[1])) { randomTeleport.setCenter(args[0], user.getLocation()); user.sendTl("settpr"); From b9d9a2439e7b1b772d1c819d066f019fd1360d1b Mon Sep 17 00:00:00 2001 From: JRoy <10731363+JRoy@users.noreply.github.com> Date: Sun, 24 Nov 2024 17:46:09 -0500 Subject: [PATCH 8/8] Remove unused UserRandomTeleportEvent constructor --- .../java/net/ess3/api/events/UserRandomTeleportEvent.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/Essentials/src/main/java/net/ess3/api/events/UserRandomTeleportEvent.java b/Essentials/src/main/java/net/ess3/api/events/UserRandomTeleportEvent.java index 74881e00fb8..d31b2f03631 100644 --- a/Essentials/src/main/java/net/ess3/api/events/UserRandomTeleportEvent.java +++ b/Essentials/src/main/java/net/ess3/api/events/UserRandomTeleportEvent.java @@ -22,14 +22,9 @@ public class UserRandomTeleportEvent extends Event implements Cancellable { private boolean modified = false; public UserRandomTeleportEvent(final IUser user, final String name, final Location center, final double minRange, final double maxRange) { - this(user, center, minRange, maxRange); - this.name = name; - } - - @Deprecated - public UserRandomTeleportEvent(final IUser user, final Location center, final double minRange, final double maxRange) { super(!Bukkit.isPrimaryThread()); this.user = user; + this.name = name; this.center = center; this.minRange = minRange; this.maxRange = maxRange;