- databázové údaje z configu

- templates v resources
- fix active_on
- default spawn server
island-experimenty
jakub 2 weeks ago
parent 33fe586033
commit 8002ad6ec8
  1. 13
      pom.xml
  2. 26
      src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java
  3. 1
      src/main/java/xyz/soukup/ecoCraftCore/islands/ChunkModifier.java
  4. 62
      src/main/java/xyz/soukup/ecoCraftCore/islands/IslandAdminCommand.java
  5. 28
      src/main/java/xyz/soukup/ecoCraftCore/islands/IslandManager.java
  6. 27
      src/main/java/xyz/soukup/ecoCraftCore/player/OnKill.java
  7. 12
      src/main/java/xyz/soukup/ecoCraftCore/player/TeleportRequestsHandler.java
  8. 4
      src/main/resources/config.yml
  9. BIN
      src/main/resources/island_templates/flat_grass.slime
  10. BIN
      src/main/resources/island_templates/flat_hell.slime
  11. BIN
      src/main/resources/island_templates/flat_sand.slime

@ -79,9 +79,22 @@
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.yml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>**/*.slime</include>
</includes>
</resource>
</resources>
</build>

@ -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);

@ -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;

@ -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<CommandSourceStack> tp = Commands.literal("tp")
.then(Commands.argument("uuid", StringArgumentType.word())
.executes(IslandCommand::teleport)
.executes(IslandAdminCommand::teleport)
.suggests(((context, builder) -> {
try {
QueryBuilder<Island, Integer> 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<CommandSourceStack> 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<CommandSourceStack> 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<CommandSourceStack> 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<CommandSourceStack> metadata = Commands.literal("metadata")
.then(Commands.argument("key", StringArgumentType.word())
.then(Commands.argument("value", IntegerArgumentType.integer())
.executes(IslandCommand::setMetadata)));
.executes(IslandAdminCommand::setMetadata)));
LiteralArgumentBuilder<CommandSourceStack> metadataString = Commands.literal("metadataString")
.then(Commands.argument("key", StringArgumentType.word())
.then(Commands.argument("value", StringArgumentType.string())
.executes(IslandCommand::setMetadataString)));
.executes(IslandAdminCommand::setMetadataString)));
LiteralArgumentBuilder<CommandSourceStack> expand = Commands.literal("expand")
.then(Commands.argument("lenght", IntegerArgumentType.integer())
.executes(IslandCommand::expandIsland));
.executes(IslandAdminCommand::expandIsland));
LiteralArgumentBuilder<CommandSourceStack> listMetadata = Commands.literal("listMetadata")
.executes(IslandCommand::readAllMetadata);
.executes(IslandAdminCommand::readAllMetadata);
LiteralArgumentBuilder<CommandSourceStack> spawn = Commands.literal("spawn")
.executes(IslandCommand::setSpawn);
.executes(IslandAdminCommand::setSpawn);
LiteralArgumentBuilder<CommandSourceStack> 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<CommandSourceStack> 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<CommandSourceStack> 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<CommandSourceStack> 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<CommandSourceStack> context) {
IslandManager islandManager = new IslandManager();
islandManager.loadIsland(context.getArgument("uuid", String.class));
context.getSource().getSender().sendMessage("done.");
return 0;
}
private static int loadTemplate(CommandContext<CommandSourceStack> 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;
}

@ -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<Island, Integer> 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);
}
}
;

@ -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);
}
}
}

@ -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);
}
}
}

@ -9,4 +9,6 @@ database:
password: "ecc"
database: "ecc"
cache:
save-interval: 6000
save-interval: 6000
islands:
spawn: null
Loading…
Cancel
Save