diff --git a/pom.xml b/pom.xml
index ab470a8..757f316 100644
--- a/pom.xml
+++ b/pom.xml
@@ -79,9 +79,22 @@
+
src/main/resources
true
+
+ **/*.yml
+
+
+
+
+
+ src/main/resources
+ false
+
+ **/*.slime
+
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java b/src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java
index 4cf19e7..8839e05 100644
--- a/src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java
+++ b/src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java
@@ -20,8 +20,9 @@ import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
import xyz.soukup.ecoCraftCore.database.objects.*;
-import xyz.soukup.ecoCraftCore.islands.IslandCommand;
+import xyz.soukup.ecoCraftCore.islands.IslandAdminCommand;
import xyz.soukup.ecoCraftCore.money.MoneyCommand;
+import xyz.soukup.ecoCraftCore.player.OnKill;
import xyz.soukup.ecoCraftCore.player.PreparePlayer;
import xyz.soukup.ecoCraftCore.player.TeleportRequestsHandler;
import xyz.soukup.ecoCraftCore.positionMarker.RulerCommand;
@@ -64,6 +65,7 @@ public final class EcoCraftCore extends JavaPlugin {
PacketEvents.getAPI().init();
try {
+ saveIslandTemplates();
saveDefaultConfig();
Messages.init();
prepareDatabase();
@@ -87,6 +89,7 @@ public final class EcoCraftCore extends JavaPlugin {
@Override
public void onDisable() {
+ plugin.saveConfig();
VirtualChest.saveCache();
saveSlimeWorlds();
adiosDatabase();
@@ -166,9 +169,23 @@ public final class EcoCraftCore extends JavaPlugin {
}
}
+ private void saveIslandTemplates(){
+ plugin.saveResource("island_templates/flat_grass.slime", false);
+ plugin.saveResource("island_templates/flat_sand.slime", false);
+ plugin.saveResource("island_templates/flat_hell.slime", false);
+
+
+ }
+
private void prepareDatabase() throws SQLException {
- String databaseUrl = "jdbc:mysql://localhost:3306/ecc";
- connectionSource = new JdbcConnectionSource(databaseUrl, "ecc", "ecc");
+ String databaseHost = config.getString("database.host");
+ String databasePort = config.getString("database.port");
+ String databaseName = config.getString("database.database");
+ String databaseUsername = config.getString("database.user");
+ String databasePassword = config.getString("database.password");
+
+ String databaseUrl = "jdbc:mysql://" + databaseHost + ":" + databasePort + "/" + databaseName;
+ connectionSource = new JdbcConnectionSource(databaseUrl, databaseUsername, databasePassword);
Logger.getLogger("com.j256.ormlite.table.TableUtils").setLevel(Level.OFF);
TableUtils.createTableIfNotExists(connectionSource, ActiveServer.class);
@@ -213,13 +230,14 @@ public final class EcoCraftCore extends JavaPlugin {
lm.registerEventHandler(LifecycleEvents.COMMANDS, event -> event.registrar().register(ShopCommand.createCommand().build()));
lm.registerEventHandler(LifecycleEvents.COMMANDS, event -> event.registrar().register(RulerCommand.createCommand().build()));
lm.registerEventHandler(LifecycleEvents.COMMANDS, event -> event.registrar().register(MoneyCommand.createCommand().build()));
- lm.registerEventHandler(LifecycleEvents.COMMANDS, event -> event.registrar().register(IslandCommand.createCommand().build()));
+ lm.registerEventHandler(LifecycleEvents.COMMANDS, event -> event.registrar().register(IslandAdminCommand.createCommand().build()));
}
private void registerEvents(){
PluginManager pm = this.getServer().getPluginManager();
pm.registerEvents(new TeleportRequestsHandler(), this);
+ pm.registerEvents(new OnKill(), this);
pm.registerEvents(new RulerMarking(), this);
pm.registerEvents(new VirtualChestLogic(), this);
pm.registerEvents(new ShopLogic(), this);
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/islands/ChunkModifier.java b/src/main/java/xyz/soukup/ecoCraftCore/islands/ChunkModifier.java
index 0a333a1..2ae90a1 100644
--- a/src/main/java/xyz/soukup/ecoCraftCore/islands/ChunkModifier.java
+++ b/src/main/java/xyz/soukup/ecoCraftCore/islands/ChunkModifier.java
@@ -52,6 +52,7 @@ public class ChunkModifier implements PacketListener {
PersistentDataContainer pdc = world.getPersistentDataContainer();
String type = pdc.get(keyType, PersistentDataType.STRING);
+ if (type == null) return;
String block;
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandCommand.java b/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandAdminCommand.java
similarity index 85%
rename from src/main/java/xyz/soukup/ecoCraftCore/islands/IslandCommand.java
rename to src/main/java/xyz/soukup/ecoCraftCore/islands/IslandAdminCommand.java
index 8589957..ee6ada0 100644
--- a/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandCommand.java
+++ b/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandAdminCommand.java
@@ -3,14 +3,12 @@ package xyz.soukup.ecoCraftCore.islands;
import com.infernalsuite.asp.api.AdvancedSlimePaperAPI;
import com.infernalsuite.asp.api.world.SlimeWorld;
import com.j256.ormlite.stmt.QueryBuilder;
-import com.mojang.brigadier.Message;
import com.mojang.brigadier.arguments.IntegerArgumentType;
import com.mojang.brigadier.arguments.StringArgumentType;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.context.CommandContext;
import io.papermc.paper.command.brigadier.CommandSourceStack;
import io.papermc.paper.command.brigadier.Commands;
-import net.kyori.adventure.text.Component;
import org.bukkit.Location;
import org.bukkit.NamespacedKey;
import org.bukkit.entity.Player;
@@ -24,9 +22,10 @@ import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
+import static xyz.soukup.ecoCraftCore.EcoCraftCore.config;
import static xyz.soukup.ecoCraftCore.EcoCraftCore.plugin;
-public class IslandCommand {
+public class IslandAdminCommand {
private final AdvancedSlimePaperAPI asp = AdvancedSlimePaperAPI.instance();
@@ -35,7 +34,7 @@ public class IslandCommand {
LiteralArgumentBuilder tp = Commands.literal("tp")
.then(Commands.argument("uuid", StringArgumentType.word())
- .executes(IslandCommand::teleport)
+ .executes(IslandAdminCommand::teleport)
.suggests(((context, builder) -> {
try {
QueryBuilder queryBuilder = DaoRegistry.getIslandDao().queryBuilder();
@@ -66,7 +65,7 @@ public class IslandCommand {
}))
.then(Commands.argument("display_name", StringArgumentType.string())
.then(Commands.argument("description", StringArgumentType.greedyString())
- .executes(IslandCommand::createWorld))));
+ .executes(IslandAdminCommand::createWorld))));
LiteralArgumentBuilder load = Commands.literal("load")
.then(Commands.argument("uuid", StringArgumentType.word())
@@ -83,7 +82,7 @@ public class IslandCommand {
throw new RuntimeException(e);
}
}))
- .executes(IslandCommand::loadWorld));
+ .executes(IslandAdminCommand::loadWorld));
LiteralArgumentBuilder loadTemplate = Commands.literal("loadTemplate")
.then(Commands.argument("name", StringArgumentType.word())
@@ -100,7 +99,7 @@ public class IslandCommand {
}
return builder.buildFuture();
}))
- .executes(IslandCommand::loadTemplate));
+ .executes(IslandAdminCommand::loadTemplate));
LiteralArgumentBuilder template = Commands.literal("template")
.then(Commands.argument("uuid", StringArgumentType.word())
@@ -118,31 +117,31 @@ public class IslandCommand {
}
})
.then(Commands.argument("templateName", StringArgumentType.word())
- .executes(IslandCommand::createTemplate)));
+ .executes(IslandAdminCommand::createTemplate)));
LiteralArgumentBuilder metadata = Commands.literal("metadata")
.then(Commands.argument("key", StringArgumentType.word())
.then(Commands.argument("value", IntegerArgumentType.integer())
- .executes(IslandCommand::setMetadata)));
+ .executes(IslandAdminCommand::setMetadata)));
LiteralArgumentBuilder metadataString = Commands.literal("metadataString")
.then(Commands.argument("key", StringArgumentType.word())
.then(Commands.argument("value", StringArgumentType.string())
- .executes(IslandCommand::setMetadataString)));
+ .executes(IslandAdminCommand::setMetadataString)));
LiteralArgumentBuilder expand = Commands.literal("expand")
.then(Commands.argument("lenght", IntegerArgumentType.integer())
- .executes(IslandCommand::expandIsland));
+ .executes(IslandAdminCommand::expandIsland));
LiteralArgumentBuilder listMetadata = Commands.literal("listMetadata")
- .executes(IslandCommand::readAllMetadata);
+ .executes(IslandAdminCommand::readAllMetadata);
LiteralArgumentBuilder spawn = Commands.literal("spawn")
- .executes(IslandCommand::setSpawn);
+ .executes(IslandAdminCommand::setSpawn);
LiteralArgumentBuilder enviroment = Commands.literal("environment")
.then(Commands.argument("environment", StringArgumentType.word())
- .executes(IslandCommand::setEnvironment)
+ .executes(IslandAdminCommand::setEnvironment)
.suggests(((context, builder) -> {
builder.suggest("normal");
builder.suggest("nether");
@@ -150,7 +149,11 @@ public class IslandCommand {
return builder.buildFuture();
})));
- return Commands.literal("island")
+ LiteralArgumentBuilder setDefaultIsland = Commands.literal("setDefaultIsland")
+ .executes(IslandAdminCommand::setDefualtIsland);
+
+ return Commands.literal("island-admin")
+ .requires(commandSourceStack -> commandSourceStack.getSender().isOp())
.then(tp)
.then(create)
.then(load)
@@ -161,8 +164,20 @@ public class IslandCommand {
.then(loadTemplate)
.then(spawn)
.then(enviroment)
- .then(expand);
+ .then(expand)
+ .then(setDefaultIsland);
+
+
+ }
+
+ private static int setDefualtIsland(CommandContext context){
+ if (!(context.getSource().getSender() instanceof Player player)) return 0;
+ String uuid = player.getWorld().getName();
+ config.set("islands.spawn", uuid);
+ plugin.saveConfig();
+ player.sendMessage("done.");
+ return 0;
}
@@ -191,7 +206,8 @@ public class IslandCommand {
private static int teleport(CommandContext context) {
IslandManager islandManager = new IslandManager();
try {
- islandManager.teleport((Player) context.getSource().getSender(), context.getArgument("uuid", String.class));
+ Integer status = islandManager.teleport((Player) context.getSource().getSender(), context.getArgument("uuid", String.class));
+ context.getSource().getSender().sendMessage(String.valueOf(status));
} catch (Exception e) {
throw new RuntimeException(e);
}
@@ -203,19 +219,23 @@ public class IslandCommand {
String type = context.getArgument("type", String.class);
String displayName = context.getArgument("display_name", String.class);
String description = context.getArgument("description", String.class);
- islandManager.createIsland(type, displayName, description, "n", "n");
+ String uuid = islandManager.createIsland(type, displayName, description, "n", "n");
+ context.getSource().getSender().sendMessage("Created island: " + uuid);
+
return 0;
}
private static int loadWorld(CommandContext context) {
IslandManager islandManager = new IslandManager();
islandManager.loadIsland(context.getArgument("uuid", String.class));
+ context.getSource().getSender().sendMessage("done.");
return 0;
}
private static int loadTemplate(CommandContext context) {
IslandManager islandManager = new IslandManager();
islandManager.loadIslandTemplate(context.getArgument("name", String.class));
+ context.getSource().getSender().sendMessage("done.");
return 0;
}
@@ -235,9 +255,8 @@ public class IslandCommand {
String keyName = StringArgumentType.getString(context, "key");
Integer value = IntegerArgumentType.getInteger(context, "value");
-
-
player.getWorld().getPersistentDataContainer().set(new NamespacedKey(plugin, keyName), PersistentDataType.INTEGER, value);
+ context.getSource().getSender().sendMessage(keyName + " set to " + value);
return 1;
}
@@ -248,7 +267,8 @@ public class IslandCommand {
String value = StringArgumentType.getString(context, "value");
player.getWorld().getPersistentDataContainer().set(new NamespacedKey(plugin, keyName), PersistentDataType.STRING, value);
-
+ context.getSource().getSender().sendMessage(keyName + " set to " + value);
+
return 1;
}
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandManager.java b/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandManager.java
index 9cbaec9..12ee841 100644
--- a/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandManager.java
+++ b/src/main/java/xyz/soukup/ecoCraftCore/islands/IslandManager.java
@@ -16,7 +16,6 @@ import com.j256.ormlite.stmt.QueryBuilder;
import com.j256.ormlite.stmt.UpdateBuilder;
import org.bukkit.*;
import org.bukkit.entity.Player;
-import org.bukkit.persistence.PersistentDataContainer;
import org.bukkit.persistence.PersistentDataType;
import xyz.soukup.ecoCraftCore.database.objects.Island;
import xyz.soukup.ecoCraftCore.database.DaoRegistry;
@@ -75,8 +74,6 @@ public class IslandManager {
props.setValue(SlimeProperties.SPAWN_Z, 0);
slimeWorld = asp.createEmptyWorld(uuid, false, props, databaseLoader);
-
-
asp.saveWorld(slimeWorld);
}
@@ -90,25 +87,32 @@ public class IslandManager {
- public void teleport(Player player, String uuid) throws Exception {
- teleport(player, uuid, null, null, null, null, null);
+ public int teleport(Player player, String uuid) throws Exception {
+ return teleport(player, uuid, null, null, null, null, null);
+
}
- public void teleport(Player player, String uuid, Integer x, Integer y, Integer z, Float yaw, Float pitch) throws Exception {
+ public int teleport(Player player, String uuid, Integer x, Integer y, Integer z, Float yaw, Float pitch) throws Exception {
+
+ if(uuid == null) return 4;
+
if (Bukkit.getWorld(uuid) != null){
teleportLocally(player, uuid, x, y, z, yaw, pitch);
+ return 2;
}
String whereIsActive = whereIsActive(uuid);
- if (whereIsActive != null){
+ if (whereIsActive != null && !whereIsActive.isEmpty()){
+ plugin.getLogger().info("dd: "+ whereIsActive);
sendPlayerAway(player, whereIsActive, uuid, x, y, z, yaw, pitch);
+ return 3;
}
QueryBuilder queryBuilder = dao.queryBuilder().setCountOf(true);
queryBuilder.where().eq("uuid", uuid);
if (dao.countOf(queryBuilder.prepare()) < 1){
- return;
+ return 1;
}
if (player.getVirtualHost() != null){
@@ -120,6 +124,7 @@ public class IslandManager {
}
teleportLocally(player, uuid, x, y, z, yaw, pitch);
+ return 0;
}
@@ -271,7 +276,7 @@ public class IslandManager {
switch (islandType){
case "flat_grass" -> flatExpander(world, yaw, lenght, Material.GRASS_BLOCK, Material.STONE, Material.WATER);
case "flat_sand" -> flatExpander(world, yaw, lenght, Material.SAND, Material.STONE, Material.WATER);
- case "flat_hell" -> flatExpander(world, yaw, lenght, Material.SOUL_SOIL, Material.NETHERRACK, Material.LAVA);
+ case "flat_hell" -> flatExpander(world, yaw, lenght, Material.SOUL_SAND, Material.NETHERRACK, Material.LAVA);
}
@@ -384,8 +389,9 @@ public class IslandManager {
if ((x >= xMin && x <= xMax) && (z >= zMin && z <= zMax)) {
continue;
}
- world.setType(x, y, z, surrounding);
- world.setType(x, y+1, z, surrounding);
+ world.getBlockAt(x,y,z).setType(surrounding, false);
+ world.getBlockAt(x,y+1,z).setType(surrounding, false);
+
}
}
;
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/player/OnKill.java b/src/main/java/xyz/soukup/ecoCraftCore/player/OnKill.java
new file mode 100644
index 0000000..51bfd46
--- /dev/null
+++ b/src/main/java/xyz/soukup/ecoCraftCore/player/OnKill.java
@@ -0,0 +1,27 @@
+package xyz.soukup.ecoCraftCore.player;
+
+import com.destroystokyo.paper.event.player.PlayerPostRespawnEvent;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.entity.PlayerDeathEvent;
+import org.bukkit.event.player.PlayerRespawnEvent;
+import xyz.soukup.ecoCraftCore.islands.IslandManager;
+
+import static xyz.soukup.ecoCraftCore.EcoCraftCore.config;
+
+public class OnKill implements Listener {
+ @EventHandler
+ public void spawnTeleportOnKill(PlayerPostRespawnEvent event){
+ Player player = event.getPlayer();
+
+ String uuid = config.getString("islands.spawn");
+
+ IslandManager islandManager = new IslandManager();
+ try {
+ islandManager.teleport(player, uuid);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/src/main/java/xyz/soukup/ecoCraftCore/player/TeleportRequestsHandler.java b/src/main/java/xyz/soukup/ecoCraftCore/player/TeleportRequestsHandler.java
index 99ac37b..56a7c25 100644
--- a/src/main/java/xyz/soukup/ecoCraftCore/player/TeleportRequestsHandler.java
+++ b/src/main/java/xyz/soukup/ecoCraftCore/player/TeleportRequestsHandler.java
@@ -1,9 +1,11 @@
package xyz.soukup.ecoCraftCore.player;
+import com.google.common.eventbus.DeadEvent;
import com.j256.ormlite.stmt.QueryBuilder;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
+import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import xyz.soukup.ecoCraftCore.database.DaoRegistry;
import xyz.soukup.ecoCraftCore.database.objects.TeleportRequest;
@@ -11,6 +13,8 @@ import xyz.soukup.ecoCraftCore.islands.IslandManager;
import java.sql.SQLException;
+import static xyz.soukup.ecoCraftCore.EcoCraftCore.config;
+
public class TeleportRequestsHandler implements Listener {
@EventHandler
@@ -23,11 +27,14 @@ public class TeleportRequestsHandler implements Listener {
TeleportRequest teleportRequest = queryBuilder.queryForFirst();
+ IslandManager islandManager = new IslandManager();
+
+
if (teleportRequest == null){
+ islandManager.teleport(player, config.getString("islands.spawn"));
return;
}
- IslandManager islandManager = new IslandManager();
islandManager.teleportLocally(player, teleportRequest.getWorld(), teleportRequest.getX(), teleportRequest.getY(), teleportRequest.getY(), teleportRequest.getYaw(), teleportRequest.getPitch());
@@ -35,6 +42,9 @@ public class TeleportRequestsHandler implements Listener {
} catch (SQLException e) {
throw new RuntimeException(e);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
}
}
+
}
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index af80369..3d9ced4 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -9,4 +9,6 @@ database:
password: "ecc"
database: "ecc"
cache:
- save-interval: 6000
\ No newline at end of file
+ save-interval: 6000
+islands:
+ spawn: null
\ No newline at end of file
diff --git a/src/main/resources/island_templates/flat_grass.slime b/src/main/resources/island_templates/flat_grass.slime
new file mode 100644
index 0000000..7345ce4
Binary files /dev/null and b/src/main/resources/island_templates/flat_grass.slime differ
diff --git a/src/main/resources/island_templates/flat_hell.slime b/src/main/resources/island_templates/flat_hell.slime
new file mode 100644
index 0000000..b047926
Binary files /dev/null and b/src/main/resources/island_templates/flat_hell.slime differ
diff --git a/src/main/resources/island_templates/flat_sand.slime b/src/main/resources/island_templates/flat_sand.slime
new file mode 100644
index 0000000..7874e7e
Binary files /dev/null and b/src/main/resources/island_templates/flat_sand.slime differ