Skip to content

Commit 2ef49ae

Browse files
committed
feat(scenarios): add scenario command
1 parent b98790a commit 2ef49ae

File tree

2 files changed

+92
-1
lines changed

2 files changed

+92
-1
lines changed

src/main/java/fr/lliksel/skydefender/commands/CommandSd.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package fr.lliksel.skydefender.commands;
22

3+
import fr.lliksel.skydefender.gui.ScenariosListGui;
34
import fr.lliksel.skydefender.SkyDefender;
45
import fr.lliksel.skydefender.manager.GameManager;
56
import fr.lliksel.skydefender.model.GameState;
@@ -36,7 +37,7 @@ public CommandSd(SkyDefender plugin, GameManager gameManager, ConfigManager conf
3637
@Override
3738
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
3839
if (args.length == 0) {
39-
sender.sendMessage(ChatColor.RED + "Usage: /sd <infos|start|banner|defenseur|tpplate|revive>");
40+
sender.sendMessage(ChatColor.RED + "Usage: /sd <infos|start|banner|defenseur|tpplate|revive|scenarios>");
4041
return true;
4142
}
4243

@@ -46,6 +47,19 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
4647
return true;
4748
}
4849

50+
if (args[0].equalsIgnoreCase("scenarios")) {
51+
if (!(sender instanceof Player)) {
52+
sender.sendMessage("Seul un joueur peut voir les scénarios.");
53+
return true;
54+
}
55+
if (this.gameManager.getGameState() != GameState.PLAYING) {
56+
sender.sendMessage("La partie n'est pas lancée.");
57+
return true;
58+
}
59+
new ScenariosListGui(plugin.getScenarioManager()).open((Player) sender);
60+
return true;
61+
}
62+
4963
if (args[0].equalsIgnoreCase("start")) {
5064
if (gameManager.getBannerLocation() == null) {
5165
sender.sendMessage(ChatColor.RED + "La bannière n'a pas été définie ! Utilisez /sd banner en regardant une bannière.");
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package fr.lliksel.skydefender.gui;
2+
3+
import fr.lliksel.skydefender.manager.ScenarioManager;
4+
import fr.lliksel.skydefender.scenario.Scenario;
5+
import fr.lliksel.skydefender.utils.ItemBuilder;
6+
import org.bukkit.Bukkit;
7+
import org.bukkit.ChatColor;
8+
import org.bukkit.Material;
9+
import org.bukkit.enchantments.Enchantment;
10+
import org.bukkit.entity.Player;
11+
import org.bukkit.event.inventory.InventoryClickEvent;
12+
import org.bukkit.inventory.Inventory;
13+
import org.bukkit.inventory.ItemFlag;
14+
import org.bukkit.inventory.ItemStack;
15+
16+
import java.util.List;
17+
18+
public class ScenariosListGui extends SkyDefenderGui {
19+
20+
private final ScenarioManager scenarioManager;
21+
private final Inventory inventory;
22+
23+
public ScenariosListGui(ScenarioManager scenarioManager) {
24+
this.scenarioManager = scenarioManager;
25+
this.inventory = Bukkit.createInventory(this, 27, "Scénarios Actifs");
26+
updateInventory();
27+
}
28+
29+
private void updateInventory() {
30+
inventory.clear();
31+
32+
ItemStack glass = new ItemBuilder(Material.GRAY_STAINED_GLASS_PANE).setName(" ").toItemStack();
33+
for (int i = 0; i < inventory.getSize(); i++) {
34+
inventory.setItem(i, glass);
35+
}
36+
37+
List<Scenario> scenarios = scenarioManager.getScenarios();
38+
int slot = 0;
39+
40+
for (Scenario scenario : scenarios) {
41+
if (!scenario.isActive()) continue;
42+
if (slot >= inventory.getSize()) break;
43+
44+
ItemBuilder builder = new ItemBuilder(scenario.getIcon())
45+
.setName(ChatColor.GREEN + scenario.getName())
46+
.setLore(scenario.getDescription());
47+
48+
builder.addEnchant(Enchantment.DURABILITY, 1);
49+
builder.addItemFlag(ItemFlag.HIDE_ENCHANTS);
50+
51+
inventory.setItem(slot, builder.toItemStack());
52+
slot++;
53+
}
54+
55+
if (slot == 0) {
56+
ItemStack noScenario = new ItemBuilder(Material.BARRIER)
57+
.setName(ChatColor.RED + "Aucun scénario actif")
58+
.toItemStack();
59+
inventory.setItem(13, noScenario);
60+
}
61+
}
62+
63+
@Override
64+
public Inventory getInventory() {
65+
return inventory;
66+
}
67+
68+
public void open(Player player) {
69+
updateInventory();
70+
player.openInventory(inventory);
71+
}
72+
73+
@Override
74+
public void onInventoryClick(InventoryClickEvent event) {
75+
event.setCancelled(true);
76+
}
77+
}

0 commit comments

Comments
 (0)