URLを指定するとプラグインがダウンロードされるplugin

Modding・サーバPlugin制作・ツール制作など、開発関連の質問があればこちらにお願い致します。
フォーラムルール
質問関連フォーラムで質問する時は、必ず次のトピックを一読/厳守お願い致します。
viewtopic.php?f=5&t=999
  • (PostNo.315614)

URLを指定するとプラグインがダウンロードされるplugin

投稿記事by tora0409 » 2018年4月09日(月) 13:10

現在/addplug URLでダウンロードされるpluginを作っているのですが
コード: 全て選択
package net.disaapse.addplug;

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.URL;

import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin {

   public String getFileName() {
      return "a" + ".jar";
   }

   @Override
   public void onDisable() {
        getLogger().info("Enable addplug");
      super.onDisable();
   }

   @Override
   public void onEnable() {
        getLogger().info("Disable addplug");
       getCommand("addplug").setExecutor(new Main());
      super.onEnable();
   }
   public static void fileDownload(String url, File file) throws IOException {
      File parent = file.getParentFile();
      if (!parent.exists()) {
         parent.mkdirs();
      }
      InputStream is = null;
      FileOutputStream fos = null;
      try {
         HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
         connection.setRequestMethod("GET");
         connection.setAllowUserInteraction(false);
         connection.setInstanceFollowRedirects(true);
         connection.connect();
         int httpStatusCode = connection.getResponseCode();
         if (httpStatusCode != HttpURLConnection.HTTP_OK) {
            connection.disconnect();
            return;
         }
         is = connection.getInputStream();
         fos = new FileOutputStream(file);
         byte[] bytes = new byte[4096];
         int length;
         while ((length = is.read(bytes)) != -1) {
            fos.write(bytes, 0, length);
         }
      } catch (MalformedURLException e) {
         throw e;
      } catch (IOException e) {
         throw e;
      } finally {
         if (fos != null) {
            try {
               fos.flush();
               fos.close();
            } catch (IOException e) {
               e.printStackTrace();
            }
         }
         if (is != null) {
            try {
               is.close();
            } catch (IOException e) {
               e.printStackTrace();
            }
         }
      }
   }

   @Override
   public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){

   if(cmd.getName().equalsIgnoreCase("addplug")){

       if (args.length < 1) {
           sender.sendMessage("コマンドの後にURLを指定してください!");
           return true;
       }
      File jarFile = new File("","" + getFileName());
      try {
         Main.fileDownload(args[0], jarFile);
      } catch (IOException e) {
         e.printStackTrace();
      }
      return true;
   }
   return false;
   }

}

このようなコードを書きました。
その時起動時に
コード: 全て選択
[03:52:43 ERROR]: Error occurred while enabling addplug v1 (Is it up to date?)
java.lang.IllegalArgumentException: Plugin already initialized!
   at org.bukkit.plugin.java.PluginClassLoader.initialize(PluginClassLoader.java:122) ~[spigot.jar:git-Spigot-21fe707-e1ebe52]
   at org.bukkit.plugin.java.JavaPlugin.<init>(JavaPlugin.java:66) ~[spigot.jar:git-Spigot-21fe707-e1ebe52]
   at net.disaapse.addplug.Main.<init>(Main.java:15) ~[?:?]
   at net.disaapse.addplug.Main.onEnable(Main.java:30) ~[?:?]
   at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321) ~[spigot.jar:git-Spigot-21fe707-e1ebe52]
   at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:340) [spigot.jar:git-Spigot-21fe707-e1ebe52]
   at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405) [spigot.jar:git-Spigot-21fe707-e1ebe52]
   at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugin(CraftServer.java:357) [spigot.jar:git-Spigot-21fe707-e1ebe52]
   at org.bukkit.craftbukkit.v1_8_R3.CraftServer.enablePlugins(CraftServer.java:317) [spigot.jar:git-Spigot-21fe707-e1ebe52]
   at net.minecraft.server.v1_8_R3.MinecraftServer.s(MinecraftServer.java:414) [spigot.jar:git-Spigot-21fe707-e1ebe52]
   at net.minecraft.server.v1_8_R3.MinecraftServer.k(MinecraftServer.java:378) [spigot.jar:git-Spigot-21fe707-e1ebe52]
   at net.minecraft.server.v1_8_R3.MinecraftServer.a(MinecraftServer.java:333) [spigot.jar:git-Spigot-21fe707-e1ebe52]
   at net.minecraft.server.v1_8_R3.DedicatedServer.init(DedicatedServer.java:263) [spigot.jar:git-Spigot-21fe707-e1ebe52]
   at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:525) [spigot.jar:git-Spigot-21fe707-e1ebe52]
   at java.lang.Thread.run(Thread.java:748) [?:1.8.0_161]
Caused by: java.lang.IllegalStateException: Initial initialization
   at org.bukkit.plugin.java.PluginClassLoader.initialize(PluginClassLoader.java:125) ~[spigot.jar:git-Spigot-21fe707-e1ebe52]
   at org.bukkit.plugin.java.JavaPlugin.<init>(JavaPlugin.java:66) ~[spigot.jar:git-Spigot-21fe707-e1ebe52]
   at net.disaapse.addplug.Main.<init>(Main.java:15) ~[?:?]
   at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_161]
   at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_161]
   at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_161]
   at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_161]
   at java.lang.Class.newInstance(Class.java:442) ~[?:1.8.0_161]
   at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:76) ~[spigot.jar:git-Spigot-21fe707-e1ebe52]
   at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:131) ~[spigot.jar:git-Spigot-21fe707-e1ebe52]
   at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:329) ~[spigot.jar:git-Spigot-21fe707-e1ebe52]
   at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:251) ~[spigot.jar:git-Spigot-21fe707-e1ebe52]
   at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugins(CraftServer.java:292) ~[spigot.jar:git-Spigot-21fe707-e1ebe52]
   at net.minecraft.server.v1_8_R3.DedicatedServer.init(DedicatedServer.java:198) ~[spigot.jar:git-Spigot-21fe707-e1ebe52]
   ... 2 more

というエラーが出て
コマンドを実行/addplug URLをすると
コード: 全て選択
[12:45:15 WARN]: java.io.FileNotFoundException: \a.jar (クライアントは要求された特権を保有していません。)
[12:45:15 WARN]:        at java.io.FileOutputStream.open0(Native Method)
[12:45:15 WARN]:        at java.io.FileOutputStream.open(Unknown Source)
[12:45:15 WARN]:        at java.io.FileOutputStream.<init>(Unknown Source)
[12:45:15 WARN]:        at java.io.FileOutputStream.<init>(Unknown Source)
[12:45:15 WARN]:        at net.disaapse.addplug.Main.fileDownload(Main.java:52)
[12:45:15 WARN]:        at net.disaapse.addplug.Main.onCommand(Main.java:92)
[12:45:15 WARN]:        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
[12:45:15 WARN]:        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141)
[12:45:15 WARN]:        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:641)
[12:45:15 WARN]:        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchServerCommand(CraftServer.java:627)
[12:45:15 WARN]:        at net.minecraft.server.v1_8_R3.DedicatedServer.aO(DedicatedServer.java:412)
[12:45:15 WARN]:        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:375)
[12:45:15 WARN]:        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654)
[12:45:15 WARN]:        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557)
[12:45:15 WARN]:        at java.lang.Thread.run(Unknown Source)

というエラーが出ます
どのように書き直せば正常に動くのか誰か教えてください。
tora0409
ID:b850bc7e
水から上がったとこ
 
記事: 1
登録日時: 2018年4月09日(月) 13:05

  • (PostNo.317901)

Re: URLを指定するとプラグインがダウンロードされるplugin

投稿記事by Direct CGI » 2018年7月08日(日) 17:46

まずこの手のプラグインはjavaの性格上、うまく動作しない可能性が高いです。
1つ目のエラー
その時起動時に
コード: 全て選択
[03:52:43 ERROR]: Error occurred while enabling addplug v1 (Is it up to date?)
java.lang.IllegalArgumentException: Plugin already initialized!
   at org.bukkit.plugin.java.PluginClassLoader.initialize(PluginClassLoader.java:122) ~[spigot.jar:git-Spigot-21fe707-e1ebe52]
   at org.bukkit.plugin.java.JavaPlugin.<init>(JavaPlugin.java:66) ~[spigot.jar:git-Spigot-21fe707-e1ebe52]
   at net.disaapse.addplug.Main.<init>(Main.java:15) ~[?:?]
   at net.disaapse.addplug.Main.onEnable(Main.java:30) ~[?:?]
   at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321) ~[spigot.jar:git-Spigot-21fe707-e1ebe52]
   at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:340) [spigot.jar:git-Spigot-21fe707-e1ebe52]
   at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405) [spigot.jar:git-Spigot-21fe707-e1ebe52]
   at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugin(CraftServer.java:357) [spigot.jar:git-Spigot-21fe707-e1ebe52]
   at org.bukkit.craftbukkit.v1_8_R3.CraftServer.enablePlugins(CraftServer.java:317) [spigot.jar:git-Spigot-21fe707-e1ebe52]
   at net.minecraft.server.v1_8_R3.MinecraftServer.s(MinecraftServer.java:414) [spigot.jar:git-Spigot-21fe707-e1ebe52]
   at net.minecraft.server.v1_8_R3.MinecraftServer.k(MinecraftServer.java:378) [spigot.jar:git-Spigot-21fe707-e1ebe52]
   at net.minecraft.server.v1_8_R3.MinecraftServer.a(MinecraftServer.java:333) [spigot.jar:git-Spigot-21fe707-e1ebe52]
   at net.minecraft.server.v1_8_R3.DedicatedServer.init(DedicatedServer.java:263) [spigot.jar:git-Spigot-21fe707-e1ebe52]
   at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:525) [spigot.jar:git-Spigot-21fe707-e1ebe52]
   at java.lang.Thread.run(Thread.java:748) [?:1.8.0_161]
Caused by: java.lang.IllegalStateException: Initial initialization
   at org.bukkit.plugin.java.PluginClassLoader.initialize(PluginClassLoader.java:125) ~[spigot.jar:git-Spigot-21fe707-e1ebe52]
   at org.bukkit.plugin.java.JavaPlugin.<init>(JavaPlugin.java:66) ~[spigot.jar:git-Spigot-21fe707-e1ebe52]
   at net.disaapse.addplug.Main.<init>(Main.java:15) ~[?:?]
   at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_161]
   at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_161]
   at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_161]
   at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_161]
   at java.lang.Class.newInstance(Class.java:442) ~[?:1.8.0_161]
   at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:76) ~[spigot.jar:git-Spigot-21fe707-e1ebe52]
   at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:131) ~[spigot.jar:git-Spigot-21fe707-e1ebe52]
   at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:329) ~[spigot.jar:git-Spigot-21fe707-e1ebe52]
   at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:251) ~[spigot.jar:git-Spigot-21fe707-e1ebe52]
   at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugins(CraftServer.java:292) ~[spigot.jar:git-Spigot-21fe707-e1ebe52]
   at net.minecraft.server.v1_8_R3.DedicatedServer.init(DedicatedServer.java:198) ~[spigot.jar:git-Spigot-21fe707-e1ebe52]
   ... 2 more

というエラーが出て

はnew Main();とせずにthisに直せば解決します。
あとは、fileDownloadのfinally句の中でconnectionをcloseすべきだと思います。
Direct CGI
ID:73698a49
水から上がったとこ
 
記事: 5
登録日時: 2018年7月08日(日) 17:32


Return to 質問:開発・制作関連

cron

x