diff --git a/pom.xml b/pom.xml
index 278d7db..55ed7bd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
ru.simsonic
rscPermissions
- 0.10.1b-SNAPSHOT
+ 0.10.2b-SNAPSHOT
jar
rscPermissions
@@ -62,8 +62,8 @@
- org.spigotmc
- spigot-api
+ org.bukkit
+ bukkit
1.8.8-R0.1-SNAPSHOT
provided
@@ -84,7 +84,7 @@
ru.simsonic
rscMinecraftLibrary
- 2.2.0
+ 2.2.1
compile
diff --git a/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java b/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java
index b9ef5bf..6ed29c4 100644
--- a/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java
+++ b/src/main/java/ru/simsonic/rscPermissions/BridgeForBukkitAPI.java
@@ -2,11 +2,9 @@ package ru.simsonic.rscPermissions;
import com.sk89q.wepif.PermissionsResolverManager;
import org.bukkit.command.ConsoleCommandSender;
-import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.ServicePriority;
import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes;
-import ru.simsonic.rscMinecraftLibrary.Bukkit.Tools;
import ru.simsonic.rscPermissions.API.Settings;
import ru.simsonic.rscPermissions.Bukkit.VaultChat;
import ru.simsonic.rscPermissions.Bukkit.VaultPermission;
diff --git a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java
index f6bddcd..06daac5 100644
--- a/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java
+++ b/src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java
@@ -10,6 +10,7 @@ import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitScheduler;
import org.mcstats.MetricsLite;
+import ru.simsonic.rscMinecraftLibrary.AutoUpdater.BukkitUpdater;
import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException;
import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes;
import ru.simsonic.rscMinecraftLibrary.Bukkit.Tools;
@@ -25,7 +26,6 @@ import ru.simsonic.rscPermissions.Engine.Backends.BackendJson;
import ru.simsonic.rscPermissions.Engine.Backends.DatabaseContents;
import ru.simsonic.rscPermissions.Engine.InternalCache;
import ru.simsonic.rscPermissions.Engine.Phrases;
-import ru.simsonic.rscPermissions.Updater.BukkitUpdater;
public final class BukkitPluginMain extends JavaPlugin
{
diff --git a/src/main/java/ru/simsonic/rscPermissions/Updater/BukkitUpdater.java b/src/main/java/ru/simsonic/rscPermissions/Updater/BukkitUpdater.java
deleted file mode 100644
index 30d185e..0000000
--- a/src/main/java/ru/simsonic/rscPermissions/Updater/BukkitUpdater.java
+++ /dev/null
@@ -1,247 +0,0 @@
-package ru.simsonic.rscPermissions.Updater;
-
-import com.google.gson.Gson;
-import com.google.gson.JsonParseException;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.nio.channels.Channels;
-import java.nio.channels.ReadableByteChannel;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import org.bukkit.command.ConsoleCommandSender;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.player.PlayerKickEvent;
-import org.bukkit.event.player.PlayerQuitEvent;
-import org.bukkit.plugin.java.JavaPlugin;
-import ru.simsonic.rscCommonsLibrary.RestartableThread;
-import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes;
-
-public final class BukkitUpdater implements Listener
-{
- private final JavaPlugin plugin;
- private final String latestURL;
- private final HashSet staff = new HashSet<>();
- private final String chatPrefix;
- public BukkitUpdater(JavaPlugin plugin, String latestURL, String chatPrefix)
- {
- this.plugin = plugin;
- this.latestURL = latestURL;
- this.chatPrefix = chatPrefix;
- }
- public void onEnable()
- {
- plugin.getServer().getPluginManager().registerEvents(BukkitUpdater.this, plugin);
- checkUpdate(null);
- }
- public void checkUpdate(Player sender)
- {
- if(sender != null)
- staff.add(sender);
- threadCheck.start();
- }
- public void doUpdate(Player sender)
- {
- if(sender != null)
- staff.add(sender);
- threadUpdate.start();
- }
- private final RestartableThread threadCheck = new RestartableThread()
- {
- @Override
- public void run()
- {
- checkForUpdate();
- final ArrayList lines = latestToLines();
- if(lines != null)
- runLines(lines.toArray(new String[lines.size()]));
- else
- runLine("You are using the latest version.");
- }
- };
- private final RestartableThread threadUpdate = new RestartableThread()
- {
- @Override
- public void run()
- {
- runLine("Downloading update...");
- if(downloadUpdate())
- {
- // SUCCESS
- runLine("Installing update...");
- installUpdate();
- runLines(new String[]
- {
- "{_LG}Installation complete!",
- "Please restart your server to avoid errors.",
- });
- } else {
- // FAILED
- runLines(new String[] {
- "{_LR}Downloading error!",
- "Cannot download update file. Please try later.",
- });
- }
- }
- };
- private Latest latest = new Latest();
- private void checkForUpdate()
- {
- try
- {
- this.latest = new Gson().fromJson(downloadJson(latestURL), Latest.class);
- } catch(IOException ex) {
- this.latest = new Latest();
- }
- if(latest.note == null)
- latest.note = "New version: " + latest.version;
- if(latest.notes == null)
- latest.notes = new String[] { latest.note };
- if(latest.version == null)
- latest.version = plugin.getDescription().getVersion();
- }
- private void runLine(final String line)
- {
- runLines(new String[] { line });
- }
- private void runLines(final String[] lines)
- {
- final Runnable syncTask = new Runnable()
- {
- @Override
- public synchronized void run()
- {
- // CONSOLE
- final ConsoleCommandSender console = plugin.getServer().getConsoleSender();
- for(String line : lines)
- if(line != null)
- console.sendMessage(GenericChatCodes.processStringStatic(chatPrefix + line));
- // PLAYERS
- for(Player online : staff)
- for(String line : lines)
- if(line != null)
- online.sendMessage(GenericChatCodes.processStringStatic(chatPrefix + line));
- notify();
- }
- };
- try
- {
- synchronized(syncTask)
- {
- plugin.getServer().getScheduler().runTask(plugin, syncTask);
- syncTask.wait();
- }
- } catch(InterruptedException ex) {
- }
- }
- private ArrayList latestToLines()
- {
- // THERE IS NO UPDATE
- if(plugin.getDescription().getVersion().equals(latest.version))
- return null;
- // THERE IS AN UPDATE
- final ArrayList result = new ArrayList<>();
- result.add("New "
- + (latest.snapshot ? "{_DS}snapshot {_LS}" : "{_WH}release {_LS}")
- + "version {_LG}" + latest.version + "{_LS} is available!");
- result.addAll(Arrays.asList(latest.notes));
- result.add("Apply this update with command {GOLD}/rscfjd update do");
- return result;
- }
- public void onAdminJoin(Player player, boolean fromEvent)
- {
- staff.add(player);
- if(fromEvent)
- {
- final ArrayList lines = latestToLines();
- if(lines != null)
- for(String line : lines)
- if(line != null)
- player.sendMessage(GenericChatCodes.processStringStatic(chatPrefix + line));
- }
- }
- @EventHandler
- protected void onPlayerQuit(PlayerQuitEvent event)
- {
- staff.add(event.getPlayer());
- }
- @EventHandler
- protected void onPlayerKick(PlayerKickEvent event)
- {
- staff.add(event.getPlayer());
- }
- private static String downloadJson(String url) throws IOException
- {
- try
- {
- final HttpURLConnection connection = (HttpURLConnection)new URL(url).openConnection();
- connection.setDoOutput(true);
- connection.setDoInput(true);
- connection.setConnectTimeout(5000);
- connection.setReadTimeout(5000);
- connection.setUseCaches(false);
- final int responseCode = connection.getResponseCode();
- if(responseCode == HttpURLConnection.HTTP_OK)
- return readUnicodeStream(connection.getInputStream());
- throw new IOException(new StringBuilder()
- .append(Integer.toString(responseCode))
- .append("Erroneous result of executing web-method: ")
- .append(connection.getResponseMessage())
- .append("\r\n")
- .append(readUnicodeStream(connection.getErrorStream()))
- .toString());
- } catch(JsonParseException | MalformedURLException ex) {
- throw new IOException(ex);
- } catch(IOException ex) {
- throw ex;
- }
- }
- private static String readUnicodeStream(InputStream is) throws IOException
- {
- try(ByteArrayOutputStream baos = new ByteArrayOutputStream())
- {
- final byte[] buffer = new byte[1024];
- for(int length = 0; length != -1; length = is.read(buffer))
- baos.write(buffer, 0, length);
- return new String(baos.toByteArray(), "UTF-8");
- }
- }
- private boolean downloadUpdate()
- {
- final File folder = plugin.getDataFolder().getParentFile();
- final File target = new File(folder, plugin.getName() + "_v" + latest.version + ".jar");
- try(FileOutputStream fos = new FileOutputStream(target))
- {
- final ReadableByteChannel rbc = Channels.newChannel(new URL(latest.url).openStream());
- fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
- fos.flush();
- return true;
- } catch(MalformedURLException ex) {
- System.err.println(ex);
- } catch(IOException ex) {
- System.err.println(ex);
- }
- return false;
- }
- private void installUpdate()
- {
- // RENAME OLD VERSION
- try
- {
- final String outdatedJarPath = plugin.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().getPath();
- final File outdatedJarSrc = new File(outdatedJarPath);
- final File outdatedJarDst = new File(outdatedJarPath + "-outdated");
- outdatedJarSrc.renameTo(outdatedJarDst);
- } catch(URISyntaxException ex) {
- }
- }
-}
diff --git a/src/main/java/ru/simsonic/rscPermissions/Updater/Latest.java b/src/main/java/ru/simsonic/rscPermissions/Updater/Latest.java
deleted file mode 100644
index ae3c725..0000000
--- a/src/main/java/ru/simsonic/rscPermissions/Updater/Latest.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package ru.simsonic.rscPermissions.Updater;
-
-public class Latest
-{
- public String version;
- public String note;
- public String[] notes;
- public String url;
- public boolean snapshot;
-}