Skip to content

Commit

Permalink
Improve wand item detection & remove bStats
Browse files Browse the repository at this point in the history
Fixes #52
  • Loading branch information
MrMicky-FR committed Jul 29, 2024
1 parent 4271496 commit 4718b8b
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 82 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
allprojects {
group = 'fr.mrmicky'
version = '2.1.6'
version = '2.1.7'
}

subprojects {
Expand Down
8 changes: 5 additions & 3 deletions plugin/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,18 @@ 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'
}

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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -84,8 +83,6 @@ public void onEnable() {
if (getConfig().getBoolean("check-updates")) {
getServer().getScheduler().runTaskAsynchronously(this, this::checkUpdate);
}

WesvMetrics.register(this);
}

@Override
Expand All @@ -95,6 +92,10 @@ public void reloadConfig() {
if (this.configurationManager != null) {
loadConfig();
}

if (this.compatibilityHelper != null) {
this.compatibilityHelper.init();
}
}

private void loadConfig() {
Expand Down Expand Up @@ -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());
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -19,6 +20,7 @@
import org.jetbrains.annotations.Nullable;

import java.lang.reflect.Field;
import java.util.function.Predicate;
import java.util.logging.Level;

/**
Expand All @@ -32,25 +34,40 @@ public class CompatibilityHelper {
private final boolean supportActionBar = isActionBarSupported();
private final boolean worldEdit7 = isWorldEdit7();

private @Nullable Field wandItemField;
private @Nullable Predicate<ItemStack> 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);
}
}

Expand Down Expand Up @@ -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
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 4718b8b

Please sign in to comment.