Skip to content

Commit 9015629

Browse files
committed
デスチェストとアクションバー実装実質完成
1 parent 01a6018 commit 9015629

File tree

6 files changed

+128
-5
lines changed

6 files changed

+128
-5
lines changed

pom.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,10 @@
8282
<id>aikar</id>
8383
<url>https://repo.aikar.co/content/groups/aikar/</url>
8484
</repository>
85+
<repository>
86+
<id>minebench-repo</id>
87+
<url>https://repo.minebench.de/</url>
88+
</repository>
8589
</repositories>
8690

8791
<dependencies>
@@ -109,5 +113,12 @@
109113
<artifactId>acf-paper</artifactId>
110114
<version>0.5.1-SNAPSHOT</version>
111115
</dependency>
116+
<dependency>
117+
<groupId>de.themoep</groupId>
118+
<artifactId>inventorygui</artifactId>
119+
<!--The following version may not be the latest. Check it before using.-->
120+
<version>1.6-SNAPSHOT</version>
121+
<scope>compile</scope>
122+
</dependency>
112123
</dependencies>
113124
</project>
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.github.elic0de.hungergames.chest;
2+
3+
import com.github.elic0de.hungergames.menu.DeathChestMenu;
4+
import com.github.elic0de.hungergames.user.GameUser;
5+
import org.bukkit.Location;
6+
import org.bukkit.Material;
7+
import org.bukkit.entity.Player;
8+
import org.bukkit.inventory.ItemStack;
9+
10+
import java.util.HashMap;
11+
import java.util.Map;
12+
13+
public class DeathChest {
14+
15+
private final Map<Location, ItemStack[]> chestLocations = new HashMap<>();
16+
17+
public void generateChest(GameUser user) {
18+
final Location chestLocation = user.getPlayer().getLocation();
19+
chestLocation.getWorld().setType(chestLocation, Material.CHEST);
20+
chestLocations.put(chestLocation, user.getPlayer().getInventory().getContents());
21+
}
22+
23+
public void openDeathChest(Player player, Location location) {
24+
if (chestLocations.containsKey(location)) {
25+
final ItemStack[] contents = chestLocations.get(location);
26+
new DeathChestMenu(contents).show(player);
27+
}
28+
}
29+
30+
public void reset() {
31+
chestLocations.clear();
32+
}
33+
}

src/main/java/com/github/elic0de/hungergames/game/HungerGame.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.github.elic0de.eliccommon.game.AbstractGame;
44
import com.github.elic0de.eliccommon.game.phase.Phase;
5+
import com.github.elic0de.hungergames.chest.DeathChest;
56
import com.github.elic0de.hungergames.dragon.DragonTrait;
67
import com.github.elic0de.hungergames.game.phase.InGamePhase;
78
import com.github.elic0de.hungergames.game.phase.WaitingPhase;
@@ -26,6 +27,9 @@ public class HungerGame extends AbstractGame {
2627

2728
private final Scoreboard scoreboard;
2829

30+
@Getter
31+
private final DeathChest deathChest;
32+
2933
@Getter
3034
private final GameBossBar bossBar = new GameBossBar();
3135

@@ -39,6 +43,7 @@ public class HungerGame extends AbstractGame {
3943
public HungerGame() {
4044
scoreboard = Bukkit.getScoreboardManager().getMainScoreboard();
4145
border = new GameBorder(this);
46+
deathChest = new DeathChest();
4247
}
4348

4449
public void join(GameUser user) {
@@ -97,6 +102,7 @@ public void onDeath(GameUser user) {
97102
wonGame();
98103
}
99104

105+
deathChest.generateChest(user);
100106
user.getPlayer().setGameMode(GameMode.SPECTATOR);
101107
user.getPlayer().getWorld().strikeLightningEffect(user.getPlayer().getLocation());
102108
}

src/main/java/com/github/elic0de/hungergames/game/phase/InGamePhase.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.github.elic0de.eliccommon.game.phase.Phase;
44
import com.github.elic0de.eliccommon.user.OnlineUser;
55
import com.github.elic0de.hungergames.game.HungerGame;
6-
import com.github.elic0de.hungergames.user.GameUser;
76

87
public class InGamePhase extends Phase {
98

src/main/java/com/github/elic0de/hungergames/listener/EventListener.java

Lines changed: 47 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,26 @@
44
import com.github.elic0de.hungergames.HungerGames;
55
import com.github.elic0de.hungergames.game.HungerGame;
66
import com.github.elic0de.hungergames.game.phase.InGamePhase;
7+
import com.github.elic0de.hungergames.menu.DeathChestMenu;
78
import com.github.elic0de.hungergames.user.GameUser;
89
import com.github.elic0de.hungergames.user.GameUserManager;
10+
import net.md_5.bungee.api.ChatMessageType;
11+
import net.md_5.bungee.api.chat.ComponentBuilder;
12+
import org.bukkit.ChatColor;
913
import org.bukkit.GameMode;
1014
import org.bukkit.Material;
15+
import org.bukkit.block.Block;
1116
import org.bukkit.block.BlockFace;
17+
import org.bukkit.entity.Arrow;
1218
import org.bukkit.entity.EnderDragon;
1319
import org.bukkit.entity.Player;
1420
import org.bukkit.event.EventHandler;
1521
import org.bukkit.event.Listener;
22+
import org.bukkit.event.block.Action;
23+
import org.bukkit.event.entity.EntityDamageByEntityEvent;
1624
import org.bukkit.event.entity.EntityDamageEvent;
1725
import org.bukkit.event.entity.PlayerDeathEvent;
18-
import org.bukkit.event.player.AsyncPlayerChatEvent;
19-
import org.bukkit.event.player.PlayerJoinEvent;
20-
import org.bukkit.event.player.PlayerMoveEvent;
21-
import org.bukkit.event.player.PlayerQuitEvent;
26+
import org.bukkit.event.player.*;
2227
import org.bukkit.inventory.ItemStack;
2328
import org.spigotmc.event.entity.EntityDismountEvent;
2429

@@ -76,6 +81,15 @@ private void onDamage(EntityDamageEvent event) {
7681
}
7782
}
7883

84+
@EventHandler
85+
private void onInteract(PlayerInteractEvent event) {
86+
final Block block = event.getClickedBlock();
87+
if (block == null) return;
88+
if (block.getType() == Material.CHEST && event.getAction() == Action.RIGHT_CLICK_BLOCK) {
89+
game.getDeathChest().openDeathChest(event.getPlayer(), block.getLocation());
90+
}
91+
}
92+
7993
@EventHandler
8094
private void onTeamChat(AsyncPlayerChatEvent event) {
8195
if (game.getPhase() instanceof InGamePhase) {
@@ -87,4 +101,33 @@ private void onTeamChat(AsyncPlayerChatEvent event) {
87101
game.sendMessageOwnTeam(sender, event.getMessage());
88102
}
89103
}
104+
105+
@EventHandler
106+
public void onFight(EntityDamageByEntityEvent event) {
107+
if (event.getEntity() instanceof Player vitim) {
108+
Player damager = null;
109+
if (event.getDamager() instanceof Player) damager = (Player) event.getDamager();
110+
if (event.getDamager() instanceof Arrow arrow) if (arrow.getShooter() instanceof Player) damager = (Player) event.getDamager();
111+
if (damager != null) damager.spigot().sendMessage(ChatMessageType.ACTION_BAR, new ComponentBuilder(String.join("%s %s", vitim.getName(), getHeartLevel(vitim))).create());
112+
}
113+
}
114+
115+
private String getHeartLevel(Player player) {
116+
117+
int currentHealth = (int) player.getHealth() / 2;
118+
int maxHealth = (int) player.getMaxHealth() / 2;
119+
int lostHealth = maxHealth - currentHealth;
120+
121+
String rHeart = "";
122+
String lHeart = "";
123+
124+
for (int i = 0; i < currentHealth; i++) {
125+
rHeart = rHeart + ChatColor.RESET + "❤";
126+
}
127+
for (int i = 0; i < lostHealth; i++) {
128+
lHeart = lHeart + ChatColor.GRAY + "❤";
129+
}
130+
131+
return rHeart + lHeart;
132+
}
90133
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,35 @@
11
package com.github.elic0de.hungergames.menu;
22

3+
import com.github.elic0de.hungergames.HungerGames;
4+
import de.themoep.inventorygui.GuiStorageElement;
5+
import de.themoep.inventorygui.InventoryGui;
6+
import org.bukkit.Bukkit;
7+
import org.bukkit.entity.Player;
8+
import org.bukkit.event.inventory.InventoryType;
9+
import org.bukkit.inventory.Inventory;
10+
import org.bukkit.inventory.ItemStack;
11+
312
public class DeathChestMenu {
13+
14+
private final InventoryGui menu;
15+
16+
private static final String[] MENU_LAYOUT = {
17+
"ppppppppp",
18+
"ppppppppp",
19+
"ppppppppp",
20+
"ppppppppp",
21+
"ppppppppp",
22+
"ppppppppp"
23+
};
24+
public DeathChestMenu(ItemStack[] contents) {
25+
this.menu = new InventoryGui(HungerGames.getInstance(), "DeathChest", MENU_LAYOUT);
26+
Inventory inv = Bukkit.createInventory(null, InventoryType.CHEST);
27+
inv.setContents(contents);
28+
menu.addElement(new GuiStorageElement('p', inv));
29+
menu.setCloseAction(close -> false);
30+
}
31+
32+
public void show(Player player) {
33+
menu.show(player);
34+
}
435
}

0 commit comments

Comments
 (0)