diff --git a/pom.xml b/pom.xml index 7af17b8..8fbebce 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.modnmetl virtualrealty - 2.5.0 + 2.5.3 jar A plot creation and management plugin for Minecraft @@ -40,6 +40,10 @@ org.apache.commons.io com.modnmetl.virtualrealty.utils.apache + + de.tr7zw.changeme + com.modnmetl.virtualrealty.utils.nbtapi + @@ -72,6 +76,10 @@ + + spigot-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + papermc-repo https://papermc.io/repo/repository/maven-public/ @@ -100,16 +108,11 @@ + - org.jetbrains - annotations - 23.0.0 - provided - - - org.spigot - spigot - 1.13.2 + org.spigotmc + spigot-api + 1.13.2-R0.1-SNAPSHOT provided @@ -124,6 +127,12 @@ 3.0.0 compile + + org.jetbrains + annotations + 23.1.0 + provided + eu.okaeri okaeri-configs-yaml-bukkit @@ -160,12 +169,12 @@ 2.10.9 provided - - com.modnmetl - virtualrealty-premium - 2.1.0 - provided - + + + + + + org.projectlombok lombok @@ -174,14 +183,14 @@ de.tr7zw - item-nbt-api-plugin - 2.10.0 + item-nbt-api + 2.11.3 compile com.zaxxer HikariCP - 5.0.1 + 4.0.3 compile diff --git a/src/main/java/com/modnmetl/virtualrealty/configs/PluginConfiguration.java b/src/main/java/com/modnmetl/virtualrealty/configs/PluginConfiguration.java index effab4a..e57facd 100644 --- a/src/main/java/com/modnmetl/virtualrealty/configs/PluginConfiguration.java +++ b/src/main/java/com/modnmetl/virtualrealty/configs/PluginConfiguration.java @@ -55,10 +55,10 @@ public static class License extends OkaeriConfig { @CustomKey("default-plot-gamemode") public String plotGamemode = "SURVIVAL"; - @Comment("Disable natural spawning of monster mobs in plots/areas") + @Comment("Disable natural spawning of all mobs in plots/areas") public boolean disablePlotMobsSpawn = false; - @Comment("Disable natural spawning of all mobs in plots/areas") + @Comment("Disable natural spawning of monster mobs in plots/areas") public boolean disablePlotMonsterSpawn = false; @Comment("Worlds restrictions setting ( ALL | INCLUDED | EXCLUDED )") diff --git a/src/main/java/com/modnmetl/virtualrealty/listener/player/PlayerActionListener.java b/src/main/java/com/modnmetl/virtualrealty/listener/player/PlayerActionListener.java index 6662a5d..bcc5e17 100644 --- a/src/main/java/com/modnmetl/virtualrealty/listener/player/PlayerActionListener.java +++ b/src/main/java/com/modnmetl/virtualrealty/listener/player/PlayerActionListener.java @@ -17,12 +17,13 @@ import com.modnmetl.virtualrealty.model.region.GridStructure; import com.modnmetl.virtualrealty.util.RegionUtil; import com.modnmetl.virtualrealty.model.other.ChatMessage; -import de.tr7zw.nbtapi.NBTItem; +import de.tr7zw.changeme.nbtapi.NBTItem; import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.HoverEvent; import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.Bukkit; +import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -68,7 +69,7 @@ public void run() { @EventHandler public void onPlotItemStake(PlayerInteractEvent e) { Player player = e.getPlayer(); - if (e.getHand() == EquipmentSlot.OFF_HAND) return; + if (!VirtualRealty.legacyVersion && e.getHand() == EquipmentSlot.OFF_HAND) return; if (!(e.getAction() == Action.LEFT_CLICK_AIR || e.getAction() == Action.LEFT_CLICK_BLOCK)) return; if (!DraftListener.DRAFT_MAP.containsKey(player)) return; e.setCancelled(true); @@ -90,7 +91,11 @@ public void onPlotItemStake(PlayerInteractEvent e) { @Override public void success() { ItemStack plotItemStack = DraftListener.DRAFT_MAP.get(this.getSender()).getValue().getValue().getItemStack(); - this.getSender().getInventory().remove(plotItemStack); + int firstPlotItemStack = this.getSender().getInventory().first(plotItemStack); + boolean foundItemStack = firstPlotItemStack != -1; + if (foundItemStack) { + this.getSender().getInventory().clear(firstPlotItemStack); + } plot.setOwnedBy(this.getSender().getUniqueId()); plot.setOwnedUntilDate(LocalDateTime.now().plusDays(plotItem.getAdditionalDays())); gridStructure.removeGrid(); @@ -132,7 +137,11 @@ public void expiry() { public void success() { PlotItem plotItem = DraftListener.DRAFT_MAP.get(this.getSender()).getValue().getKey(); ItemStack plotItemStack = DraftListener.DRAFT_MAP.get(this.getSender()).getValue().getValue().getItemStack(); - this.getSender().getInventory().remove(plotItemStack); + int firstPlotItemStack = this.getSender().getInventory().first(plotItemStack); + boolean foundItemStack = firstPlotItemStack != -1; + if (foundItemStack) { + this.getSender().getInventory().clear(firstPlotItemStack); + } if (plot.isOwnershipExpired()) plot.setOwnedUntilDate(LocalDateTime.now().plusDays(plotItem.getAdditionalDays())); else @@ -190,12 +199,23 @@ public void success() { GridStructure gridStructure = DraftListener.DRAFT_MAP.get(this.getSender()).getKey(); PlotItem plotItem = DraftListener.DRAFT_MAP.get(this.getSender()).getValue().getKey(); PlotSize plotSize = plotItem.getPlotSize(); + int length = plotItem.getLength(); + int height = plotItem.getHeight(); + int width = plotItem.getWidth(); ItemStack plotItemStack = DraftListener.DRAFT_MAP.get(this.getSender()).getValue().getValue().getItemStack(); NBTItem item = new NBTItem(plotItemStack); gridStructure.removeGrid(); this.getSender().sendMessage(VirtualRealty.PREFIX + VirtualRealty.getMessages().notCollidingCreating); long timeStart = System.currentTimeMillis(); - Plot plot = PlotManager.getInstance().createPlot(gridStructure.getPreviewLocation().subtract(0, 1, 0), plotSize, plotItem.isNatural()); + Plot plot; + Location location = gridStructure.getPreviewLocation().subtract(0, 1, 0); + if (plotSize == PlotSize.AREA) { + plot = PlotManager.getInstance().createArea(location, length, height, width); + } else if (plotSize == PlotSize.CUSTOM) { + plot = PlotManager.getInstance().createCustomPlot(location, length, height, width, plotItem.isNatural()); + } else { + plot = PlotManager.getInstance().createPlot(location, plotSize, plotItem.isNatural()); + } AbstractMap.SimpleEntry floorData = new AbstractMap.SimpleEntry<>(item.getString("vrplot_floor_material"), item.getByte("vrplot_floor_data")); AbstractMap.SimpleEntry borderData = new AbstractMap.SimpleEntry<>(item.getString("vrplot_border_material"), item.getByte("vrplot_border_data")); if (!plotItem.isNatural()) { @@ -213,7 +233,11 @@ public void success() { } else { plot.setOwnedUntilDate(LocalDateTime.now().plusDays(plotItem.getAdditionalDays())); } - this.getSender().getInventory().remove(plotItemStack); + int firstPlotItemStack = this.getSender().getInventory().first(plotItemStack); + boolean foundItemStack = firstPlotItemStack != -1; + if (foundItemStack) { + this.getSender().getInventory().clear(firstPlotItemStack); + } long timeEnd = System.currentTimeMillis(); BaseComponent textComponent = new TextComponent(VirtualRealty.PREFIX + VirtualRealty.getMessages().creationPlotComponent1); BaseComponent textComponent2 = new TextComponent(VirtualRealty.getMessages().creationPlotComponent2.replaceAll("%plot_id%", String.valueOf(plot.getID()))); @@ -257,7 +281,7 @@ public void expiry() { @EventHandler public void onPlotItemDraft(PlayerInteractEvent e) { Player player = e.getPlayer(); - if (e.getHand() == EquipmentSlot.OFF_HAND) return; + if (!VirtualRealty.legacyVersion && e.getHand() == EquipmentSlot.OFF_HAND) return; if (!(e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK)) return; if (DraftListener.DRAFT_MAP.containsKey(player)) { e.setCancelled(true); diff --git a/src/main/java/com/modnmetl/virtualrealty/listener/stake/ConfirmationListener.java b/src/main/java/com/modnmetl/virtualrealty/listener/stake/ConfirmationListener.java index ec5efda..ae1008a 100644 --- a/src/main/java/com/modnmetl/virtualrealty/listener/stake/ConfirmationListener.java +++ b/src/main/java/com/modnmetl/virtualrealty/listener/stake/ConfirmationListener.java @@ -25,7 +25,7 @@ public void onChat(AsyncPlayerChatEvent e) { new BukkitRunnable() { @Override public void run() { - if (confirmation.getProceedText().equalsIgnoreCase(e.getMessage())) { + if (e.getMessage().matches(".*(?i)" + confirmation.getProceedText() +".*")) { confirmation.success(); } else { confirmation.failed(); diff --git a/src/main/java/com/modnmetl/virtualrealty/listener/stake/DraftListener.java b/src/main/java/com/modnmetl/virtualrealty/listener/stake/DraftListener.java index 38c9f70..7ade6fc 100644 --- a/src/main/java/com/modnmetl/virtualrealty/listener/stake/DraftListener.java +++ b/src/main/java/com/modnmetl/virtualrealty/listener/stake/DraftListener.java @@ -4,7 +4,7 @@ import com.modnmetl.virtualrealty.listener.VirtualListener; import com.modnmetl.virtualrealty.model.plot.PlotItem; import com.modnmetl.virtualrealty.model.region.GridStructure; -import de.tr7zw.nbtapi.NBTItem; +import de.tr7zw.changeme.nbtapi.NBTItem; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; diff --git a/src/main/java/com/modnmetl/virtualrealty/model/material/DoorMaterial.java b/src/main/java/com/modnmetl/virtualrealty/model/material/DoorMaterial.java index 4df87a3..872d5a8 100644 --- a/src/main/java/com/modnmetl/virtualrealty/model/material/DoorMaterial.java +++ b/src/main/java/com/modnmetl/virtualrealty/model/material/DoorMaterial.java @@ -14,4 +14,4 @@ public enum DoorMaterial { OAK_DOOR, SPRUCE_DOOR -} +} \ No newline at end of file diff --git a/src/main/java/com/modnmetl/virtualrealty/model/other/ChatMessage.java b/src/main/java/com/modnmetl/virtualrealty/model/other/ChatMessage.java index db3381f..bb07237 100644 --- a/src/main/java/com/modnmetl/virtualrealty/model/other/ChatMessage.java +++ b/src/main/java/com/modnmetl/virtualrealty/model/other/ChatMessage.java @@ -4,6 +4,7 @@ import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; public class ChatMessage { @@ -29,12 +30,20 @@ public static ChatMessage of(BaseComponent message) { return new ChatMessage(message); } - public void sendWithPrefix(CommandSender player) { - player.spigot().sendMessage(new TextComponent(VirtualRealty.PREFIX), message); + public void sendWithPrefix(CommandSender sender) { + if (sender instanceof Player) { + ((Player)sender).spigot().sendMessage(new TextComponent(VirtualRealty.PREFIX), message); + } else { + sender.sendMessage(VirtualRealty.PREFIX + message.toLegacyText()); + } } - public void send(CommandSender player) { - player.spigot().sendMessage(message); + public void send(CommandSender sender) { + if (sender instanceof Player) { + ((Player)sender).spigot().sendMessage(message); + } else { + sender.sendMessage(message.toLegacyText()); + } } } diff --git a/src/main/java/com/modnmetl/virtualrealty/model/plot/PlotItem.java b/src/main/java/com/modnmetl/virtualrealty/model/plot/PlotItem.java index 5a5704f..51a4c07 100644 --- a/src/main/java/com/modnmetl/virtualrealty/model/plot/PlotItem.java +++ b/src/main/java/com/modnmetl/virtualrealty/model/plot/PlotItem.java @@ -4,7 +4,7 @@ import com.modnmetl.virtualrealty.model.other.VItem; import com.modnmetl.virtualrealty.util.data.ItemBuilder; import com.modnmetl.virtualrealty.util.data.SkullUtil; -import de.tr7zw.nbtapi.NBTItem; +import de.tr7zw.changeme.nbtapi.NBTItem; import lombok.AllArgsConstructor; import lombok.Data; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/modnmetl/virtualrealty/sql/Database.java b/src/main/java/com/modnmetl/virtualrealty/sql/Database.java index 43d2776..756cdc0 100644 --- a/src/main/java/com/modnmetl/virtualrealty/sql/Database.java +++ b/src/main/java/com/modnmetl/virtualrealty/sql/Database.java @@ -10,10 +10,7 @@ import javax.sql.DataSource; import java.io.File; import java.io.PrintWriter; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.SQLException; -import java.sql.Statement; +import java.sql.*; public class Database { @@ -68,6 +65,43 @@ private void createTables() { } catch (Exception e) { e.printStackTrace(); } + switch (this.dataModel) { + case MYSQL: { + try (Connection conn = getConnection(); + PreparedStatement ps = conn.prepareStatement("ALTER TABLE `" + VirtualRealty.getPluginConfiguration().mysql.plotsTableName + "` ADD COLUMN IF NOT EXISTS `depth` INT(24) AFTER `height`;")) { + ps.execute(); + } catch (Exception e) { + e.printStackTrace(); + } + break; + } + case SQLITE: { + // Check if the column already exists + boolean columnExists = false; + try (Connection conn = getConnection(); + ResultSet rs = conn.createStatement().executeQuery("PRAGMA table_info(" + VirtualRealty.getPluginConfiguration().mysql.plotsTableName + ");")) { + while (rs.next()) { + if (rs.getString("name").equalsIgnoreCase("depth")) { + columnExists = true; + break; + } + } + } catch (Exception e) { + e.printStackTrace(); + break; + } + if (!columnExists) { + // Column does not exist, so add it + try (Connection conn = getConnection(); + PreparedStatement ps = conn.prepareStatement("ALTER TABLE `" + VirtualRealty.getPluginConfiguration().mysql.plotsTableName + "` ADD COLUMN `depth` INT(24);")) { + ps.execute(); + } catch (Exception e) { + e.printStackTrace(); + } + } + break; + } + } } public static void connectToDatabase(File databaseFile) throws SQLException { diff --git a/src/main/java/com/modnmetl/virtualrealty/util/NBTUtil.java b/src/main/java/com/modnmetl/virtualrealty/util/NBTUtil.java new file mode 100644 index 0000000..a363772 --- /dev/null +++ b/src/main/java/com/modnmetl/virtualrealty/util/NBTUtil.java @@ -0,0 +1,11 @@ +package com.modnmetl.virtualrealty.util; + +import de.tr7zw.changeme.nbtapi.NBTItem; + +public class NBTUtil { + + public static Class nbtItemClass() { + return NBTItem.class; + } + +}