Skip to content

Commit df50976

Browse files
Merge pull request #58 from TeamKun/develop
Develop
2 parents 75d4c44 + bddc892 commit df50976

File tree

6 files changed

+261
-32
lines changed

6 files changed

+261
-32
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>net.kunmc.lab</groupId>
88
<artifactId>TeamKunPluginManager</artifactId>
9-
<version>2.6</version>
9+
<version>2.7</version>
1010
<packaging>jar</packaging>
1111

1212
<name>TeamKunPluginManager</name>

src/main/java/net/kunmc/lab/teamkunpluginmanager/commands/CommandInstall.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,12 @@
44
import net.kunmc.lab.teamkunpluginmanager.plugin.Installer;
55
import org.bukkit.ChatColor;
66
import org.bukkit.command.CommandSender;
7+
import org.bukkit.command.ConsoleCommandSender;
8+
import org.bukkit.entity.Player;
79
import org.bukkit.scheduler.BukkitRunnable;
810

11+
import java.io.Console;
12+
913
public class CommandInstall
1014
{
1115
public static void onCommand(CommandSender sender, String[] args)
@@ -32,6 +36,11 @@ public static void onCommand(CommandSender sender, String[] args)
3236
return;
3337
}
3438

39+
if (args.length == 2 && args[1].equals("-CF"))
40+
{
41+
TeamKunPluginManager.functional.remove(sender instanceof ConsoleCommandSender ? null: ((Player) sender).getUniqueId());
42+
}
43+
3544
if (!TeamKunPluginManager.session.lock())
3645
{
3746
sender.sendMessage(ChatColor.RED + "E: TeamKunPluginManagerが多重起動しています。");

src/main/java/net/kunmc/lab/teamkunpluginmanager/plugin/Installer.java

Lines changed: 147 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.g00fy2.versioncompare.Version;
44
import com.google.gson.Gson;
55
import com.google.gson.JsonObject;
6+
import com.sun.org.apache.bcel.internal.generic.GOTO;
67
import net.kunmc.lab.teamkunpluginmanager.TeamKunPluginManager;
78
import net.kunmc.lab.teamkunpluginmanager.utils.HashLib;
89
import net.kunmc.lab.teamkunpluginmanager.utils.Messages;
@@ -11,7 +12,11 @@
1112
import net.kunmc.lab.teamkunpluginmanager.utils.PluginUtil;
1213
import net.kunmc.lab.teamkunpluginmanager.utils.Say2Functional;
1314
import net.kunmc.lab.teamkunpluginmanager.utils.URLUtils;
15+
import net.md_5.bungee.api.chat.ClickEvent;
16+
import net.md_5.bungee.api.chat.ComponentBuilder;
17+
import net.md_5.bungee.api.chat.HoverEvent;
1418
import org.apache.commons.io.FileUtils;
19+
import org.apache.commons.lang.ArrayUtils;
1520
import org.apache.commons.lang.StringUtils;
1621
import org.bukkit.Bukkit;
1722
import org.bukkit.ChatColor;
@@ -27,6 +32,8 @@
2732
import org.bukkit.plugin.PluginDescriptionFile;
2833
import org.bukkit.scheduler.BukkitRunnable;
2934

35+
import javax.naming.Name;
36+
import java.awt.*;
3037
import java.io.File;
3138
import java.io.FileNotFoundException;
3239
import java.io.IOException;
@@ -36,8 +43,11 @@
3643
import java.util.List;
3744
import java.util.Objects;
3845
import java.util.Set;
46+
import java.util.UUID;
3947
import java.util.concurrent.atomic.AtomicBoolean;
48+
import java.util.concurrent.atomic.AtomicInteger;
4049
import java.util.stream.Collectors;
50+
import java.util.stream.IntStream;
4151

4252
@SuppressWarnings("unused")
4353
public class Installer
@@ -188,14 +198,28 @@ public static InstallResult install(CommandSender sender, String url, boolean ig
188198

189199
//ダウンロードする場合はURL・クエリを直リンに変換
190200
if (!withoutDownload)
201+
{
191202
jarURL = PluginResolver.asUrl(url);
192203

193-
//エラーから始まった場合はエラーとして表示し、return
194-
if (!withoutDownload && jarURL.startsWith("ERROR "))
195-
{
196-
finalSender.sendMessage(ChatColor.RED + "E: " + jarURL.substring(6)); //ERROR <-までをきりだし
197-
finalSender.sendMessage(Messages.getStatusMessage(add, remove, modify));
198-
return new InstallResult(add, remove, modify, false);
204+
if (jarURL.startsWith("MULTI"))
205+
{
206+
//MULTIリザルトをパース。
207+
List<Pair<String, String>> multi = parseMultiResult(jarURL.substring(6));
208+
if (sender.getName().equals("DUMMY1145141919810931"))
209+
jarURL = pickPluginJar(multi);
210+
else
211+
{
212+
depend_askToCommandSender(sender, multi, ignoreInstall, withoutResolveDepends, withoutRemove);
213+
return new InstallResult(0, 0, 0, true);
214+
}
215+
}
216+
217+
if (jarURL.startsWith("ERROR "))
218+
{
219+
finalSender.sendMessage(ChatColor.RED + "E: " + jarURL.substring(6)); //ERROR <-までをきりだし
220+
finalSender.sendMessage(Messages.getStatusMessage(add, remove, modify));
221+
return new InstallResult(add, remove, modify, false);
222+
}
199223
}
200224

201225
Pair<Boolean, String> downloadResult;
@@ -597,6 +621,123 @@ public static void delete(CommandSender sender, File f)
597621

598622
}
599623

624+
private static void depend_askToCommandSender(CommandSender sender, List<Pair<String, String>> jar, boolean ignoreInstall, boolean withoutResolveDepends, boolean withoutRemove)
625+
{
626+
UUID uuid = null;
627+
if (sender instanceof Player)
628+
uuid = ((Player) sender).getUniqueId();
629+
630+
sender.sendMessage(ChatColor.YELLOW + "W: リソースが複数見つかりました。インストールするリソースを選択するか、キャンセルを行ってください。");
631+
AtomicInteger integer = new AtomicInteger(0);
632+
jar.forEach(pair -> {
633+
int index = integer.incrementAndGet();
634+
sender.sendMessage(new ComponentBuilder(ChatColor.LIGHT_PURPLE + "- [" + index + "] " + ChatColor.GREEN + pair.getKey())
635+
.event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/kpm i " + pair.getValue() +"-CF"))
636+
.event(new HoverEvent(HoverEvent.Action.SHOW_TEXT,
637+
new ComponentBuilder(ChatColor.GREEN + "クリックしてこのリリースをインストール").create()))
638+
.create()
639+
);
640+
});
641+
642+
sender.sendMessage(ChatColor.LIGHT_PURPLE + "- [c] " + ChatColor.RED + "キャンセル");
643+
644+
TeamKunPluginManager.functional.add(uuid, new Say2Functional.FunctionalEntry(StringUtils::equalsIgnoreCase, s -> {
645+
if (s.equalsIgnoreCase("c"))
646+
{
647+
sender.sendMessage(ChatColor.RED + "E: キャンセルされました。");
648+
return;
649+
}
650+
651+
int i = Integer.parseInt(s);
652+
if (i < 1 || i > jar.size() + 1)
653+
{
654+
sender.sendMessage(ChatColor.RED + "リソースは 1 以上、" + (jar.size() + 1) + " 以下である必要があります。");
655+
sender.sendMessage(ChatColor.RED + "E: キャンセルされました。");
656+
return;
657+
}
658+
659+
Pair<String, String> resource = jar.get(--i);
660+
install(sender, resource.getValue(), ignoreInstall, withoutResolveDepends, withoutRemove, false);
661+
662+
}, (String[]) ArrayUtils.add(IntStream.range(1, jar.size() + 1).parallel()
663+
.mapToObj(String::valueOf)
664+
.toArray(String[]::new), "c"))
665+
);
666+
}
667+
668+
private static String pickPluginJar(List<Pair<String, String>> jar)
669+
{
670+
if (jar.size() == 0)
671+
return null;
672+
673+
String result = "";
674+
String tmp = "";
675+
for (Pair<String, String> pair: jar)
676+
{
677+
String name = pair.getKey();
678+
if (!name.endsWith(".jar") && name.endsWith(".zip"))
679+
continue;
680+
681+
if (StringUtils.containsIgnoreCase(name, "plugin-") ||
682+
StringUtils.containsIgnoreCase(name, "plugin."))
683+
result = pair.getValue();
684+
if (StringUtils.containsIgnoreCase(name, "plugin"))
685+
tmp = pair.getValue();
686+
}
687+
688+
if (result.equals("") && !tmp.equals(""))
689+
result = tmp;
690+
if (result.equals(""))
691+
result = jar.get(0).getValue();
692+
693+
return result;
694+
}
695+
696+
private static List<Pair<String, String>> parseMultiResult(String mlt)
697+
{
698+
List<Pair<String, String>> result = new ArrayList<>();
699+
700+
StringBuilder name = new StringBuilder();
701+
StringBuilder url = new StringBuilder();
702+
boolean escape = false;
703+
boolean flag = true;
704+
705+
for (int i = 0; i < mlt.length(); i++)
706+
{
707+
char c = mlt.charAt(i);
708+
709+
710+
if (!escape && c == '|')
711+
{
712+
if (!name.toString().equals("") && !url.toString().equals(""))
713+
{
714+
result.add(new Pair<>(name.toString(), url.toString()));
715+
name = new StringBuilder();
716+
url = new StringBuilder();
717+
718+
}
719+
flag = !flag;
720+
continue;
721+
}
722+
723+
if (c == '\\')
724+
{
725+
escape = true;
726+
continue;
727+
}
728+
else
729+
escape = false;
730+
731+
if (flag)
732+
name.append(c);
733+
else
734+
url.append(c);
735+
}
736+
737+
return result;
738+
}
739+
740+
600741
/**
601742
* プラグインデータフォルダを削除
602743
*

0 commit comments

Comments
 (0)