Skip to content

Commit 931a403

Browse files
committed
完成
1 parent ec7947a commit 931a403

File tree

7 files changed

+117
-52
lines changed

7 files changed

+117
-52
lines changed

src/main/java/com/github/elic0de/thejpspit/TheJpsPit.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.github.elic0de.thejpspit.database.SqLiteDatabase;
77
import com.github.elic0de.thejpspit.game.Game;
88
import com.github.elic0de.thejpspit.listener.EventListener;
9+
import com.github.elic0de.thejpspit.network.PluginMessageReceiver;
910
import com.github.elic0de.thejpspit.player.PitPlayer;
1011
import com.github.elic0de.thejpspit.player.PitPlayerManager;
1112
import com.github.elic0de.thejpspit.queue.QueueManager;
@@ -54,6 +55,9 @@ public void onEnable() {
5455

5556
queueTask = new QueueTask();
5657

58+
getServer().getMessenger().registerIncomingPluginChannel(this, PluginMessageReceiver.BUNGEE_CHANNEL_ID, new PluginMessageReceiver());
59+
getServer().getMessenger().registerOutgoingPluginChannel(this, PluginMessageReceiver.BUNGEE_CHANNEL_ID);
60+
5761
registerCommands();
5862
registerListener();
5963

@@ -94,6 +98,9 @@ public void onDisable() {
9498

9599
queueTask.stop();
96100

101+
getServer().getMessenger().unregisterOutgoingPluginChannel(this);
102+
getServer().getMessenger().unregisterIncomingPluginChannel(this);
103+
97104
Bukkit.getOnlinePlayers().forEach(player -> {
98105
final PitPlayer pitPlayer = PitPlayerManager.getPitPlayer(player);
99106
game.leave(pitPlayer);

src/main/java/com/github/elic0de/thejpspit/gui/ServerQueueMenu.java

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.github.elic0de.thejpspit.TheJpsPit;
44
import com.github.elic0de.thejpspit.player.PitPlayer;
55
import com.github.elic0de.thejpspit.player.PitPlayerManager;
6+
import com.github.elic0de.thejpspit.queue.QueueManager;
67
import com.github.elic0de.thejpspit.queue.QueueServerType;
78
import de.themoep.inventorygui.DynamicGuiElement;
89
import de.themoep.inventorygui.InventoryGui;
@@ -36,34 +37,46 @@ private ServerQueueMenu(TheJpsPit plugin, String title) {
3637
// Add filler items
3738
this.menu.setFiller(new ItemStack(Material.BLACK_STAINED_GLASS_PANE, 1));
3839
// Add pagination handling
39-
this.menu.addElement(getButton('x', QueueServerType.WOOL_PVP, new ItemStack(Material.PINK_WOOL),"CatchTheWool", "&7相手陣地にある羊毛を自分陣地へ持ち帰れ!"));
40-
this.menu.addElement(getButton('y', QueueServerType.BATTLE_CASTLE, new ItemStack(Material.COBBLESTONE), "BattleCastle", "&7自分のコアを守りつつ相手のコアを破壊せよ!!"));
40+
this.menu.addElement(queueButton('x', QueueServerType.WOOL_PVP, new ItemStack(Material.PINK_WOOL),"CatchTheWool", "&7相手陣地にある羊毛を自分陣地へ持ち帰れ!"));
41+
this.menu.addElement(queueButton('y', QueueServerType.BATTLE_CASTLE, new ItemStack(Material.COBBLESTONE), "BattleCastle", "&7自分のコアを守りつつ相手のコアを破壊せよ!!"));
4142
this.menu.addElement(statusButton());
4243
this.menu.addElement(closeButton());
4344
}
4445

45-
private StaticGuiElement getButton(char symbol, QueueServerType type, ItemStack itemStack, String title, String desc) {
46-
return new StaticGuiElement(symbol, itemStack,
47-
click -> {
48-
final PitPlayer pitPlayer = PitPlayerManager.getPitPlayer((Player) click.getWhoClicked());
49-
TheJpsPit.getInstance().getQueueManager().addQueue(pitPlayer, type);
50-
return true;
51-
},
52-
title,
53-
desc
54-
);
46+
private DynamicGuiElement queueButton(char symbol, QueueServerType type, ItemStack itemStack, String title, String desc) {
47+
return new DynamicGuiElement(symbol, (viewer) -> {
48+
final QueueManager queueManager = TheJpsPit.getInstance().getQueueManager();
49+
final PitPlayer pitPlayer = PitPlayerManager.getPitPlayer((Player) viewer);
50+
final boolean isQueued = TheJpsPit.getInstance().getQueueManager().isQueued(pitPlayer, type);
51+
return new StaticGuiElement(symbol, itemStack,
52+
click -> {
53+
if (isQueued)
54+
queueManager.cancelQueue(pitPlayer);
55+
else
56+
queueManager.addQueue(pitPlayer, type);
57+
click.getGui().draw();
58+
return true;
59+
},
60+
title,
61+
desc,
62+
" ",
63+
"&7必要なプレイヤー: &a" + queueManager.getNeededPlayer(type),
64+
isQueued ? "&cクリックしてキャンセルする" : "&eクリックしてキューを追加"
65+
);
66+
});
5567
}
5668

5769
private DynamicGuiElement statusButton() {
5870
return new DynamicGuiElement('z', (viewer) -> {
59-
final PitPlayer pitPlayer = PitPlayerManager.getPitPlayer(viewer.getKiller());
60-
return new StaticGuiElement('z', new ItemStack(Material.IRON_SWORD),
71+
final PitPlayer pitPlayer = PitPlayerManager.getPitPlayer((Player) viewer);
72+
return new StaticGuiElement('z', new ItemStack(Material.IRON_SWORD),
6173
click -> true,
6274
"Pit Status",
63-
"Kills" + pitPlayer.getKills(),
64-
"Deaths" + pitPlayer.getDeaths(),
65-
"Rating" + pitPlayer.getRating()
66-
);
75+
" ",
76+
"&7Kills: &c" + pitPlayer.getKills(),
77+
"&7Deaths: &e" + pitPlayer.getDeaths(),
78+
"&7Rating: &a" + pitPlayer.getRating()
79+
);
6780
});
6881
}
6982

src/main/java/com/github/elic0de/thejpspit/message/PluginMessageReceiver.java

Lines changed: 0 additions & 24 deletions
This file was deleted.
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.github.elic0de.thejpspit.network;
2+
3+
import com.github.elic0de.thejpspit.TheJpsPit;
4+
import com.github.elic0de.thejpspit.player.PitPlayer;
5+
import com.github.elic0de.thejpspit.queue.QueueServerType;
6+
import com.google.common.io.ByteArrayDataInput;
7+
import com.google.common.io.ByteArrayDataOutput;
8+
import com.google.common.io.ByteStreams;
9+
import org.bukkit.Bukkit;
10+
import org.bukkit.entity.Player;
11+
import org.bukkit.plugin.messaging.PluginMessageListener;
12+
13+
public class PluginMessageReceiver implements PluginMessageListener {
14+
15+
public static final String BUNGEE_CHANNEL_ID = "BungeeCord";
16+
17+
@Override
18+
public void onPluginMessageReceived(String channel, Player player, byte[] message) {
19+
if (!channel.equals(BUNGEE_CHANNEL_ID)) {
20+
return;
21+
}
22+
ByteArrayDataInput input = ByteStreams.newDataInput(message);
23+
24+
String server = input.readUTF(); // Name of server, as given in the arguments
25+
int playercount = input.readInt();
26+
27+
TheJpsPit.getInstance().getQueueManager().updateQueue(QueueServerType.valueOf(server), playercount);
28+
}
29+
30+
public static void sendServerPlayerCount(String serverName) {
31+
final ByteArrayDataOutput outputStream = ByteStreams.newDataOutput();
32+
33+
outputStream.writeUTF("PlayerCount");
34+
outputStream.writeUTF(serverName);
35+
36+
Bukkit.getServer().sendPluginMessage(TheJpsPit.getInstance() , BUNGEE_CHANNEL_ID, outputStream.toByteArray());
37+
}
38+
39+
public static void changeServer(PitPlayer player, String serverName) {
40+
ByteArrayDataOutput out = ByteStreams.newDataOutput();
41+
out.writeUTF("Connect");
42+
out.writeUTF(serverName);
43+
player.getPlayer().sendPluginMessage(TheJpsPit.getInstance(), PluginMessageReceiver.BUNGEE_CHANNEL_ID, out.toByteArray());
44+
}
45+
46+
}

src/main/java/com/github/elic0de/thejpspit/player/PitPlayer.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.github.elic0de.thejpspit.TheJpsPit;
44
import com.github.elic0de.thejpspit.database.Database;
5+
import com.github.elic0de.thejpspit.leveler.Level;
6+
import com.github.elic0de.thejpspit.leveler.Levels;
57
import com.github.elic0de.thejpspit.util.ShowHealth;
68
import fr.mrmicky.fastboard.FastBoard;
79
import org.bukkit.ChatColor;
@@ -59,7 +61,7 @@ public void addItem() {
5961
final PlayerInventory inventory = player.getInventory();
6062

6163
inventory.setArmorContents(ARMOR);
62-
64+
inventory.remove(Material.ARROW);
6365
for (ItemStack item : INVENTORY) {
6466
if (inventory.contains(item)) continue;
6567
inventory.addItem(item);
@@ -99,6 +101,13 @@ public void sendStatus() {
99101
).forEach(string -> sendMessage(string));
100102
}
101103

104+
private void updateXpBar() {
105+
final float xp = Levels.getPlayerNeededXP(this);
106+
final int level = Levels.getPlayerLevel(this);
107+
player.setLevel(level);
108+
player.setExp(Math.abs(100 - xp)/100);
109+
}
110+
102111
public Player getPlayer() {
103112
return player;
104113
}
@@ -145,6 +154,7 @@ public void increaseDeaths() {
145154

146155
public void increaseXP() {
147156
this.xp++;
157+
updateXpBar();
148158
}
149159

150160
public void increaseHealth() {

src/main/java/com/github/elic0de/thejpspit/queue/QueueManager.java

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.github.elic0de.thejpspit.queue;
22

33
import com.github.elic0de.thejpspit.TheJpsPit;
4+
import com.github.elic0de.thejpspit.network.PluginMessageReceiver;
45
import com.github.elic0de.thejpspit.player.PitPlayer;
56
import com.google.common.io.ByteArrayDataOutput;
67
import com.google.common.io.ByteStreams;
@@ -15,12 +16,14 @@ public class QueueManager {
1516
private final Set<PitPlayer> queuedBattlePlayer = new HashSet<>();
1617
private final Set<PitPlayer> queuedWoolPlayer = new HashSet<>();
1718

18-
private final Map<QueueServerType, Integer> servers = new HashMap<>();
19+
private final Map<QueueServerType, Integer> servers = new HashMap<>();
1920

2021
private final int MIN_PLAYER_SIZE = 6;
2122

2223
public void checkQueue() {
2324
for (QueueServerType type : QueueServerType.values()) {
25+
PluginMessageReceiver.sendServerPlayerCount(type.name());
26+
if (servers.isEmpty()) continue;
2427
final int playerSize = servers.get(type);
2528
final Set<PitPlayer> queuedPlayers = type == QueueServerType.WOOL_PVP ? queuedWoolPlayer : queuedBattlePlayer;
2629

@@ -31,23 +34,37 @@ public void checkQueue() {
3134
}
3235

3336
public void addQueue(PitPlayer player, QueueServerType type) {
37+
cancelQueue(player);
3438
if (type == QueueServerType.BATTLE_CASTLE) queuedBattlePlayer.add(player);
3539
else queuedWoolPlayer.add(player);
3640
checkQueue();
3741
}
3842

43+
public void cancelQueue(PitPlayer player) {
44+
queuedBattlePlayer.remove(player);
45+
queuedWoolPlayer.remove(player);
46+
}
47+
3948
public void updateQueue(QueueServerType type, int playerCount) {
4049
servers.put(type, playerCount);
4150
}
4251

52+
public boolean isQueued(PitPlayer player, QueueServerType type) {
53+
final Set<PitPlayer> queuedPlayers = type == QueueServerType.WOOL_PVP ? queuedWoolPlayer : queuedBattlePlayer;
54+
return queuedPlayers.contains(player);
55+
}
56+
4357
private void sendServer(QueueServerType type) {
4458
final Set<PitPlayer> queuedPlayers = type == QueueServerType.WOOL_PVP ? queuedWoolPlayer : queuedBattlePlayer;
4559

4660
for (PitPlayer player : queuedPlayers) {
47-
ByteArrayDataOutput out = ByteStreams.newDataOutput();
48-
out.writeUTF("Connect");
49-
out.writeUTF(type.name());
50-
player.getPlayer().sendPluginMessage(TheJpsPit.getInstance(), "BungeeCord", out.toByteArray());
61+
PluginMessageReceiver.changeServer(player, type.name());
5162
}
5263
}
64+
65+
public int getNeededPlayer(QueueServerType type) {
66+
if (servers.isEmpty()) return 6;
67+
final Set<PitPlayer> queuedPlayers = type == QueueServerType.WOOL_PVP ? queuedWoolPlayer : queuedBattlePlayer;
68+
return Math.max(0, 6 - (queuedPlayers.size() + servers.get(type)));
69+
}
5370
}

src/main/java/com/github/elic0de/thejpspit/queue/QueueServer.java

Lines changed: 0 additions & 4 deletions
This file was deleted.

0 commit comments

Comments
 (0)