Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ subprojects {
maven("https://jitpack.io")
maven("https://api.modrinth.com/maven")
maven("https://repo.bluecolored.de/releases")
maven("https://repo.jpenilla.xyz/snapshots")
}

tasks.withType<JavaCompile> {
Expand Down Expand Up @@ -142,6 +143,7 @@ configure(subprojects.filter {
dependencies {
implementation(group = "us.dynmap", name = "DynmapCoreAPI", version = "3.7-beta-6")
implementation(group = "de.bluecolored", name = "bluemap-api", version = "2.7.3")
implementation(group = "xyz.jpenilla", name = "squaremap-api", version = "1.2.0")
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
package org.oddlama.vane.regions;

import java.util.UUID;
import org.oddlama.vane.annotation.config.ConfigBoolean;
import org.oddlama.vane.annotation.config.ConfigDouble;
import org.oddlama.vane.annotation.config.ConfigInt;
import org.oddlama.vane.annotation.lang.LangMessage;
import org.oddlama.vane.core.lang.TranslatedMessage;
import org.oddlama.vane.core.module.Context;
import org.oddlama.vane.core.module.ModuleComponent;
import org.oddlama.vane.regions.region.Region;

public class RegionSquaremapLayer extends ModuleComponent<Regions> {

public static final String LAYER_ID = "vane_regions_squaremap";

@ConfigBoolean(def = false, desc = "Hide region layer by default")
public boolean config_layer_hide;

@ConfigInt(def = 35, min = 0, desc = "Layer ordering priority.")
public int config_layer_priority;

@ConfigBoolean(def = true, desc = "If the layer be filled in.")
public boolean config_layer_fill;

@ConfigInt(def = 0xffb422, min = 0, max = 0xffffff, desc = "Area marker fill color (0xRRGGBB).")
public int config_fill_color;

@ConfigDouble(def = 0.05, min = 0.0, max = 1.0, desc = "Area marker fill opacity.")
public double config_fill_opacity;

@ConfigBoolean(def = true, desc = "If the area marker will have outline.")
public boolean config_line;

@ConfigInt(def = 2, min = 1, desc = "Area marker line weight.")
public int config_line_weight;

@ConfigInt(def = 0xffb422, min = 0, max = 0xffffff, desc = "Area marker line color (0xRRGGBB).")
public int config_line_color;

@ConfigDouble(def = 1.0, min = 0.0, max = 1.0, desc = "Area marker line opacity.")
public double config_line_opacity;

@LangMessage
public TranslatedMessage lang_layer_label;

@LangMessage
public TranslatedMessage lang_marker_label;

private RegionSquaremapLayerDelegate delegate = null;

public RegionSquaremapLayer(final Context<Regions> context) {
super(
context.group("squaremap", "Enable squaremap integration. Regions will be shown on squaremap.")
);
}

public void delayed_on_enable() {
final var plugin = get_module().getServer().getPluginManager().getPlugin("squaremap");
if (plugin == null) {
return;
}

delegate = new RegionSquaremapLayerDelegate(this);
delegate.on_enable(plugin);
}

@Override
public void on_enable() {
schedule_next_tick(this::delayed_on_enable);
}

@Override
public void on_disable() {
if (delegate != null) {
delegate.on_disable();
delegate = null;
}
}

public void update_marker(final Region region) {
if (delegate != null) {
delegate.update_marker(region);
}
}

public void remove_marker(final UUID region_id) {
if (delegate != null) {
delegate.remove_marker(region_id);
}
}

public void update_all_markers() {
if (delegate != null) {
delegate.update_all_markers();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
package org.oddlama.vane.regions;

import xyz.jpenilla.squaremap.api.SquaremapProvider;
import xyz.jpenilla.squaremap.api.marker.Marker;
import xyz.jpenilla.squaremap.api.marker.MarkerOptions;
import xyz.jpenilla.squaremap.api.MapWorld;
import xyz.jpenilla.squaremap.api.Point;
import xyz.jpenilla.squaremap.api.SimpleLayerProvider;
import xyz.jpenilla.squaremap.api.Squaremap;
import xyz.jpenilla.squaremap.api.BukkitAdapter;
import xyz.jpenilla.squaremap.api.Key;

import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.plugin.Plugin;
import org.oddlama.vane.regions.region.Region;

import java.awt.Color;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;

public class RegionSquaremapLayerDelegate {
private final RegionSquaremapLayer parent;
private boolean enabled = false;
private final HashMap<UUID, Key> markers = new HashMap<>();
private final Map<World, SimpleLayerProvider> worldProviders = new HashMap<>();

public RegionSquaremapLayerDelegate(final RegionSquaremapLayer parent) {
this.parent = parent;
}

public Regions get_module() {
return parent.get_module();
}

public void on_enable(final Plugin plugin) {
if (!Bukkit.getPluginManager().isPluginEnabled("squaremap")) {
return;
}

get_module().log.info("Enabling squaremap integration");
enabled = true;

Squaremap squaremap = SquaremapProvider.get();

for (World world : Bukkit.getWorlds()) {
Optional<MapWorld> optionalMapWorld = squaremap.getWorldIfEnabled(BukkitAdapter.worldIdentifier(world));

if (optionalMapWorld.isPresent()) {
MapWorld mapWorld = optionalMapWorld.get();
Key layerKey = Key.of("vane_regions_" + world.getName());

SimpleLayerProvider provider = SimpleLayerProvider.builder(parent.lang_layer_label.str())
.showControls(true)
.defaultHidden(parent.config_layer_hide)
.build();

mapWorld.layerRegistry().register(layerKey, provider);
worldProviders.put(world, provider);
}
}

update_all_markers();
}

public void on_disable() {
if (!enabled) {
return;
}

get_module().log.info("Disabling squaremap integration");
enabled = false;
markers.clear();
worldProviders.clear();
}

private Key id_for(final Region region) {
return Key.of(region.id().toString());
}

public void update_marker(final Region region) {
if (!enabled) {
return;
}

remove_marker(region);

var world = region.extent().min().getWorld();
var min = region.extent().min();
var max = region.extent().max();

Key markerKey = id_for(region);

Point p1 = Point.of(min.getX(), min.getZ());
Point p2 = Point.of(max.getX() + 1, max.getZ() + 1);

if (!worldProviders.containsKey(world)) {
get_module().log.warning("Squaremap: No provider found for world " + world.getName() + " while updating marker.");
return;
}
SimpleLayerProvider provider = worldProviders.get(world);

Marker marker = Marker.rectangle(p1, p2);
MarkerOptions options = MarkerOptions.builder()
.fill(parent.config_layer_fill)
.fillColor(new Color(parent.config_fill_color))
.fillOpacity(parent.config_fill_opacity)
.stroke(parent.config_line)
.strokeColor(new Color(parent.config_line_color))
.strokeWeight(parent.config_line_weight)
.strokeOpacity(parent.config_line_opacity)
.hoverTooltip(parent.lang_marker_label.str(region.name()))
.clickTooltip(parent.lang_marker_label.str(region.name()))
.build();

marker.markerOptions(options);
provider.addMarker(markerKey, marker);
markers.put(region.id(), markerKey);
}

public void remove_marker(final Region region) {
remove_marker(region.id());
}

public void remove_marker(final UUID regionId) {
if (!enabled) return;
Key key = markers.remove(regionId);
if (key == null) return;

for (SimpleLayerProvider provider : worldProviders.values()) {
provider.removeMarker(key);
}
}

public void update_all_markers() {
if (!enabled) return;

for (final var region : get_module().all_regions()) {
update_marker(region);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,7 @@ public class Regions extends Module<Regions> {

public RegionDynmapLayer dynmap_layer;
public RegionBlueMapLayer blue_map_layer;
public RegionSquaremapLayer squaremap_layer;

public RegionEconomyDelegate economy;
public boolean vane_portals_available = false;
Expand All @@ -212,6 +213,7 @@ public Regions() {
new RegionSelectionListener(this);
dynmap_layer = new RegionDynmapLayer(this);
blue_map_layer = new RegionBlueMapLayer(this);
squaremap_layer = new RegionSquaremapLayer(this);

// Register admin permission
admin_permission = new Permission(
Expand Down Expand Up @@ -540,11 +542,13 @@ public void remove_region(final Region region) {
public void update_marker(final Region region) {
dynmap_layer.update_marker(region);
blue_map_layer.update_marker(region);
squaremap_layer.update_marker(region);
}

public void remove_marker(final UUID region_id) {
dynmap_layer.remove_marker(region_id);
blue_map_layer.remove_marker(region_id);
squaremap_layer.remove_marker(region_id);
}

private void index_region(final Region region) {
Expand Down
4 changes: 4 additions & 0 deletions vane-regions/src/main/resources/lang-de.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ blue_map:
layer_label: "Regionen"
marker_label: "%1$s"

squaremap:
layer_label: "Regionen"
marker_label: "%1$s"

menus:
enter_region_group_name:
title: "§8§lRegions-Gruppe benennen"
Expand Down
7 changes: 7 additions & 0 deletions vane-regions/src/main/resources/lang-en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,13 @@ blue_map:
# %1$s: Region name
marker_label: "%1$s"

squaremap:
# The label for the squaremap marker set
layer_label: "Regions"
# The label for the squaremap region markers
# %1$s: Region name
marker_label: "%1$s"

menus:
# Settings for the region group naming menu.
enter_region_group_name:
Expand Down
4 changes: 4 additions & 0 deletions vane-regions/src/main/resources/lang-es.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,10 @@ blue_map:
# %1$s: Nombre de la región
marker_label: "%1$s"

squaremap:
layer_label: "Regiones"
marker_label: "%1$s"

menus:
# Configuración para el menú de nombres de grupos de región.
enter_region_group_name:
Expand Down
4 changes: 4 additions & 0 deletions vane-regions/src/main/resources/lang-fr-fr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ blue_map:
layer_label: "Régions"
marker_label: "%1$s"

squaremap:
layer_label: "Régions"
marker_label: "%1$s"

menus:
enter_region_group_name:
title: "§8§lEntrer un nom"
Expand Down
4 changes: 4 additions & 0 deletions vane-regions/src/main/resources/lang-ru.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ blue_map:
layer_label: "Регионы"
marker_label: "%1$s"

squaremap:
layer_label: "Регионы"
marker_label: "%1$s"

menus:
enter_region_group_name:
title: "§8§lВведите название группы региона"
Expand Down
4 changes: 4 additions & 0 deletions vane-regions/src/main/resources/lang-tr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,10 @@ blue_map:
# %1$s: Region name
marker_label: "%1$s"

squaremap:
layer_label: "Bölgeler"
marker_label: "%1$s"

menus:
# Settings for the region group naming menu.
enter_region_group_name:
Expand Down
4 changes: 4 additions & 0 deletions vane-regions/src/main/resources/lang-zh-cn.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ blue_map:
layer_label: "区域"
marker_label: "%1$s"

squaremap:
layer_label: "区域"
marker_label: "%1$s"

menus:
enter_region_group_name:
title: "§8§l输入区域群组名称"
Expand Down
4 changes: 4 additions & 0 deletions vane-regions/src/main/resources/lang-zh-tw.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ blue_map:
layer_label: "區域"
marker_label: "%1$s"

squaremap:
layer_label: "區域"
marker_label: "%1$s"

menus:
enter_region_group_name:
title: "§8§l輸入區域群組名稱"
Expand Down
3 changes: 3 additions & 0 deletions vane-regions/src/main/resources/paper-plugin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ dependencies:
BlueMap:
required: false
load: AFTER
squaremap:
required: false
load: AFTER
vane-portals:
required: false
load: AFTER
Expand Down
Loading