From e8845cafebdc4f182897d90acdb64628ee0ab8ba Mon Sep 17 00:00:00 2001
From: destro174 <40720638+destro174@users.noreply.github.com>
Date: Mon, 13 Dec 2021 18:15:17 +0100
Subject: [PATCH] Add pl3xmap
diff --git a/pom.xml b/pom.xml
index 015aeb7..18f6fec 100644
--- a/pom.xml
+++ b/pom.xml
@@ -56,6 +56,10 @@
Altitude Maven Repo
https://repo.destro.xyz/snapshots
+
+ jitpack.io
+ https://jitpack.io
+
@@ -204,6 +208,12 @@
mypet
3.11-SNAPSHOT
+
+
+ com.github.NeumimTo
+ Pl3xMap
+ 1.18-2
+
diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/GriefPrevention.java b/src/main/java/me/ryanhamshire/GriefPrevention/GriefPrevention.java
index 475e82e..381107c 100644
--- a/src/main/java/me/ryanhamshire/GriefPrevention/GriefPrevention.java
+++ b/src/main/java/me/ryanhamshire/GriefPrevention/GriefPrevention.java
@@ -21,6 +21,7 @@ package me.ryanhamshire.GriefPrevention;
import me.ryanhamshire.GriefPrevention.DataStore.NoTransferException;
import me.ryanhamshire.GriefPrevention.alttd.ClaimExpireTask;
import me.ryanhamshire.GriefPrevention.alttd.config.Config;
+import me.ryanhamshire.GriefPrevention.alttd.map.hook.Pl3xMapHook;
import me.ryanhamshire.GriefPrevention.events.PreventBlockBreakEvent;
import me.ryanhamshire.GriefPrevention.events.SaveTrappedPlayerEvent;
import me.ryanhamshire.GriefPrevention.events.TrustChangedEvent;
@@ -246,6 +247,7 @@ public class GriefPrevention extends JavaPlugin
private String databaseUserName;
private String databasePassword;
+ private Pl3xMapHook pl3xmapHook;
//how far away to search from a tree trunk for its branch blocks
public static final int TREE_RADIUS = 5;
@@ -400,6 +402,9 @@ public class GriefPrevention extends JavaPlugin
}
new AltitudeListener(this.dataStore, this);
+ if (getServer().getPluginManager().isPluginEnabled("Pl3xMap")) {
+ pl3xmapHook = new Pl3xMapHook(this);
+ }
AddLogEntry("Boot finished.");
try
@@ -3362,6 +3367,10 @@ public class GriefPrevention extends JavaPlugin
//dump any remaining unwritten log entries
this.customLogger.WriteEntries();
+ if (pl3xmapHook != null) {
+ pl3xmapHook.disable();
+ }
+
AddLogEntry("GriefPrevention disabled.");
}
diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/alttd/config/AbstractConfig.java b/src/main/java/me/ryanhamshire/GriefPrevention/alttd/config/AbstractConfig.java
index 958cd91..b55619f 100644
--- a/src/main/java/me/ryanhamshire/GriefPrevention/alttd/config/AbstractConfig.java
+++ b/src/main/java/me/ryanhamshire/GriefPrevention/alttd/config/AbstractConfig.java
@@ -13,6 +13,7 @@ import org.bukkit.inventory.ItemStack;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
+import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
@@ -154,4 +155,22 @@ abstract class AbstractConfig {
return locations;
}
+ Color getColor(String path, Color def) {
+ yaml.addDefault(path, colorToHex(def));
+ return hexToColor(yaml.getString(path, yaml.getString(path)));
+ }
+
+ String colorToHex(final Color color) {
+ return Integer.toHexString(color.getRGB() & 0x00FFFFFF);
+ }
+
+ Color hexToColor(final String hex) {
+ if (hex == null) {
+ return Color.RED;
+ }
+ String stripped = hex.replace("#", "");
+ int rgb = (int) Long.parseLong(stripped, 16);
+ return new Color(rgb);
+ }
+
}
diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/alttd/config/Config.java b/src/main/java/me/ryanhamshire/GriefPrevention/alttd/config/Config.java
index 6e00e16..f3fcabf 100644
--- a/src/main/java/me/ryanhamshire/GriefPrevention/alttd/config/Config.java
+++ b/src/main/java/me/ryanhamshire/GriefPrevention/alttd/config/Config.java
@@ -2,6 +2,7 @@ package me.ryanhamshire.GriefPrevention.alttd.config;
import me.ryanhamshire.GriefPrevention.alttd.config.util.Logger;
+import java.awt.*;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
@@ -58,4 +59,79 @@ public class Config extends AbstractConfig {
}
}
+ public static String CONTROL_LABEL = "GriefPrevention";
+ public static boolean CONTROL_SHOW = true;
+ public static boolean CONTROL_HIDE = false;
+ public static String GRID_CONTROL_LABEL = "Gridlines";
+ public static boolean GRID_CONTROL_SHOW = true;
+ public static boolean GRID_CONTROL_HIDE = true;
+ public static int UPDATE_INTERVAL = 300;
+ public static Color STROKE_COLOR = Color.GREEN;
+ public static int STROKE_WEIGHT = 1;
+ public static double STROKE_OPACITY = 1.0D;
+ public static Color FILL_COLOR = Color.GREEN;
+ public static double FILL_OPACITY = 0.2D;
+
+ public static Color ADMIN_STROKE_COLOR = Color.BLUE;
+ public static int ADMIN_STROKE_WEIGHT = 1;
+ public static double ADMIN_STROKE_OPACITY = 1.0D;
+ public static Color ADMIN_FILL_COLOR = Color.BLUE;
+ public static double ADMIN_FILL_OPACITY = 0.2D;
+
+ public static Color EXPIRING_STROKE_COLOR = Color.PINK;
+ public static int EXPIRING_STROKE_WEIGHT = 1;
+ public static double EXPIRING_STROKE_OPACITY = 1.0D;
+ public static Color EXPIRING_FILL_COLOR = Color.PINK;
+ public static double EXPIRING_FILL_OPACITY = 0.2D;
+
+ public static String STRINGS_PUBLIC = "Public";
+ public static String CLAIM_TOOLTIP = "Claim Owner: {owner}
" +
+ "Permission Trust: {managers}
" +
+ "Trust: {builders}
" +
+ "Container Trust: {containers}
" +
+ "Access Trust: {accessors}";
+ public static String ADMIN_CLAIM_TOOLTIP = "Administrator Claim
" +
+ "Permission Trust: {managers}
" +
+ "Trust: {builders}
" +
+ "Container Trust: {containers}
" +
+ "Access Trust: {accessors}";
+ public static String EXPIRING_CLAIM_TOOLTIP = "Temporary Claim
" +
+ "Permission Trust: {managers}
" +
+ "Trust: {builders}
" +
+ "Container Trust: {containers}
" +
+ "Access Trust: {accessors}
" +
+ "Expires: {expiretime}" ;
+ private static void mapSettings() {
+ CONTROL_LABEL = config.getString("settings.control.label", CONTROL_LABEL);
+ CONTROL_SHOW = config.getBoolean("settings.control.show", CONTROL_SHOW);
+ CONTROL_HIDE = config.getBoolean("settings.control.hide-by-default", CONTROL_HIDE);
+ GRID_CONTROL_LABEL = config.getString("settings.grid.label", GRID_CONTROL_LABEL);
+ GRID_CONTROL_SHOW = config.getBoolean("settings.grid.show", GRID_CONTROL_SHOW);
+ GRID_CONTROL_HIDE = config.getBoolean("settings.grid.hide-by-default", GRID_CONTROL_HIDE);
+ UPDATE_INTERVAL = config.getInt("settings.update-interval", UPDATE_INTERVAL);
+
+ STROKE_COLOR = config.getColor("settings.style.regular-claim.stroke.color", STROKE_COLOR);
+ STROKE_WEIGHT = config.getInt("settings.style.regular-claim.stroke.weight", STROKE_WEIGHT);
+ STROKE_OPACITY = config.getDouble("settings.regular-claim.style.stroke.opacity", STROKE_OPACITY);
+ FILL_COLOR = config.getColor("settings.style.regular-claim.fill.color", FILL_COLOR);
+ FILL_OPACITY = config.getDouble("settings.style.regular-claim.fill.opacity", FILL_OPACITY);
+
+ ADMIN_STROKE_COLOR = config.getColor("settings.style.admin-claim.stroke.color", ADMIN_STROKE_COLOR);
+ ADMIN_STROKE_WEIGHT = config.getInt("settings.style.admin-claim.stroke.weight", ADMIN_STROKE_WEIGHT);
+ ADMIN_STROKE_OPACITY = config.getDouble("settings.admin-claim.style.stroke.opacity", ADMIN_STROKE_OPACITY);
+ ADMIN_FILL_COLOR = config.getColor("settings.style.admin-claim.fill.color", ADMIN_FILL_COLOR);
+ ADMIN_FILL_OPACITY = config.getDouble("settings.style.admin-claim.fill.opacity", ADMIN_FILL_OPACITY);
+
+ EXPIRING_STROKE_COLOR = config.getColor("settings.style.expiring-claim.stroke.color", EXPIRING_STROKE_COLOR);
+ EXPIRING_STROKE_WEIGHT = config.getInt("settings.style.expiring-claim.stroke.weight", EXPIRING_STROKE_WEIGHT);
+ EXPIRING_STROKE_OPACITY = config.getDouble("settings.expiring-claim.style.stroke.opacity", EXPIRING_STROKE_OPACITY);
+ EXPIRING_FILL_COLOR = config.getColor("settings.style.expiring-claim.fill.color", EXPIRING_FILL_COLOR);
+ EXPIRING_FILL_OPACITY = config.getDouble("settings.style.expiring-claim.fill.opacity", EXPIRING_FILL_OPACITY);
+
+ STRINGS_PUBLIC = config.getString("settings.strings.public", STRINGS_PUBLIC);
+ CLAIM_TOOLTIP = config.getString("settings.region.tooltip.regular-claim", CLAIM_TOOLTIP);
+ ADMIN_CLAIM_TOOLTIP = config.getString("settings.region.tooltip.admin-claim", ADMIN_CLAIM_TOOLTIP);
+ EXPIRING_CLAIM_TOOLTIP = config.getString("settings.region.tooltip.expiring-claim", EXPIRING_CLAIM_TOOLTIP);
+ }
+
}
diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/alttd/map/hook/GPHook.java b/src/main/java/me/ryanhamshire/GriefPrevention/alttd/map/hook/GPHook.java
new file mode 100644
index 0000000..5977448
--- /dev/null
+++ b/src/main/java/me/ryanhamshire/GriefPrevention/alttd/map/hook/GPHook.java
@@ -0,0 +1,20 @@
+package me.ryanhamshire.GriefPrevention.alttd.map.hook;
+
+import me.ryanhamshire.GriefPrevention.Claim;
+import me.ryanhamshire.GriefPrevention.GriefPrevention;
+import org.bukkit.Bukkit;
+import org.bukkit.World;
+
+import java.util.Collection;
+import java.util.UUID;
+
+public class GPHook {
+ public static boolean isWorldEnabled(UUID uuid) {
+ World world = Bukkit.getWorld(uuid);
+ return GriefPrevention.instance.claimsEnabledForWorld(world);
+ }
+
+ public static Collection getClaims() {
+ return GriefPrevention.instance.dataStore.getClaims();
+ }
+}
diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/alttd/map/hook/Pl3xMapHook.java b/src/main/java/me/ryanhamshire/GriefPrevention/alttd/map/hook/Pl3xMapHook.java
new file mode 100644
index 0000000..70476d4
--- /dev/null
+++ b/src/main/java/me/ryanhamshire/GriefPrevention/alttd/map/hook/Pl3xMapHook.java
@@ -0,0 +1,39 @@
+package me.ryanhamshire.GriefPrevention.alttd.map.hook;
+
+import me.ryanhamshire.GriefPrevention.alttd.config.Config;
+import me.ryanhamshire.GriefPrevention.alttd.map.task.Pl3xMapTask;
+import net.pl3x.map.api.Key;
+import net.pl3x.map.api.Pl3xMapProvider;
+import net.pl3x.map.api.SimpleLayerProvider;
+import org.bukkit.plugin.Plugin;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+public class Pl3xMapHook {
+ private final Map provider = new HashMap<>();
+
+ public Pl3xMapHook(Plugin plugin) {
+ plugin.getLogger().info("Started Pl3xMapHook...");
+ Pl3xMapProvider.get().mapWorlds().forEach(world -> {
+ if (GPHook.isWorldEnabled(world.uuid())) {
+ SimpleLayerProvider provider = SimpleLayerProvider
+ .builder(Config.CONTROL_LABEL)
+ .showControls(Config.CONTROL_SHOW)
+ .defaultHidden(Config.CONTROL_HIDE)
+ .build();
+ world.layerRegistry().register(Key.of("griefprevention_" + world.uuid()), provider);
+ Pl3xMapTask task = new Pl3xMapTask(world, provider);
+ task.runTaskTimerAsynchronously(plugin, 0, 20L * Config.UPDATE_INTERVAL);
+ this.provider.put(world.uuid(), task);
+ }
+ });
+ }
+
+ public void disable() {
+ provider.values().forEach(Pl3xMapTask::disable);
+ provider.clear();
+ }
+
+}
diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/alttd/map/task/Pl3xMapTask.java b/src/main/java/me/ryanhamshire/GriefPrevention/alttd/map/task/Pl3xMapTask.java
new file mode 100644
index 0000000..f59a50e
--- /dev/null
+++ b/src/main/java/me/ryanhamshire/GriefPrevention/alttd/map/task/Pl3xMapTask.java
@@ -0,0 +1,128 @@
+package me.ryanhamshire.GriefPrevention.alttd.map.task;
+
+import me.ryanhamshire.GriefPrevention.Claim;
+import me.ryanhamshire.GriefPrevention.alttd.config.Config;
+import me.ryanhamshire.GriefPrevention.alttd.map.hook.GPHook;
+import net.pl3x.map.api.Key;
+import net.pl3x.map.api.MapWorld;
+import net.pl3x.map.api.Point;
+import net.pl3x.map.api.SimpleLayerProvider;
+import net.pl3x.map.api.marker.Marker;
+import net.pl3x.map.api.marker.MarkerOptions;
+import net.pl3x.map.api.marker.Rectangle;
+import org.bukkit.Location;
+import org.bukkit.scheduler.BukkitRunnable;
+
+import java.awt.*;
+import java.text.DateFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+public class Pl3xMapTask extends BukkitRunnable {
+ private final MapWorld world;
+ private final SimpleLayerProvider provider;
+
+ private boolean stop;
+
+ public Pl3xMapTask(MapWorld world, SimpleLayerProvider provider) {
+ this.world = world;
+ this.provider = provider;
+ }
+
+ @Override
+ public void run() {
+ if (stop) {
+ cancel();
+ }
+ updateClaims();
+ }
+
+ void updateClaims() {
+ provider.clearMarkers();
+ Collection topLevelClaims = GPHook.getClaims();
+ if (topLevelClaims != null) {
+ topLevelClaims.stream()
+ .filter(claim -> claim.getGreaterBoundaryCorner().getWorld().getUID().equals(this.world.uuid()))
+ .filter(claim -> claim.parent == null)
+ .forEach(this::handleClaim);
+ }
+ }
+
+ private void handleClaim(Claim claim) {
+ Location min = claim.getLesserBoundaryCorner();
+ Location max = claim.getGreaterBoundaryCorner();
+ if (min == null) {
+ return;
+ }
+
+ Rectangle rect = Marker.rectangle(Point.of(min.getBlockX(), min.getBlockZ()), Point.of(max.getBlockX() + 1, max.getBlockZ() + 1));
+
+ ArrayList builders = new ArrayList<>();
+ ArrayList containers = new ArrayList<>();
+ ArrayList accessors = new ArrayList<>();
+ ArrayList managers = new ArrayList<>();
+ claim.getPermissions(builders, containers, accessors, managers);
+
+ String worldName = min.getWorld().getName();
+ String toolTip = Config.CLAIM_TOOLTIP;
+ MarkerOptions.Builder options = MarkerOptions.builder()
+ .strokeColor(Config.STROKE_COLOR)
+ .strokeWeight(Config.STROKE_WEIGHT)
+ .strokeOpacity(Config.STROKE_OPACITY)
+ .fillColor(Config.FILL_COLOR)
+ .fillOpacity(Config.FILL_OPACITY)
+ .clickTooltip((claim.isAdminClaim() ? (Config.expiringClaims.containsKey(claim.getID()) ? Config.EXPIRING_CLAIM_TOOLTIP : Config.ADMIN_CLAIM_TOOLTIP) : Config.CLAIM_TOOLTIP)
+ .replace("{world}", worldName)
+ .replace("{id}", Long.toString(claim.getID()))
+ .replace("{owner}", claim.getOwnerName())
+ .replace("{managers}", getNames(managers))
+ .replace("{builders}", getNames(builders))
+ .replace("{containers}", getNames(containers))
+ .replace("{accessors}", getNames(accessors))
+ .replace("{area}", Integer.toString(claim.getArea()))
+ .replace("{width}", Integer.toString(claim.getWidth()))
+ .replace("{height}", Integer.toString(claim.getHeight()))
+ .replace("{expiretime}", parseExpireTime(claim.getID()))
+ );
+
+ if (claim.isAdminClaim()) {
+ if (Config.expiringClaims.containsKey(claim.getID())) {
+ options.strokeColor(Config.EXPIRING_STROKE_COLOR)
+ .strokeWeight(Config.EXPIRING_STROKE_WEIGHT)
+ .strokeOpacity(Config.EXPIRING_STROKE_OPACITY)
+ .fillColor(Config.EXPIRING_FILL_COLOR)
+ .fillOpacity(Config.EXPIRING_FILL_OPACITY);
+ } else {
+ options.strokeColor(Config.ADMIN_STROKE_COLOR)
+ .strokeWeight(Config.ADMIN_STROKE_WEIGHT)
+ .strokeOpacity(Config.ADMIN_STROKE_OPACITY)
+ .fillColor(Config.ADMIN_FILL_COLOR)
+ .fillOpacity(Config.ADMIN_FILL_OPACITY);
+ }
+ }
+
+ rect.markerOptions(options);
+
+ String markerid = "griefprevention_" + worldName + "_region_" + Long.toHexString(claim.getID());
+ this.provider.addMarker(Key.of(markerid), rect);
+ }
+
+ private static String getNames(List list) {
+ return String.join(", ", list);
+ }
+
+ public void disable() {
+ cancel();
+ this.stop = true;
+ this.provider.clearMarkers();
+ }
+
+ private String parseExpireTime(Long claimId) {
+ if(Config.expiringClaims.containsKey(claimId)) {
+ return DateFormat.getInstance().format(Config.expiringClaims.get(claimId));
+ }
+ return "";
+ }
+}
+
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index dae38bd..34b23e8 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -1,6 +1,6 @@
name: GriefPrevention
main: me.ryanhamshire.GriefPrevention.GriefPrevention
-softdepend: [Vault, Multiverse-Core, My_Worlds, MystCraft, Transporter, TheUnderground, WorldGuard, WorldEdit, RoyalCommands, MultiWorld, Denizen]
+softdepend: [Vault, Multiverse-Core, My_Worlds, MystCraft, Transporter, TheUnderground, WorldGuard, WorldEdit, RoyalCommands, MultiWorld, Denizen, Pl3xMap]
dev-url: https://dev.bukkit.org/projects/grief-prevention
loadbefore: [TheUnderground]
version: '${git.commit.id.describe}'
--
2.34.1