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;
+ }
+
+}