diff --git a/build.gradle b/build.gradle index e153abf..e890625 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ allprojects { group = 'fr.mrmicky' - version = '2.1.6' + version = '2.1.7' } subprojects { diff --git a/plugin/build.gradle b/plugin/build.gradle index 43e7e5b..537969c 100644 --- a/plugin/build.gradle +++ b/plugin/build.gradle @@ -12,7 +12,6 @@ dependencies { implementation project(':worldeditselectionvisualizer-compatibility-v6') implementation project(':worldeditselectionvisualizer-compatibility-v7') implementation 'fr.mrmicky:fastparticles:2.0.1' - implementation 'org.bstats:bstats-bukkit:3.0.2' compileOnly 'com.sk89q.worldedit:worldedit-bukkit:7.2.0' compileOnly 'me.clip:placeholderapi:2.10.9' } @@ -20,8 +19,11 @@ dependencies { shadowJar { archiveFileName = "WorldEditSelectionVisualizer-${project.version}.jar" - relocate 'org.bstats', 'fr.mrmicky.worldeditselectionvisualizer.metrics' - relocate 'fr.mrmicky.fastparticles', 'fr.mrmicky.worldeditselectionvisualizer.libs.fastparticles' + relocate 'fr.mrmicky.fastparticles', 'fr.mrmicky.worldeditselectionvisualizer.particles' + + manifest { + attributes 'Paperweight-Mappings-Namespace': 'mojang' + } } artifacts { diff --git a/plugin/src/main/java/fr/mrmicky/worldeditselectionvisualizer/WorldEditSelectionVisualizer.java b/plugin/src/main/java/fr/mrmicky/worldeditselectionvisualizer/WorldEditSelectionVisualizer.java index 1e0954a..f657688 100644 --- a/plugin/src/main/java/fr/mrmicky/worldeditselectionvisualizer/WorldEditSelectionVisualizer.java +++ b/plugin/src/main/java/fr/mrmicky/worldeditselectionvisualizer/WorldEditSelectionVisualizer.java @@ -8,7 +8,6 @@ import fr.mrmicky.worldeditselectionvisualizer.display.DisplayType; import fr.mrmicky.worldeditselectionvisualizer.display.ParticlesTask; import fr.mrmicky.worldeditselectionvisualizer.listeners.PlayerListener; -import fr.mrmicky.worldeditselectionvisualizer.metrics.WesvMetrics; import fr.mrmicky.worldeditselectionvisualizer.placeholders.PlaceholderAPIExpansion; import fr.mrmicky.worldeditselectionvisualizer.selection.PlayerVisualizerData; import fr.mrmicky.worldeditselectionvisualizer.selection.SelectionManager; @@ -84,8 +83,6 @@ public void onEnable() { if (getConfig().getBoolean("check-updates")) { getServer().getScheduler().runTaskAsynchronously(this, this::checkUpdate); } - - WesvMetrics.register(this); } @Override @@ -95,6 +92,10 @@ public void reloadConfig() { if (this.configurationManager != null) { loadConfig(); } + + if (this.compatibilityHelper != null) { + this.compatibilityHelper.init(); + } } private void loadConfig() { @@ -182,12 +183,12 @@ private void checkUpdate() { try (BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()))) { String lastVersion = reader.readLine(); if (!getDescription().getVersion().equalsIgnoreCase(lastVersion)) { - getLogger().warning("A new version is available! Last version is " + lastVersion + " and you are on " + getDescription().getVersion()); + getLogger().warning("A new version is available. Last version is " + lastVersion + " and you are on " + getDescription().getVersion()); getLogger().warning("You can download it on " + getDescription().getWebsite()); } } } catch (IOException e) { - // ignore + getLogger().warning("Unable to check for updates: " + e.getMessage()); } } diff --git a/plugin/src/main/java/fr/mrmicky/worldeditselectionvisualizer/compat/CompatibilityHelper.java b/plugin/src/main/java/fr/mrmicky/worldeditselectionvisualizer/compat/CompatibilityHelper.java index 499d57d..496970c 100644 --- a/plugin/src/main/java/fr/mrmicky/worldeditselectionvisualizer/compat/CompatibilityHelper.java +++ b/plugin/src/main/java/fr/mrmicky/worldeditselectionvisualizer/compat/CompatibilityHelper.java @@ -5,6 +5,7 @@ import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.extent.clipboard.Clipboard; import com.sk89q.worldedit.regions.Region; +import com.sk89q.worldedit.world.item.ItemType; import com.sk89q.worldedit.world.item.ItemTypes; import fr.mrmicky.worldeditselectionvisualizer.WorldEditSelectionVisualizer; import fr.mrmicky.worldeditselectionvisualizer.compat.v6.ClipboardAdapter6; @@ -19,6 +20,7 @@ import org.jetbrains.annotations.Nullable; import java.lang.reflect.Field; +import java.util.function.Predicate; import java.util.logging.Level; /** @@ -32,25 +34,40 @@ public class CompatibilityHelper { private final boolean supportActionBar = isActionBarSupported(); private final boolean worldEdit7 = isWorldEdit7(); - private @Nullable Field wandItemField; + private @Nullable Predicate selectionItemPredicate; public CompatibilityHelper(WorldEditSelectionVisualizer plugin) { this.plugin = plugin; plugin.getLogger().info("Using WorldEdit " + getWorldEditVersion() + " api"); + init(); + } + + @SuppressWarnings("deprecation") // WorldEdit 6 support + public void init() { try { - this.wandItemField = LocalConfiguration.class.getField("wandItem"); - } catch (NoSuchFieldException e) { - plugin.getLogger().warning("No field 'wandItem' in LocalConfiguration"); - } + Field field = LocalConfiguration.class.getField("wandItem"); + LocalConfiguration config = WorldEdit.getInstance().getConfiguration(); - if (this.wandItemField != null - && this.wandItemField.getType() != int.class - && this.wandItemField.getType() != String.class) { - plugin.getLogger().warning("Unsupported WorldEdit configuration, try to update WorldEdit (and FAWE if you have it)"); + if (field.getType() == int.class) { // WorldEdit 6 + int itemId = field.getInt(config); - this.wandItemField = null; + this.selectionItemPredicate = item -> item.getType().getId() == itemId; + return; + } + + if (field.getType() == String.class) { // WorldEdit 7 + ItemType itemType = ItemTypes.get((String) field.get(config)); + Material type = itemType != null ? BukkitAdapter.adapt(itemType) : null; + + this.selectionItemPredicate = item -> item.getType() == type; + return; + } + + this.plugin.getLogger().warning("Unsupported item type in WorldEdit config, try to update WorldEdit."); + } catch (ReflectiveOperationException e) { + this.plugin.getLogger().log(Level.WARNING, "Failed to get WorldEdit wand item, try to update WorldEdit.", e); } } @@ -79,33 +96,16 @@ public void sendActionBar(@NotNull Player player, @NotNull String message) { SpigotActionBarAdapter.sendActionBar(player, message); } - @SuppressWarnings("deprecation") // WorldEdit 6 support public boolean isSelectionItem(@Nullable ItemStack item) { if (item == null || item.getType() == Material.AIR) { return false; } - if (this.wandItemField == null) { + if (this.selectionItemPredicate == null) { return true; } - try { - LocalConfiguration config = WorldEdit.getInstance().getConfiguration(); - - if (this.wandItemField.getType() == int.class) { // WorldEdit 6 - return item.getType().getId() == this.wandItemField.getInt(config); - } - - if (this.wandItemField.getType() == String.class) { // WorldEdit 7 - String wandItem = (String) this.wandItemField.get(config); - - return BukkitAdapter.adapt(item).getType().equals(ItemTypes.get(wandItem)); - } - } catch (ReflectiveOperationException e) { - this.plugin.getLogger().log(Level.WARNING, "An error occurred on isHoldingSelectionItem", e); - } - - return true; + return this.selectionItemPredicate.test(item); } @SuppressWarnings("deprecation") // 1.7.10/1.8 servers support diff --git a/plugin/src/main/java/fr/mrmicky/worldeditselectionvisualizer/metrics/WesvMetrics.java b/plugin/src/main/java/fr/mrmicky/worldeditselectionvisualizer/metrics/WesvMetrics.java deleted file mode 100644 index 588a019..0000000 --- a/plugin/src/main/java/fr/mrmicky/worldeditselectionvisualizer/metrics/WesvMetrics.java +++ /dev/null @@ -1,42 +0,0 @@ -package fr.mrmicky.worldeditselectionvisualizer.metrics; - -import fr.mrmicky.worldeditselectionvisualizer.WorldEditSelectionVisualizer; -import fr.mrmicky.worldeditselectionvisualizer.compat.CompatibilityHelper; -import org.bstats.bukkit.Metrics; -import org.bstats.charts.SimplePie; - -import java.util.function.BooleanSupplier; -import java.util.function.Supplier; - -public final class WesvMetrics { - - private static final int B_STATS_PLUGIN_ID = 335; - - private final Metrics metrics; - - private WesvMetrics(WorldEditSelectionVisualizer plugin) { - this.metrics = new Metrics(plugin, B_STATS_PLUGIN_ID); - - CompatibilityHelper compatHelper = plugin.getCompatibilityHelper(); - - addBooleanChart("top_bottom_cuboid", () -> plugin.getConfig().getBoolean("cuboid-top-bottom")); - addBooleanChart("check_for_axe", () -> plugin.getConfig().getBoolean("need-we-wand")); - addCustomChart("worldedit_version", () -> "WorldEdit " + compatHelper.getWorldEditVersion()); - addCustomChart("selection_update_interval", () -> { - int interval = plugin.getConfig().getInt("selection-update-interval"); - return Integer.toString(interval); - }); - } - - public static void register(WorldEditSelectionVisualizer plugin) { - new WesvMetrics(plugin); - } - - private void addBooleanChart(String name, BooleanSupplier value) { - addCustomChart(name, () -> value.getAsBoolean() ? "Enabled" : "Disabled"); - } - - private void addCustomChart(String name, Supplier value) { - this.metrics.addCustomChart(new SimplePie(name, value::get)); - } -} diff --git a/plugin/src/main/java/fr/mrmicky/worldeditselectionvisualizer/selection/SelectionManager.java b/plugin/src/main/java/fr/mrmicky/worldeditselectionvisualizer/selection/SelectionManager.java index 19e66cd..c4a8f79 100644 --- a/plugin/src/main/java/fr/mrmicky/worldeditselectionvisualizer/selection/SelectionManager.java +++ b/plugin/src/main/java/fr/mrmicky/worldeditselectionvisualizer/selection/SelectionManager.java @@ -119,6 +119,8 @@ public void updatePlayerVisualization(PlayerVisualizerData playerData, Selection return; } + this.plugin.updateHoldingSelectionItem(playerData); + RegionAdapter regionAdapter = this.plugin.getCompatibilityHelper().adaptRegion(region); RegionInfo regionInfo = regionAdapter.getRegionInfo(); @@ -149,8 +151,6 @@ public void updatePlayerVisualization(PlayerVisualizerData playerData, Selection return; } - this.plugin.updateHoldingSelectionItem(playerData); - Event event = (type == SelectionType.SELECTION) ? new SelectionChangeEvent(player, region) : new ClipboardChangeEvent(player, region); Bukkit.getPluginManager().callEvent(event);