Implement config file and spawn offset
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
dd1425863a
commit
51c178ab4f
@ -1,8 +1,6 @@
|
||||
package wtf.beatrice.limbomanager;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import wtf.beatrice.limbomanager.objects.Coordinates;
|
||||
import wtf.beatrice.limbomanager.objects.LocationCheckRunnable;
|
||||
|
||||
@ -11,20 +9,18 @@ import java.util.HashMap;
|
||||
public class Cache
|
||||
{
|
||||
|
||||
public static final Coordinates baseCoords = new Coordinates(1000, 1000);
|
||||
private static YamlConfiguration configuration;
|
||||
|
||||
public static final HashMap<String, Coordinates> playerIslands = new HashMap<>();
|
||||
|
||||
public static LocationCheckRunnable locationCheckRunnable;
|
||||
|
||||
public static void teleportToOwnIsland(Player player)
|
||||
{
|
||||
Coordinates islandCoords = playerIslands.get(player.getName());
|
||||
Location targetLocation = new Location(player.getWorld(), islandCoords.getX(), 100, islandCoords.getZ());
|
||||
|
||||
Bukkit.getScheduler().runTask(LimboManager.getInstance(), () -> {
|
||||
targetLocation.getWorld().loadChunk(targetLocation.getChunk().getX(), targetLocation.getChunk().getZ(), true);
|
||||
player.teleport(targetLocation);
|
||||
});
|
||||
|
||||
public static void setConfiguration(YamlConfiguration configuration) {
|
||||
Cache.configuration = configuration;
|
||||
}
|
||||
|
||||
public static YamlConfiguration getConfiguration() {
|
||||
return configuration;
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,8 @@
|
||||
package wtf.beatrice.limbomanager;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.configuration.InvalidConfigurationException;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import wtf.beatrice.limbomanager.commands.Spawn;
|
||||
@ -9,8 +11,10 @@ import wtf.beatrice.limbomanager.listeners.PlayerChecker;
|
||||
import wtf.beatrice.limbomanager.listeners.PlayerTeleporter;
|
||||
import wtf.beatrice.limbomanager.listeners.RiskyBlocksHandler;
|
||||
import wtf.beatrice.limbomanager.objects.LocationCheckRunnable;
|
||||
import wtf.beatrice.limbomanager.utils.FileUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
public class LimboManager extends JavaPlugin {
|
||||
|
||||
@ -33,10 +37,20 @@ public class LimboManager extends JavaPlugin {
|
||||
pluginManager.registerEvents(new CommandCanceller(), this);
|
||||
pluginManager.registerEvents(new RiskyBlocksHandler(), this);
|
||||
|
||||
// no need to check if it exists, it will just skip creation.
|
||||
// no need to check if folder exists, it will just skip creation.
|
||||
getDataFolder().mkdirs();
|
||||
schematicsFolderPath = getDataFolder().getAbsolutePath() + File.separator + "schematics";
|
||||
getSchematicsFolder().mkdirs();
|
||||
String configPath = getDataFolder().getAbsolutePath() + File.separator + "config.yml";
|
||||
File config = new File(configPath);
|
||||
FileUtils.copyFileFromSrc(config);
|
||||
YamlConfiguration configuration = new YamlConfiguration();
|
||||
try {
|
||||
configuration.load(config);
|
||||
Cache.setConfiguration(configuration);
|
||||
} catch (IOException | InvalidConfigurationException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
// start location check runnable
|
||||
Cache.locationCheckRunnable = new LocationCheckRunnable();
|
||||
|
@ -5,7 +5,7 @@ import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import wtf.beatrice.limbomanager.Cache;
|
||||
import wtf.beatrice.limbomanager.utils.LocationUtils;
|
||||
|
||||
public class Spawn implements CommandExecutor
|
||||
{
|
||||
@ -20,7 +20,7 @@ public class Spawn implements CommandExecutor
|
||||
return true;
|
||||
}
|
||||
|
||||
Cache.teleportToOwnIsland((Player) sender);
|
||||
LocationUtils.teleportToOwnIsland((Player) sender);
|
||||
sender.sendMessage("Teleported");
|
||||
return true;
|
||||
}
|
||||
|
@ -22,6 +22,7 @@ import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import wtf.beatrice.limbomanager.Cache;
|
||||
import wtf.beatrice.limbomanager.LimboManager;
|
||||
import wtf.beatrice.limbomanager.objects.Coordinates;
|
||||
import wtf.beatrice.limbomanager.utils.LocationUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
@ -77,7 +78,7 @@ public class PlayerTeleporter implements Listener
|
||||
}
|
||||
|
||||
|
||||
Cache.teleportToOwnIsland(player);
|
||||
LocationUtils.teleportToOwnIsland(player);
|
||||
|
||||
}
|
||||
|
||||
@ -98,7 +99,7 @@ public class PlayerTeleporter implements Listener
|
||||
we start from (1000, 1000) and we put islands at 500 blocks distance up to 10000. then we move to a new row.
|
||||
*/
|
||||
|
||||
Coordinates islandCoords = new Coordinates(1000, 1000);
|
||||
Coordinates islandCoords = new Coordinates(Cache.baseCoords);
|
||||
for(Coordinates currentCoords : Cache.playerIslands.values()) {
|
||||
|
||||
// if the two are not the same, it means we found a free spot.
|
||||
|
@ -11,6 +11,12 @@ public class Coordinates
|
||||
this.z = z;
|
||||
}
|
||||
|
||||
public Coordinates(Coordinates old)
|
||||
{
|
||||
this.x = old.x;
|
||||
this.z = old.z;
|
||||
}
|
||||
|
||||
public void setX(int x) { this.x = x; }
|
||||
public void setZ(int z) { this.z = z; }
|
||||
|
||||
|
@ -5,6 +5,7 @@ import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
import wtf.beatrice.limbomanager.Cache;
|
||||
import wtf.beatrice.limbomanager.utils.LocationUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@ -49,7 +50,7 @@ public class LocationCheckRunnable implements Runnable
|
||||
|
||||
if(distanceX > distanceMax || distanceZ > distanceMax)
|
||||
{
|
||||
Cache.teleportToOwnIsland(player);
|
||||
LocationUtils.teleportToOwnIsland(player);
|
||||
player.sendMessage("Out of island limits");
|
||||
}
|
||||
|
||||
|
40
src/main/java/wtf/beatrice/limbomanager/utils/FileUtils.java
Normal file
40
src/main/java/wtf/beatrice/limbomanager/utils/FileUtils.java
Normal file
@ -0,0 +1,40 @@
|
||||
package wtf.beatrice.limbomanager.utils;
|
||||
|
||||
import wtf.beatrice.limbomanager.LimboManager;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.logging.Level;
|
||||
|
||||
public class FileUtils
|
||||
{
|
||||
|
||||
public static void copyFileFromSrc(File destination)
|
||||
{
|
||||
// Check if files already exists and if it doesn't, then create it.
|
||||
if(!destination.exists())
|
||||
{
|
||||
// Load the InputStream of the file in the source folder.
|
||||
InputStream is = FileUtils.class.getResourceAsStream("/" + destination.getName());
|
||||
try
|
||||
{
|
||||
// Try copying the file to the directory where it's supposed to be, and log it.
|
||||
Files.copy(is, Paths.get(destination.getAbsolutePath()));
|
||||
is.close();
|
||||
LimboManager.getInstance().getLogger().log(Level.INFO, "File " + destination.getName() + " successfully created.");
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
// Throw exception if something went wrong
|
||||
LimboManager.getInstance().getLogger().log(Level.SEVERE, "There were some unexpected errors from " + destination.getName() + " file creation. Please contact the developer and send him this log:");
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
package wtf.beatrice.limbomanager.utils;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
import wtf.beatrice.limbomanager.Cache;
|
||||
import wtf.beatrice.limbomanager.LimboManager;
|
||||
import wtf.beatrice.limbomanager.objects.Coordinates;
|
||||
|
||||
import java.util.logging.Level;
|
||||
|
||||
public class LocationUtils {
|
||||
public static void teleportToOwnIsland(Player player)
|
||||
{
|
||||
Location targetLocation = getPlayerSpawnLocation(player);
|
||||
|
||||
Bukkit.getScheduler().runTask(LimboManager.getInstance(), () -> {
|
||||
targetLocation.getWorld().loadChunk(targetLocation.getChunk().getX(), targetLocation.getChunk().getZ(), true);
|
||||
player.teleport(targetLocation);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private static Location getPlayerSpawnLocation(Player player) {
|
||||
|
||||
String worldName = Cache.getConfiguration().getString("island.world-name");
|
||||
if(worldName == null)
|
||||
{
|
||||
LimboManager.getInstance().getLogger().log(Level.SEVERE, "World name is null!");
|
||||
return null;
|
||||
}
|
||||
|
||||
World spawnWorld = Bukkit.getWorld(worldName);
|
||||
if(spawnWorld == null)
|
||||
{
|
||||
LimboManager.getInstance().getLogger().log(Level.SEVERE, "World is null!");
|
||||
return null;
|
||||
}
|
||||
|
||||
String playerName = player.getName();
|
||||
|
||||
Coordinates coordinates = Cache.playerIslands.get(playerName);
|
||||
|
||||
double offsetX = Cache.getConfiguration().getDouble("island.spawn-offset.x");
|
||||
double y = Cache.getConfiguration().getDouble("island.spawn-offset.y");
|
||||
double offsetZ = Cache.getConfiguration().getDouble("island.spawn-offset.z");
|
||||
|
||||
double x = coordinates.getX() + offsetX;
|
||||
double z = coordinates.getZ() + offsetZ;
|
||||
|
||||
float yaw = (float) Cache.getConfiguration().getDouble("island.spawn-offset.yaw");
|
||||
float pitch = (float) Cache.getConfiguration().getDouble("island.spawn-offset.pitch");
|
||||
|
||||
return new Location(spawnWorld, x, y, z, yaw, pitch);
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
sizing:
|
||||
island-distance: 500
|
||||
allowed-range: 100
|
||||
island:
|
||||
world-name: world
|
||||
spawn-offset:
|
||||
x: 0.0
|
||||
y: 20.0
|
||||
z: 0.0
|
||||
yaw: 0.0
|
||||
pitch: 0.0
|
Loading…
Reference in New Issue
Block a user