9
0
mirror of https://gitlab.com/SamB440/rpgregions-2.git synced 2026-01-03 22:16:18 +00:00

Add dynmap support, remove legacy

This commit is contained in:
SamB440
2021-05-11 21:27:32 +01:00
parent d3f0a5e4f8
commit d3e8880012
18 changed files with 160 additions and 172 deletions

View File

@@ -13,6 +13,8 @@ import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerMoveEvent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
@@ -77,4 +79,7 @@ public interface IntegrationManager {
}
return true;
}
@NotNull
List<Location> getBoundingBoxPoints(Location regionLocation, @Nullable String regionId);
}

View File

@@ -60,7 +60,6 @@ public interface IStorageManager {
default void timing(long ms) {
if (TIMINGS.size() >= 3) TIMINGS.remove(2);
TIMINGS.add(ms);
System.out.println(ms);
if (ms >= 20) {
RPGRegionsAPI.getAPI().getLogger().warning("Grabbing accounts is taking a long time! (" + ms + "ms)");
}

View File

@@ -74,6 +74,9 @@ public class ConfiguredRegion {
@EditableField(material = XMaterial.NETHER_STAR, name = "Set teleport cooldown", description = "Set the cooldown for teleportation")
private int teleportCooldown;
private boolean showActionbar;
@EditableField(material = XMaterial.RED_DYE, name = "Hex display colour", description = "Set the colour of the region. It is a hex colour (e.g 0x42f4f1 for red) and is used in dynmap.")
private final String colour;
private final String lineColour;
public ConfiguredRegion(@Nullable World world, String id, String customName,
List<DiscoveryReward> rewards, List<RegionEffect> effects) {
@@ -98,6 +101,8 @@ public class ConfiguredRegion {
this.alwaysShowTitles = false;
this.teleportCooldown = 0;
this.showActionbar = true;
this.colour = String.valueOf(13369344);
this.lineColour = String.valueOf(13369344);
}
public ConfiguredRegion(@Nullable World world, String id, String customName,
@@ -314,6 +319,21 @@ public class ConfiguredRegion {
this.showActionbar = showActionbar;
}
@Nullable
public List<Location> getBoundingBox() {
return RPGRegionsAPI.getAPI().getManagers().getIntegrationManager().getBoundingBoxPoints(location, id);
}
public String getColour() {
if (colour == null) return "0";
return colour;
}
public String getLineColour() {
if (lineColour == null) return "0";
return lineColour;
}
public void save(IRPGRegionsAPI plugin) {
try {
File file = this.findFile(plugin);

View File

@@ -52,6 +52,9 @@ repositories {
maven { url 'https://repo.codemc.io/repository/maven-snapshots/' }
// Dynmap
maven { url 'https://repo.mikeprimm.com' }
flatDir { dir '../libraries' }
}

View File

@@ -1,2 +0,0 @@
# Legacy
This only exists for historical reasons and will be removed at a future date.

View File

@@ -1,70 +0,0 @@
plugins {
id 'java'
}
group = pluginGroup
version = pluginVersion
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
mavenCentral()
mavenLocal()
maven { url 'https://jitpack.io' }
maven {
name 'papermc-repo'
url 'https://papermc.io/repo/repository/maven-public/'
}
maven {
name 'sonatype'
url 'https://oss.sonatype.org/content/groups/public/'
}
maven {
name 'CodeMC'
url 'https://repo.codemc.org/repository/maven-public'
}
maven { url "https://repo.aikar.co/content/groups/aikar/" }
// worldguard
maven { url "https://maven.enginehub.org/repo/" }
// PAPI
maven { url 'http://repo.extendedclip.com/content/repositories/placeholderapi/' }
// plan
maven {
name 'bintray'
url 'https://dl.bintray.com/rsl1122/Plan-repository'
}
maven { url 'https://hub.spigotmc.org/nexus/content/repositories/public/' }
// MythicMobs
maven { url 'https://mvn.lumine.io/repository/maven-public/' }
maven { url 'https://repo.codemc.io/repository/maven-snapshots/' }
flatDir { dir '../libraries' }
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compileOnly ('com.sk89q.worldguard:worldguard-legacy:6.2') {
exclude group: 'com.destroystokyo.paper'
exclude group: 'org.spigotmc'
}
compileOnly ('com.sk89q.worldedit:worldedit-core:6.1.4-SNAPSHOT') {
exclude group: 'com.destroystokyo.paper'
exclude group: 'org.spigotmc'
}
implementation 'com.gitlab.samb440:languagy:2.0.3-RELEASE' // languagy
compileOnly 'org.spigotmc:spigot-api:1.12.2-R0.1-SNAPSHOT' // spigot
compileOnly project(':rpgregions')
compileOnly project(':api')
}

View File

@@ -1,98 +0,0 @@
package net.islandearth.rpgregions.api.integrations.worldguard;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import net.islandearth.rpgregions.api.IRPGRegionsAPI;
import net.islandearth.rpgregions.api.events.RegionsEnterEvent;
import net.islandearth.rpgregions.api.integrations.IntegrationManager;
import net.islandearth.rpgregions.managers.data.region.ConfiguredRegion;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerMoveEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
public class WorldGuardLegacyIntegration implements IntegrationManager {
private final IRPGRegionsAPI plugin;
public WorldGuardLegacyIntegration(IRPGRegionsAPI plugin) {
this.plugin = plugin;
}
@Override
public boolean isInRegion(Location location) {
return !this.getProtectedRegions(location).isEmpty();
}
@Override
public void handleMove(PlayerMoveEvent pme) {
Player player = pme.getPlayer();
int oldX = pme.getFrom().getBlockX();
int oldY = pme.getFrom().getBlockY();
int oldZ = pme.getFrom().getBlockZ();
int x = pme.getTo().getBlockX();
int y = pme.getTo().getBlockY();
int z = pme.getTo().getBlockZ();
Set<ProtectedRegion> oldRegions = this.getProtectedRegions(new Location(player.getWorld(), oldX, oldY, oldZ));
Set<ProtectedRegion> regions = this.getProtectedRegions(new Location(player.getWorld(), x, y, z));
ConfiguredRegion prioritisedRegion = getPrioritisedRegion(pme.getTo());
if (prioritisedRegion == null) return;
List<String> stringRegions = new ArrayList<>();
regions.forEach(region -> {
if (!prioritisedRegion.getId().equals(region.getId())
&& checkRequirements(pme, region.getId())) stringRegions.add(region.getId());
});
stringRegions.add(0, getPrioritisedRegion(pme.getTo()).getId());
Bukkit.getPluginManager().callEvent(new RegionsEnterEvent(player, stringRegions, !oldRegions.equals(regions)));
}
@Override
public ConfiguredRegion getPrioritisedRegion(Location location) {
Set<ProtectedRegion> regions = this.getProtectedRegions(location);
ProtectedRegion highest = null;
for (ProtectedRegion region : regions) {
if (highest == null) {
highest = region;
continue;
}
if (region.getPriority() >= highest.getPriority()) {
highest = region;
}
}
if (highest == null) return null;
return plugin.getManagers().getRegionsCache().getConfiguredRegion(highest.getId());
}
@Override
public boolean exists(World world, String region) {
return WorldGuardPlugin.inst()
.getRegionContainer()
.get(world)
.getRegions().containsKey(region);
}
private Set<ProtectedRegion> getProtectedRegions(Location location) {
return WorldGuardPlugin.inst()
.getRegionContainer()
.get(location.getWorld())
.getApplicableRegions(location)
.getRegions();
}
@Override
public Set<String> getAllRegionNames(org.bukkit.World world) {
return WorldGuardPlugin.inst()
.getRegionContainer()
.get(world)
.getRegions().keySet();
}
}

Binary file not shown.

View File

@@ -67,6 +67,7 @@ dependencies {
compileOnly name: 'Residence4.9.2.2' // residence
compileOnly name: 'GriefPrevention' // griefprevention
if (ultraRegionsSupport) compileOnly name: 'UltraRegions' // ultraregions
compileOnly 'org.jetbrains:annotations:20.1.0'
compileOnly project(':api')
compileOnly project(':rpgregions')
}

View File

@@ -11,6 +11,8 @@ import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerMoveEvent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.HashSet;
@@ -65,4 +67,9 @@ public class GriefPreventionIntegration implements IntegrationManager {
}
return claims;
}
@Override
public @NotNull List<Location> getBoundingBoxPoints(Location regionLocation, @Nullable String regionId) {
return null;
}
}

View File

@@ -11,7 +11,10 @@ import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerMoveEvent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
import java.util.Set;
public class ResidenceIntegration implements IntegrationManager {
@@ -55,4 +58,9 @@ public class ResidenceIntegration implements IntegrationManager {
public Set<String> getAllRegionNames(World world) {
return Residence.getInstance().getResidenceManager().getResidences().keySet();
}
@Override
public @NotNull List<Location> getBoundingBoxPoints(Location regionLocation, @Nullable String regionId) {
return null;
}
}

View File

@@ -5,7 +5,10 @@ import net.islandearth.rpgregions.managers.data.region.ConfiguredRegion;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.event.player.PlayerMoveEvent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
import java.util.Set;
public class RPGRegionsIntegration implements IntegrationManager {
@@ -34,4 +37,9 @@ public class RPGRegionsIntegration implements IntegrationManager {
public Set<String> getAllRegionNames(World world) {
return null;
}
@Override
public @NotNull List<Location> getBoundingBoxPoints(Location regionLocation, @Nullable String regionId) {
return null;
}
}

View File

@@ -14,6 +14,8 @@ import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerMoveEvent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.HashSet;
@@ -86,6 +88,11 @@ public class UltraRegionsIntegration implements IntegrationManager {
return regions;
}
@Override
public @NotNull List<Location> getBoundingBoxPoints(Location regionLocation, @Nullable String regionId) {
return null;
}
private List<Region> getProtectedRegions(Location location) {
Optional<ManagedWorld> world = UltraRegions.getAPI().getWorlds().find(location.getWorld());
if (world.isPresent()) {

View File

@@ -1,6 +1,7 @@
package net.islandearth.rpgregions.api.integrations.worldguard;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.math.BlockVector2;
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
@@ -13,6 +14,8 @@ import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerMoveEvent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
@@ -95,6 +98,22 @@ public class WorldGuardIntegration implements IntegrationManager {
.getRegions().keySet();
}
@Override
@NotNull
public List<Location> getBoundingBoxPoints(Location regionLocation, @Nullable String regionId) {
List<Location> points = new ArrayList<>();
for (ProtectedRegion protectedRegion : getProtectedRegions(regionLocation)) {
if (regionId != null && !protectedRegion.getId().equals(regionId)) {
continue;
}
for (BlockVector2 point : protectedRegion.getPoints()) {
points.add(new Location(regionLocation.getWorld(), point.getX(), regionLocation.getY(), point.getZ()));
}
}
return points;
}
private Set<ProtectedRegion> getProtectedRegions(Location location) {
return WorldGuard.getInstance()
.getPlatform()

View File

@@ -50,6 +50,9 @@ repositories {
maven { url 'https://repo.codemc.io/repository/maven-snapshots/' }
// Dynmap
maven { url 'https://repo.mikeprimm.com' }
flatDir { dir '../libraries' }
}
@@ -85,6 +88,7 @@ dependencies {
compileOnly 'com.github.shynixn.headdatabase:hdb-api:1.0' // head database
compileOnly 'com.djrapitops:Plan-api:5.1-R0.4' // plan
compileOnly 'io.lumine.xikage:MythicMobs:4.9.1'
compileOnly name: 'Dynmap-3.1-spigot' // Dynmap
compileOnly 'org.jetbrains:annotations:20.1.0'
compileOnly project(':api')

View File

@@ -49,6 +49,7 @@ import net.islandearth.rpgregions.rewards.QuestReward;
import net.islandearth.rpgregions.rewards.RegionDiscoverReward;
import net.islandearth.rpgregions.rewards.RegionRewardRegistry;
import net.islandearth.rpgregions.rewards.TeleportReward;
import net.islandearth.rpgregions.tasks.DynmapTask;
import net.islandearth.rpgregions.translation.Translations;
import net.islandearth.rpgregions.utils.XMaterial;
import net.islandearth.rpgregions.utils.XSound;
@@ -70,6 +71,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.logging.Level;
public final class RPGRegions extends JavaPlugin implements IRPGRegionsAPI, LanguagyPluginHook {
@@ -108,6 +110,7 @@ public final class RPGRegions extends JavaPlugin implements IRPGRegionsAPI, Lang
this.registerListeners();
this.registerCommands();
this.hook(this);
this.registerTasks();
this.registerMetrics();
}
@@ -163,6 +166,7 @@ public final class RPGRegions extends JavaPlugin implements IRPGRegionsAPI, Lang
config.options().header(header);
config.addDefault("settings.dev.debug", false);
config.addDefault("settings.integration.name", getIntegration());
config.addDefault("settings.external.dynmap", true);
config.addDefault("settings.storage.mode", "file");
config.addDefault("settings.sql.host", "localhost");
config.addDefault("settings.sql.port", 3306);
@@ -370,6 +374,14 @@ public final class RPGRegions extends JavaPlugin implements IRPGRegionsAPI, Lang
return "WorldGuard";
}
private void registerTasks() {
if (Bukkit.getPluginManager().getPlugin("Dynmap") != null
&& getConfig().getBoolean("settings.external.dynmap")) {
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new DynmapTask(this), 0L, 20L);
getLogger().info("Registered support for Dynmap.");
}
}
private void registerMetrics() {
Metrics metrics = new Metrics(this, 2066);
// regions_discovered chart currently causes lag due to bStats not running it async :(
@@ -392,4 +404,12 @@ public final class RPGRegions extends JavaPlugin implements IRPGRegionsAPI, Lang
public boolean debug() {
return this.getConfig().getBoolean("settings.dev.debug");
}
public void debug(String debug) {
this.debug(debug, Level.INFO);
}
public void debug(String debug, Level level) {
if (debug()) this.getLogger().log(level, "[Debug] " + debug);
}
}

View File

@@ -0,0 +1,57 @@
package net.islandearth.rpgregions.tasks;
import net.islandearth.rpgregions.RPGRegions;
import org.bukkit.Location;
import org.dynmap.DynmapAPI;
import org.dynmap.bukkit.DynmapPlugin;
import org.dynmap.markers.AreaMarker;
import org.dynmap.markers.MarkerSet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DynmapTask implements Runnable {
private final RPGRegions plugin;
private final DynmapAPI dynmapAPI;
private final Map<String, AreaMarker> markers;
private final MarkerSet markerSet;
public DynmapTask(final RPGRegions plugin) {
this.plugin = plugin;
this.dynmapAPI = DynmapPlugin.plugin;
this.markers = new HashMap<>();
this.markerSet = dynmapAPI.getMarkerAPI().createMarkerSet("rpgregions.regions", "Regions", dynmapAPI.getMarkerAPI().getMarkerIcons(), false);
}
@Override
public void run() {
plugin.getManagers().getRegionsCache().getConfiguredRegions().forEach((name, region) -> {
List<Location> boundingBox = region.getBoundingBox();
if (boundingBox == null) return;
if (!markers.containsKey(name)) {
if (region.getWorld() == null) return;
plugin.debug("Generated bounding box for dynmap integration (" + name + "): " + boundingBox);
String markerid = region.getWorld() + "_" + name;
AreaMarker am = markerSet.createAreaMarker(markerid, region.getCustomName(), true, region.getWorld().getName(), new double[1000], new double[1000], false);
markers.put(name, am);
}
// Update the marker information
AreaMarker am = markers.get(name);
double[] x = new double[boundingBox.size()];
double[] z = new double[boundingBox.size()];
for(int i = 0; i < boundingBox.size(); i++) {
Location point = boundingBox.get(i);
x[i] = point.getX(); z[i] = point.getZ();
}
am.setCornerLocations(x, z);
am.setLabel(region.getCustomName(), true);
if (!region.getColour().equals("0")) am.setFillStyle(0.5, Integer.parseInt(region.getColour()));
if (!region.getLineColour().equals("0")) am.setLineStyle(1, 0.5, Integer.parseInt(region.getLineColour()));
am.setDescription("<b>" + region.getCustomName() + "</b>");
});
}
}

View File

@@ -2,7 +2,7 @@ name: RPGRegions
version: @version@
main: net.islandearth.rpgregions.RPGRegions
api-version: '1.13'
softdepend: [Hyperverse, Multiverse, Languagy, UltraRegions, WorldGuard, PlaceholderAPI, HeadDatabase, Residence, Plan, GriefPrevention, Vault, MythicMobs, AlonsoLevels]
softdepend: [Hyperverse, Multiverse, Languagy, UltraRegions, WorldGuard, PlaceholderAPI, HeadDatabase, Residence, Plan, GriefPrevention, Vault, MythicMobs, AlonsoLevels, Dynmap]
authors: [SamB440]
description: Discoverable regions
website: https://fortitude.islandearth.net