diff --git a/src/me/arboriginal/SimpleCompass/commands/InterfaceCommand.java b/src/me/arboriginal/SimpleCompass/commands/InterfaceCommand.java index 3a0b3e9..2819f2d 100644 --- a/src/me/arboriginal/SimpleCompass/commands/InterfaceCommand.java +++ b/src/me/arboriginal/SimpleCompass/commands/InterfaceCommand.java @@ -149,16 +149,19 @@ private void buildInterfaceOptions( } private void buildInterfaceTracking(Player player, BookMeta meta) { - Set ordered = sc.locale - .getConfigurationSection("commands." + mainCommand + ".track.buttons").getKeys(false); + List trackers = new ArrayList(); + Set ordered = sc.locale.getConfigurationSection( + "commands." + mainCommand + ".track.buttons").getKeys(false); - for (String[] part : chunk(sc.targets.trackersPriority, + for (String trackerID : sc.targets.trackersPriority) + if (player.hasPermission("scompass.track." + trackerID)) trackers.add(trackerID); + + for (String[] part : chunk(trackers.toArray(new String[trackers.size()]), sc.locale.getInt("commands." + mainCommand + ".track.per_page"))) { ArrayList content = new ArrayList(); content.add(new TextComponent(sc.prepareMessage("commands." + mainCommand + ".header") + "\n\n")); for (String trackerID : part) { - if (!player.hasPermission("scompass.track." + trackerID)) continue; AbstractTracker tracker = sc.trackers.get(trackerID); if (tracker == null) continue; diff --git a/src/me/arboriginal/SimpleCompass/compasses/AbstractCompass.java b/src/me/arboriginal/SimpleCompass/compasses/AbstractCompass.java index e4840be..96a598d 100644 --- a/src/me/arboriginal/SimpleCompass/compasses/AbstractCompass.java +++ b/src/me/arboriginal/SimpleCompass/compasses/AbstractCompass.java @@ -142,7 +142,6 @@ private String injectActivatedTrackers(String compass, String sepColor) { if (targets.isEmpty()) return compass; Location refPos = owner.getEyeLocation(); - Vector lookAt = refPos.getDirection().setY(0); HashMap placeholders = new HashMap(); @@ -155,10 +154,11 @@ private String injectActivatedTrackers(String compass, String sepColor) { String symbol = tracker.settings.getString("settings.symbol"); placeholders.put(marker, symbol + sepColor); - for (double[] target : targets.get(type)) { + for (double[] target : coords) { Vector blockDirection = new Location(owner.getWorld(), target[0], refPos.getY(), target[1]) .subtract(refPos).toVector().normalize(); + Vector lookAt = refPos.getDirection().setY(0); boolean viewable = (lookAt.dot(blockDirection) > 0); double angle = Math.toDegrees(blockDirection.angle(lookAt.crossProduct(new Vector(0, 1, 0)))); if (!viewable) angle = (angle > 90) ? 180 : 0; diff --git a/src/me/arboriginal/SimpleCompass/plugin/AbstractTracker.java b/src/me/arboriginal/SimpleCompass/plugin/AbstractTracker.java index 3fd09c4..a124b03 100644 --- a/src/me/arboriginal/SimpleCompass/plugin/AbstractTracker.java +++ b/src/me/arboriginal/SimpleCompass/plugin/AbstractTracker.java @@ -1,6 +1,8 @@ package me.arboriginal.SimpleCompass.plugin; import java.io.File; +import java.io.InputStream; +import java.io.InputStreamReader; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; @@ -14,7 +16,6 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import com.google.common.collect.ImmutableMap; -import me.arboriginal.SimpleCompass.utils.LangUtil; public abstract class AbstractTracker { protected SimpleCompass sc; @@ -66,21 +67,32 @@ public String version() { * so DO NOT USE sc.config here, and DO NOT call methods which use this. */ public boolean init() { - if (!sf.exists()) { - URL res = getClass().getResource("/settings.yml"); - if (res == null) return false; + URL res = getClass().getResource("/settings.yml"); + if (res == null) return false; - try { - LangUtil.writeResourceToFile(res.openStream(), sf); - sc.getLogger().info("Default settings for " + trackerID() + " tracker copied into " + sf.getPath()); - } - catch (Exception e) { - sc.getLogger().severe("Can't write to " + sf.getAbsolutePath()); - return false; - } + settings = YamlConfiguration.loadConfiguration(sf); + settings.options().copyDefaults(true); + + InputStream is; + + try { + is = res.openStream(); + } + catch (Exception e) { + sc.getLogger().warning("Can't write default settings to " + sf.getAbsolutePath()); + return false; + } + + settings.setDefaults(YamlConfiguration.loadConfiguration(new InputStreamReader(is))); + + try { + settings.save(sf); + } + catch (Exception e) { + sc.getLogger().severe("Can't write to " + sf.getAbsolutePath()); + return false; } - settings = YamlConfiguration.loadConfiguration(sf); return true; } diff --git a/src/me/arboriginal/SimpleCompass/plugin/SimpleCompass.java b/src/me/arboriginal/SimpleCompass/plugin/SimpleCompass.java index c4b9fe1..78a1fa0 100644 --- a/src/me/arboriginal/SimpleCompass/plugin/SimpleCompass.java +++ b/src/me/arboriginal/SimpleCompass/plugin/SimpleCompass.java @@ -336,7 +336,7 @@ private Exception loadTrackerFile(File file) { catch (Exception e) {} if (entries == null) - return loadTrackerException(loader, jar, "Can't initialize a class loader from " + file.getName()); + return loadTrackerException(loader, jar, "Can't read content of " + file.getName()); while (entries.hasMoreElements()) { JarEntry entry = entries.nextElement(); diff --git a/src/plugin.yml b/src/plugin.yml index dc0449c..0e04c4e 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: SimpleCompass description: Simple compass to help player who don't have sense of direction. -version: 0.9.3 +version: 0.9.4 author: arboriginal website: https://www.spigotmc.org/resources/simplecompass.63140/