From 1efdb043817c1c12f9d540f6e2a7b2ec25e1bd70 Mon Sep 17 00:00:00 2001 From: noahboa27 Date: Tue, 11 Feb 2025 20:38:01 -0700 Subject: [PATCH 1/3] feat: added the ability to open a single door while sneaking --- .../main/java/org/oddlama/vane/trifles/DoubleDoorListener.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/vane-trifles/src/main/java/org/oddlama/vane/trifles/DoubleDoorListener.java b/vane-trifles/src/main/java/org/oddlama/vane/trifles/DoubleDoorListener.java index e35051e9c..6afb6eea9 100644 --- a/vane-trifles/src/main/java/org/oddlama/vane/trifles/DoubleDoorListener.java +++ b/vane-trifles/src/main/java/org/oddlama/vane/trifles/DoubleDoorListener.java @@ -24,6 +24,9 @@ public DoubleDoorListener(Context context) { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void on_player_interact(PlayerInteractEvent event) { if (event.hasBlock() && event.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (event.getPlayer().isSneaking()) { + return; + } handle_double_door(event.getClickedBlock()); } } From 0c333319e30ffc083954719a7a9b682ca55d1edb Mon Sep 17 00:00:00 2001 From: noahboa27 Date: Thu, 13 Mar 2025 16:29:29 -0600 Subject: [PATCH 2/3] feat: toggle item frame visibility with shears --- .../vane/trifles/ItemFrameListener.java | 34 +++++++++++++++++++ .../org/oddlama/vane/trifles/Trifles.java | 1 + 2 files changed, 35 insertions(+) create mode 100644 vane-trifles/src/main/java/org/oddlama/vane/trifles/ItemFrameListener.java diff --git a/vane-trifles/src/main/java/org/oddlama/vane/trifles/ItemFrameListener.java b/vane-trifles/src/main/java/org/oddlama/vane/trifles/ItemFrameListener.java new file mode 100644 index 000000000..68c5a5002 --- /dev/null +++ b/vane-trifles/src/main/java/org/oddlama/vane/trifles/ItemFrameListener.java @@ -0,0 +1,34 @@ +package org.oddlama.vane.trifles; + +import org.bukkit.Material; +import org.bukkit.entity.EntityType; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.oddlama.vane.core.Listener; +import org.oddlama.vane.core.module.Context; + +public class ItemFrameListener extends Listener { + + public ItemFrameListener(Context context) { + super( + context.group( + "invisible_item_frame", + "Right clicking on an item frame with shears equipped will make it disappear." + ) + ); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void on_event(PlayerInteractEntityEvent event) { + final var player = event.getPlayer(); + var entity = event.getRightClicked(); + boolean isHoldingShears = player.getInventory().getItemInMainHand().getType() == Material.SHEARS; + boolean entityIsItemFrame = entity.getType() == EntityType.ITEM_FRAME; + + if (isHoldingShears && entityIsItemFrame) { + event.setCancelled(true); + entity.setInvisible(!entity.isInvisible()); + } + } +} diff --git a/vane-trifles/src/main/java/org/oddlama/vane/trifles/Trifles.java b/vane-trifles/src/main/java/org/oddlama/vane/trifles/Trifles.java index 2ef63cf15..7d2d16cfa 100644 --- a/vane-trifles/src/main/java/org/oddlama/vane/trifles/Trifles.java +++ b/vane-trifles/src/main/java/org/oddlama/vane/trifles/Trifles.java @@ -18,6 +18,7 @@ public Trifles() { final var fast_walking_group = new FastWalkingGroup(this); new FastWalkingListener(fast_walking_group); new DoubleDoorListener(this); + new ItemFrameListener(this); new HarvestListener(this); new RepairCostLimiter(this); new RecipeUnlock(this); From 1dc75d494c3c195dbe1122532e403e83a56ca663 Mon Sep 17 00:00:00 2001 From: Austin Smith Date: Wed, 19 Mar 2025 05:19:52 -0500 Subject: [PATCH 3/3] Added squaremap support --- build.gradle.kts | 2 + .../vane/regions/RegionSquaremapLayer.java | 98 ++++++++++++ .../regions/RegionSquaremapLayerDelegate.java | 144 ++++++++++++++++++ .../org/oddlama/vane/regions/Regions.java | 4 + vane-regions/src/main/resources/lang-de.yml | 4 + vane-regions/src/main/resources/lang-en.yml | 7 + vane-regions/src/main/resources/lang-es.yml | 4 + .../src/main/resources/lang-fr-fr.yml | 4 + vane-regions/src/main/resources/lang-ru.yml | 4 + vane-regions/src/main/resources/lang-tr.yml | 4 + .../src/main/resources/lang-zh-cn.yml | 4 + .../src/main/resources/lang-zh-tw.yml | 4 + .../src/main/resources/paper-plugin.yml | 3 + 13 files changed, 286 insertions(+) create mode 100644 vane-regions/src/main/java/org/oddlama/vane/regions/RegionSquaremapLayer.java create mode 100644 vane-regions/src/main/java/org/oddlama/vane/regions/RegionSquaremapLayerDelegate.java diff --git a/build.gradle.kts b/build.gradle.kts index 544b01891..425283605 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -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 { @@ -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") } } diff --git a/vane-regions/src/main/java/org/oddlama/vane/regions/RegionSquaremapLayer.java b/vane-regions/src/main/java/org/oddlama/vane/regions/RegionSquaremapLayer.java new file mode 100644 index 000000000..aed4701d1 --- /dev/null +++ b/vane-regions/src/main/java/org/oddlama/vane/regions/RegionSquaremapLayer.java @@ -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 { + + 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 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(); + } + } +} \ No newline at end of file diff --git a/vane-regions/src/main/java/org/oddlama/vane/regions/RegionSquaremapLayerDelegate.java b/vane-regions/src/main/java/org/oddlama/vane/regions/RegionSquaremapLayerDelegate.java new file mode 100644 index 000000000..f3dbc6c9b --- /dev/null +++ b/vane-regions/src/main/java/org/oddlama/vane/regions/RegionSquaremapLayerDelegate.java @@ -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 markers = new HashMap<>(); + private final Map 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 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); + } + } +} diff --git a/vane-regions/src/main/java/org/oddlama/vane/regions/Regions.java b/vane-regions/src/main/java/org/oddlama/vane/regions/Regions.java index 3c64bdd5d..81196993d 100644 --- a/vane-regions/src/main/java/org/oddlama/vane/regions/Regions.java +++ b/vane-regions/src/main/java/org/oddlama/vane/regions/Regions.java @@ -192,6 +192,7 @@ public class Regions extends Module { public RegionDynmapLayer dynmap_layer; public RegionBlueMapLayer blue_map_layer; + public RegionSquaremapLayer squaremap_layer; public RegionEconomyDelegate economy; public boolean vane_portals_available = false; @@ -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( @@ -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) { diff --git a/vane-regions/src/main/resources/lang-de.yml b/vane-regions/src/main/resources/lang-de.yml index 4e7c39d0d..1989825ec 100644 --- a/vane-regions/src/main/resources/lang-de.yml +++ b/vane-regions/src/main/resources/lang-de.yml @@ -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" diff --git a/vane-regions/src/main/resources/lang-en.yml b/vane-regions/src/main/resources/lang-en.yml index d24052f95..f166c314b 100644 --- a/vane-regions/src/main/resources/lang-en.yml +++ b/vane-regions/src/main/resources/lang-en.yml @@ -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: diff --git a/vane-regions/src/main/resources/lang-es.yml b/vane-regions/src/main/resources/lang-es.yml index 095b913e8..b0a6ce1fc 100644 --- a/vane-regions/src/main/resources/lang-es.yml +++ b/vane-regions/src/main/resources/lang-es.yml @@ -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: diff --git a/vane-regions/src/main/resources/lang-fr-fr.yml b/vane-regions/src/main/resources/lang-fr-fr.yml index ec72bfec3..a8c0956b6 100644 --- a/vane-regions/src/main/resources/lang-fr-fr.yml +++ b/vane-regions/src/main/resources/lang-fr-fr.yml @@ -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" diff --git a/vane-regions/src/main/resources/lang-ru.yml b/vane-regions/src/main/resources/lang-ru.yml index d7bad4c65..7e86a7427 100644 --- a/vane-regions/src/main/resources/lang-ru.yml +++ b/vane-regions/src/main/resources/lang-ru.yml @@ -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Введите название группы региона" diff --git a/vane-regions/src/main/resources/lang-tr.yml b/vane-regions/src/main/resources/lang-tr.yml index c2d4db5fa..c2193ffb1 100644 --- a/vane-regions/src/main/resources/lang-tr.yml +++ b/vane-regions/src/main/resources/lang-tr.yml @@ -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: diff --git a/vane-regions/src/main/resources/lang-zh-cn.yml b/vane-regions/src/main/resources/lang-zh-cn.yml index c8b119903..a2d9d3379 100644 --- a/vane-regions/src/main/resources/lang-zh-cn.yml +++ b/vane-regions/src/main/resources/lang-zh-cn.yml @@ -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输入区域群组名称" diff --git a/vane-regions/src/main/resources/lang-zh-tw.yml b/vane-regions/src/main/resources/lang-zh-tw.yml index 4665d3198..23955e304 100644 --- a/vane-regions/src/main/resources/lang-zh-tw.yml +++ b/vane-regions/src/main/resources/lang-zh-tw.yml @@ -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輸入區域群組名稱" diff --git a/vane-regions/src/main/resources/paper-plugin.yml b/vane-regions/src/main/resources/paper-plugin.yml index c2defa5f1..4cfea0672 100644 --- a/vane-regions/src/main/resources/paper-plugin.yml +++ b/vane-regions/src/main/resources/paper-plugin.yml @@ -20,6 +20,9 @@ dependencies: BlueMap: required: false load: AFTER + squaremap: + required: false + load: AFTER vane-portals: required: false load: AFTER