diff --git a/plugin.yml b/plugin.yml
index 482da85..a45972d 100644
--- a/plugin.yml
+++ b/plugin.yml
@@ -3,6 +3,7 @@ main: me.EtienneDx.RealEstate.RealEstate
version: ${project.version}
authors: [EtienneDx, DmitryRendov, FamousLongwing]
depend: [Vault, GriefPrevention]
+softdepend: [WorldEdit]
api-version: "1.20"
commands:
diff --git a/pom.xml b/pom.xml
index ed71994..2949768 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,8 +29,8 @@
maven-compiler-plugin
3.8.1
- 16
- 16
+ 17
+ 17
@@ -96,6 +96,10 @@
+
+ enginehub-maven
+ https://maven.enginehub.org/repo/
+
spigot-repo
https://hub.spigotmc.org/nexus/content/repositories/snapshots/
@@ -163,7 +167,19 @@
com.github.EtienneDx
AnnotationConfig
e9eab24
-
+
+
+ com.sk89q.worldedit
+ worldedit-core
+ 7.2.0-SNAPSHOT
+ provided
+
+
+ com.sk89q.worldedit
+ worldedit-bukkit
+ 7.2.0-SNAPSHOT
+ provided
+
diff --git a/src/me/EtienneDx/RealEstate/Config.java b/src/me/EtienneDx/RealEstate/Config.java
index f57d493..60650d0 100644
--- a/src/me/EtienneDx/RealEstate/Config.java
+++ b/src/me/EtienneDx/RealEstate/Config.java
@@ -101,7 +101,8 @@ public class Config extends AnnotationConfig
@ConfigField(name="RealEstate.Settings.MessagesFiles", comment="Language file to be used. You can see all languages files in the languages directory. If the language file does not exist, it will be created and you'll be able to modify it later on.")
public String languageFile = "en.yml";
-
+ @ConfigField(name="RealEstate.Settings.UseWorldEdit", comment="This setting specifies whether we should restore rental areas to the state it was in before the are was rented")
+ public boolean RestoreRentalState=false; //this will destroy whatever was added during rental period to start with, will default to true once I save the items as rental period ends.
public Config()
{
this.pdf = RealEstate.instance.getDescription();
diff --git a/src/me/EtienneDx/RealEstate/REListener.java b/src/me/EtienneDx/RealEstate/REListener.java
index 45d1b8f..25b3d05 100644
--- a/src/me/EtienneDx/RealEstate/REListener.java
+++ b/src/me/EtienneDx/RealEstate/REListener.java
@@ -409,6 +409,7 @@ public class REListener implements Listener
if(event.getAction().equals(Action.RIGHT_CLICK_BLOCK) && event.getHand().equals(EquipmentSlot.HAND) &&
event.getClickedBlock().getState() instanceof Sign)
{
+
Sign sign = (Sign)event.getClickedBlock().getState();
RealEstate.instance.log.info(sign.getLine(0));
// it is a real estate sign
@@ -427,6 +428,7 @@ public class REListener implements Listener
}
Transaction tr = RealEstate.transactionsStore.getTransaction(claim);
+
if(player.isSneaking())
tr.preview(player);
else
diff --git a/src/me/EtienneDx/RealEstate/RealEstate.java b/src/me/EtienneDx/RealEstate/RealEstate.java
index 35ae8f6..1bfa021 100644
--- a/src/me/EtienneDx/RealEstate/RealEstate.java
+++ b/src/me/EtienneDx/RealEstate/RealEstate.java
@@ -46,6 +46,7 @@ public class RealEstate extends JavaPlugin
public final static String pluginDirPath = "plugins" + File.separator + "RealEstate" + File.separator;
final static String languagesDirectory = RealEstate.pluginDirPath + "languages";
public static boolean vaultPresent = false;
+ public static boolean worldEditPresent = false;
public static Economy econ = null;
public static Permission perms = null;
public static Essentials ess = null;
@@ -86,6 +87,13 @@ public class RealEstate extends JavaPlugin
return;
}
}
+ if (checkWorldEdit())
+ {
+ org.bukkit.plugin.Plugin WorldEditPlugin=getServer().getPluginManager().getPlugin("WorldEdit");
+ this.log.info("Found WorldEdit, using version "+WorldEditPlugin.getDescription().getVersion());
+
+
+ }
if(getServer().getPluginManager().getPlugin("Essentials") != null)
{
org.bukkit.plugin.Plugin ess=getServer().getPluginManager().getPlugin("Essentials");
@@ -267,6 +275,11 @@ public class RealEstate extends JavaPlugin
return vaultPresent;
}
+ private boolean checkWorldEdit()
+ {
+ worldEditPresent = getServer().getPluginManager().getPlugin("WorldEdit") !=null;
+ return worldEditPresent;
+ }
private boolean setupEconomy()
{
RegisteredServiceProvider rsp = getServer().getServicesManager().getRegistration(Economy.class);
diff --git a/src/me/EtienneDx/RealEstate/Transactions/ClaimLease.java b/src/me/EtienneDx/RealEstate/Transactions/ClaimLease.java
index 9a7e122..9bd8121 100644
--- a/src/me/EtienneDx/RealEstate/Transactions/ClaimLease.java
+++ b/src/me/EtienneDx/RealEstate/Transactions/ClaimLease.java
@@ -66,6 +66,7 @@ public class ClaimLease extends BoughtTransaction
if(sign.getBlock().getState() instanceof Sign)
{
Sign s = (Sign)sign.getBlock().getState();
+ s.setWaxed(true);
s.setLine(0, Messages.getMessage(RealEstate.instance.config.cfgSignsHeader, false));
s.setLine(1, ChatColor.DARK_GREEN + RealEstate.instance.config.cfgReplaceLease);
//s.setLine(2, owner != null ? Bukkit.getOfflinePlayer(owner).getName() : "SERVER");
diff --git a/src/me/EtienneDx/RealEstate/Transactions/ClaimRent.java b/src/me/EtienneDx/RealEstate/Transactions/ClaimRent.java
index 68541a2..33aa88c 100644
--- a/src/me/EtienneDx/RealEstate/Transactions/ClaimRent.java
+++ b/src/me/EtienneDx/RealEstate/Transactions/ClaimRent.java
@@ -1,5 +1,8 @@
package me.EtienneDx.RealEstate.Transactions;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
@@ -8,7 +11,6 @@ import java.time.Period;
import java.time.format.DateTimeFormatter;
import java.util.Map;
-
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.OfflinePlayer;
@@ -17,6 +19,23 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import com.earth2me.essentials.User;
+import com.sk89q.worldedit.EditSession;
+import com.sk89q.worldedit.WorldEdit;
+import com.sk89q.worldedit.WorldEditException;
+import com.sk89q.worldedit.bukkit.BukkitAdapter;
+import com.sk89q.worldedit.extent.clipboard.BlockArrayClipboard;
+import com.sk89q.worldedit.extent.clipboard.Clipboard;
+import com.sk89q.worldedit.extent.clipboard.io.BuiltInClipboardFormat;
+import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat;
+import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats;
+import com.sk89q.worldedit.extent.clipboard.io.ClipboardReader;
+import com.sk89q.worldedit.extent.clipboard.io.ClipboardWriter;
+import com.sk89q.worldedit.function.operation.ForwardExtentCopy;
+import com.sk89q.worldedit.function.operation.Operation;
+import com.sk89q.worldedit.function.operation.Operations;
+import com.sk89q.worldedit.math.BlockVector3;
+import com.sk89q.worldedit.regions.CuboidRegion;
+import com.sk89q.worldedit.session.ClipboardHolder;
import me.EtienneDx.RealEstate.Messages;
import me.EtienneDx.RealEstate.RealEstate;
@@ -58,6 +77,41 @@ public class ClaimRent extends BoughtTransaction
this.duration = duration;
this.maxPeriod = RealEstate.instance.config.cfgEnableRentPeriod ? rentPeriods : 1;
this.buildTrust = buildTrust;
+ //if worldedit saving is requested, here's where i think... to do it..
+ if(RealEstate.instance.getServer().getPluginManager().getPlugin("WorldEdit")!=null) //is world edit installed?
+ {
+ if(RealEstate.instance.config.RestoreRentalState)//are we configured to use it?
+ {
+
+ Location lesser=claim.getLesserBoundaryCorner();
+ Location greater=claim.getGreaterBoundaryCorner();
+ CuboidRegion region = new CuboidRegion(BlockVector3.at(lesser.getX(), lesser.getWorld().getMinHeight(), lesser.getZ()),BlockVector3.at(greater.getX(),greater.getWorld().getMaxHeight(),greater.getZ()));
+ BlockArrayClipboard clipboard = new BlockArrayClipboard (region);
+ com.sk89q.worldedit.world.World adaptedworld= BukkitAdapter.adapt(lesser.getWorld());
+ EditSession editSession=WorldEdit.getInstance().newEditSession(adaptedworld);
+ ForwardExtentCopy CopyArea=new ForwardExtentCopy(editSession,region,clipboard,region.getMinimumPoint());
+ try {
+ Operations.complete(CopyArea);
+ } catch (WorldEditException e) {
+
+ RealEstate.instance.log.info("Failed to copy rental area, WorldEdit gives error: "+e.getMessage());
+ }
+
+
+ String schempath = RealEstate.pluginDirPath + "/schematics/"+claim.getID().toString()+".schem";
+ File file = new File(schempath);
+ try (ClipboardWriter writer = BuiltInClipboardFormat.SPONGE_SCHEMATIC.getWriter(new FileOutputStream(file))) {
+ writer.write(clipboard);
+ }
+ catch (Exception e)
+ {
+ RealEstate.instance.log.info("Failed to copy rental area, Writing out schematic failed: "+e.getMessage());
+ }
+
+
+ }
+
+ }
}
@Override
@@ -83,6 +137,7 @@ public class ClaimRent extends BoughtTransaction
if(sign.getBlock().getState() instanceof Sign)
{
Sign s = (Sign) sign.getBlock().getState();
+ s.setWaxed(true);
s.setLine(0, Messages.getMessage(RealEstate.instance.config.cfgSignsHeader, false));
s.setLine(1, ChatColor.DARK_GREEN + RealEstate.instance.config.cfgReplaceRent);
//s.setLine(2, owner != null ? Bukkit.getOfflinePlayer(owner).getName() : "SERVER");
@@ -178,6 +233,45 @@ public class ClaimRent extends BoughtTransaction
}
buyer = null;
RealEstate.transactionsStore.saveData();
+ //if worldedit saving is requested, here's where i think... to do it..
+ if(RealEstate.instance.getServer().getPluginManager().getPlugin("WorldEdit")!=null) //is world edit installed?
+ {
+ if(RealEstate.instance.config.RestoreRentalState)//are we configured to use it?
+ {
+ //load schematic, paste where we got it.
+ String schempath = RealEstate.pluginDirPath + "/schematics/"+claim.getID().toString()+".schem";
+ File file = new File(schempath);
+ Clipboard clipboard =null;
+ ClipboardFormat format= ClipboardFormats.findByFile(file);
+ try (ClipboardReader reader = format.getReader(new FileInputStream(file))) {
+ clipboard = reader.read();
+ }
+ catch (Exception e)
+ {
+ RealEstate.instance.log.info("Failed to import previously saved schematic: "+e.getMessage());
+ update();
+ return;
+ }
+ Location lesser=claim.getLesserBoundaryCorner();
+
+ com.sk89q.worldedit.world.World world = BukkitAdapter.adapt(lesser.getWorld());
+ try (EditSession editSession = WorldEdit.getInstance().newEditSession(world)) {
+ Operation operation = new ClipboardHolder(clipboard)
+ .createPaste(editSession)
+ .to(BlockVector3.at(lesser.getX(), lesser.getWorld().getMinHeight(), lesser.getZ()))
+ // configure here
+ .build();
+ Operations.complete(operation);
+ }
+ catch(Exception e)
+ {
+ RealEstate.instance.log.info("Failed to paste initial schematic: "+e.getMessage());
+ update();
+ return;
+
+ }
+ }
+ }
update();
}
diff --git a/src/me/EtienneDx/RealEstate/Transactions/ClaimSell.java b/src/me/EtienneDx/RealEstate/Transactions/ClaimSell.java
index 406e2b3..d3ac429 100644
--- a/src/me/EtienneDx/RealEstate/Transactions/ClaimSell.java
+++ b/src/me/EtienneDx/RealEstate/Transactions/ClaimSell.java
@@ -38,6 +38,7 @@ public class ClaimSell extends ClaimTransaction
if(sign.getBlock().getState() instanceof Sign)
{
Sign s = (Sign) sign.getBlock().getState();
+ s.setWaxed(true);
s.setLine(0, Messages.getMessage(RealEstate.instance.config.cfgSignsHeader, false));
s.setLine(1, ChatColor.DARK_GREEN + RealEstate.instance.config.cfgReplaceSell);
s.setLine(2, owner != null ? Utils.getSignString(Bukkit.getOfflinePlayer(owner).getName()) : "SERVER");