Skip to content

Commit 63b7da4

Browse files
Multi QA Supported
1 parent f50d256 commit 63b7da4

File tree

9 files changed

+47
-9
lines changed

9 files changed

+47
-9
lines changed

src/main/java/top/mpt/huihui/answerit/Main.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package top.mpt.huihui.answerit;
22

3-
import org.bukkit.Bukkit;
43
import org.bukkit.ChatColor;
54
import org.bukkit.configuration.file.FileConfiguration;
65
import org.bukkit.configuration.file.YamlConfiguration;
@@ -18,7 +17,10 @@
1817
import static org.bukkit.ChatColor.BLUE;
1918

2019
public final class Main extends JavaPlugin {
21-
20+
// 负责记录正在进行问答的玩家们
21+
public static List<Player> playersOnQuestioning = new ArrayList<>();
22+
// 负责记录Tokens
23+
public static List<String> tokens = new ArrayList<>();
2224
// log用
2325
public static Main instance;
2426
/* Write */

src/main/java/top/mpt/huihui/answerit/commands/impl/q.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import org.bukkit.Bukkit;
66
import org.bukkit.command.CommandSender;
77
import org.bukkit.entity.Player;
8-
import top.mpt.huihui.answerit.Main;
98
import top.mpt.huihui.answerit.commands.ICommand;
109
import top.mpt.huihui.answerit.prize.prize;
1110
import top.mpt.huihui.answerit.utils.ChatUtils;
@@ -40,6 +39,7 @@ public boolean onCommand(CommandSender sender, String[] args) {
4039
// 判断玩家是不是人
4140
if (sender instanceof Player){
4241
q.sender = (Player)sender;
42+
4343
// ClickEvent用
4444
TextComponent message = null;
4545
// 防止index out of range
@@ -51,11 +51,19 @@ public boolean onCommand(CommandSender sender, String[] args) {
5151
// 接收问答的人
5252
// 给event传参用
5353
target = Bukkit.getPlayer(args[0]);
54+
// 判断target
5455
if (target == null){
5556
PlayerUtils.send(sender, i18N.getLang("player_err"));
5657
return true;
5758
}
58-
59+
// 如果服务器上正在发生提问
60+
if (playersOnQuestioning.contains(target)){
61+
PlayerUtils.send(q.sender, i18N.getLang("please_wait_err"));
62+
return true;
63+
}
64+
// 默认玩家已经开始了询问,不管是select还是write
65+
playersOnQuestioning.add(q.sender);
66+
playersOnQuestioning.add(target);
5967
if (Objects.equals(args[2], "select") || Objects.equals(args[2], "Select")){
6068
// 给玩家发送消息
6169
PlayerUtils.send(sender, i18N.getLang("select.player_choose_answer"));
@@ -114,6 +122,7 @@ public boolean onCommand(CommandSender sender, String[] args) {
114122
}
115123

116124
} else {
125+
// 如果都不是,就给玩家发送错误消息
117126
sender.sendMessage((String) i18N.getLang("sender_err"));
118127
}
119128
return true;

src/main/java/top/mpt/huihui/answerit/commands/impl/reload.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ public boolean onCommand(CommandSender sender, String[] args) {
2424
config = YamlConfiguration.loadConfiguration(file);
2525
i18N.setYaml(config);
2626

27+
// 结束提问
28+
tokens.clear();
29+
playersOnQuestioning.clear();
30+
2731
Online_Players.clear();
2832
Bukkit.getOnlinePlayers().forEach( it -> Online_Players.add(it.getName()) );
2933

src/main/java/top/mpt/huihui/answerit/commands/impl/send.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
import top.mpt.huihui.answerit.utils.PlayerUtils;
1010
import top.mpt.huihui.answerit.utils.i18N;
1111

12-
import java.util.Objects;
13-
1412
import static top.mpt.huihui.answerit.Main.*;
1513

1614
public class send extends ICommand {
@@ -22,6 +20,7 @@ public send(){
2220
public boolean onCommand(CommandSender sender, String[] args){
2321
// args[0] == 答对啦!
2422
// args[1] == NameFlying(提问者)
23+
// args[2] == token
2524
if (sender instanceof Player){
2625
if (!prize.canPrize){
2726
PlayerUtils.send(sender, i18N.getLang("global.player_cant_answer"));
@@ -30,14 +29,19 @@ public boolean onCommand(CommandSender sender, String[] args){
3029
if (args.length != 3){
3130
PlayerUtils.send(sender, i18N.getLang("global.command_err_format"));
3231
return true;
33-
} if (!args[2].equals(setAnswer.token)){ // 检验token
32+
}
33+
if (!tokens.contains(args[2])){ // 检验token
3434
PlayerUtils.send(sender, "#RED#Token error.");
3535
} else if (args[0].equals("答对啦!")){
36+
// 移除使用过的token
37+
tokens.remove(args[2]);
3638
ChatUtils.broadcast((String) i18N.getLang("select.target_choose_right_answer"), sender.getName(), args[1]);
3739
prize.setPrizePlayer((Player) sender);
3840
prize.setTargetPlayer(Bukkit.getPlayer(args[1]));
3941
prize.executePrize();
4042
} else if (args[0].equals("答错了!")){
43+
// 移除使用过的token
44+
tokens.remove(args[2]);
4145
ChatUtils.broadcast((String) i18N.getLang("select.target_choose_wrong_answer"), sender.getName(), args[1]);
4246
prize.setTargetPlayer((Player) sender);
4347
prize.setPrizePlayer(Bukkit.getPlayer(args[1]));

src/main/java/top/mpt/huihui/answerit/commands/impl/setAnswer.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import top.mpt.huihui.answerit.utils.PlayerUtils;
1111
import top.mpt.huihui.answerit.utils.i18N;
1212

13+
import static top.mpt.huihui.answerit.Main.*;
14+
1315
import java.util.List;
1416
import java.util.Objects;
1517
import java.util.Random;
@@ -112,10 +114,13 @@ public static String getRandomString(int length){
112114
String str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
113115
Random random = new Random();
114116
StringBuffer sb = new StringBuffer();
115-
for(int i=0; i<length; i++){
116-
int number=random.nextInt(62);
117+
for(int i = 0; i < length; i++){
118+
int number = random.nextInt(62);
117119
sb.append(str.charAt(number));
118120
}
121+
// put tokens into a List
122+
tokens.add(sb.toString());
123+
// return it
119124
return sb.toString();
120125
}
121126
}

src/main/java/top/mpt/huihui/answerit/listener/InvOpen.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import org.bukkit.entity.Player;
77
import top.mpt.huihui.answerit.prize.prize;
88

9+
import static top.mpt.huihui.answerit.Main.playersOnQuestioning;
10+
911
public class InvOpen implements Listener {
1012
/* from prize.prize */
1113
@EventHandler
@@ -22,8 +24,15 @@ public void onInvClicked(InventoryClickEvent event){
2224
targetPlayer.getInventory().remove(event.getCurrentItem());
2325
// 关闭inventory
2426
prizePlayer.closeInventory();
27+
// 奖励结束,移除玩家
28+
// 防止玩家因为sb腐竹reload而插件报错无法获取奖励
29+
if (playersOnQuestioning.contains(prizePlayer) && playersOnQuestioning.contains(targetPlayer)){
30+
playersOnQuestioning.remove(prizePlayer);
31+
playersOnQuestioning.remove(targetPlayer);
32+
}
2533
// 结束奖励
2634
prize.clearAllPlayer();
35+
2736
/* to the end of this(select / write) process */
2837
}
2938

src/main/java/top/mpt/huihui/answerit/prize/prize.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ public static void clearAllPlayer(){
6565
* 默认为打开对方背包并且可以拿取任意一个物品
6666
*/
6767
public static void executePrize(){
68+
// 执行奖励
6869
prizePlayer.openInventory(targetPlayer.getInventory());
6970
/* to listener.InvOpen */
7071
}

src/main/resources/lang/en_us.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ sender_err: "Please let players execute this command!"
77
mode_err: "#RED#Mode is wrong, please ask %s to check about."
88
player_err: "#RED#Cannot find players who named that. Or maybe the player isn't online."
99

10+
please_wait_err: "#AQUA#Someone is already in Q&A. To prevent any bugs, please wait for them to complete the Q&A before asking any questions to someone."
11+
1012
tab_tips:
1113
input_question: "Please enter the question here"
1214
input_answer: "Please enter the answer here (one answer per space)"

src/main/resources/lang/zh_cn.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ sender_err: "请让玩家执行指令!"
66
mode_err: "#RED#提问类型有误,请让%s检查一下。"
77
player_err: "#RED#找不到玩家或玩家不在线"
88

9+
please_wait_err: "#AQUA#此玩家正在进行问答操作,为了防止出现bug,请等待他们完成问答后在进行提问。"
10+
911
tab_tips:
1012
input_question: "请在这里输入问题(带问号)"
1113
input_answer: "请在这里输入答案(每个空格为1个答案)"

0 commit comments

Comments
 (0)