Map gui works

This commit is contained in:
2vb 2024-07-05 00:02:24 -07:00
parent 9938367f72
commit 27c61fa74b
5 changed files with 68 additions and 24 deletions

View File

@ -1,10 +1,14 @@
package xyz.twovb.sgm.commands.impl; package xyz.twovb.sgm.commands.impl;
/*
* Created by 2vb - 5/7/2024
*/
/* /*
* Created by 2vb - 2/7/2024 * Created by 2vb - 2/7/2024
*/ */
import com.github.stefvanschie.inventoryframework.gui.type.ChestGui;
import dev.rollczi.litecommands.annotations.argument.Arg; import dev.rollczi.litecommands.annotations.argument.Arg;
import dev.rollczi.litecommands.annotations.command.Command; import dev.rollczi.litecommands.annotations.command.Command;
import dev.rollczi.litecommands.annotations.context.Context; import dev.rollczi.litecommands.annotations.context.Context;
@ -12,11 +16,8 @@ import dev.rollczi.litecommands.annotations.execute.Execute;
import dev.rollczi.litecommands.annotations.permission.Permission; import dev.rollczi.litecommands.annotations.permission.Permission;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryClickEvent;
import xyz.twovb.sgm.SGM; import xyz.twovb.sgm.SGM;
import xyz.twovb.sgm.games.Minigame; import xyz.twovb.sgm.games.Minigame;
import xyz.twovb.sgm.games.impl.TestGame;
import xyz.twovb.sgm.games.impl.capturethebrick.CTB;
import xyz.twovb.sgm.guis.InitGameGui; import xyz.twovb.sgm.guis.InitGameGui;
import xyz.twovb.toolbox.api.CustomPlayer; import xyz.twovb.toolbox.api.CustomPlayer;
import xyz.twovb.toolbox.utils.ChatUtils; import xyz.twovb.toolbox.utils.ChatUtils;

View File

@ -1,5 +1,10 @@
package xyz.twovb.sgm.games; package xyz.twovb.sgm.games;
/*
* Created by 2vb - 5/7/2024
*/
/* /*
* Created by 2vb - 4/6/2024 * Created by 2vb - 4/6/2024
*/ */
@ -11,8 +16,8 @@ import xyz.twovb.sgm.SGM;
import xyz.twovb.toolbox.managers.PlaceholderManager; import xyz.twovb.toolbox.managers.PlaceholderManager;
import xyz.twovb.toolbox.utils.ChatUtils; import xyz.twovb.toolbox.utils.ChatUtils;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -25,19 +30,12 @@ public class GameManager {
@Getter @Getter
private final ArrayList<String> registeredGames = new ArrayList<String>(); private final ArrayList<String> registeredGames = new ArrayList<String>();
private final Map<String, Class<? extends Minigame>> gameMappings = new HashMap<>();
public static Minigame findGame(UUID gameId) { public static Minigame findGame(UUID gameId) {
return activeGames.get(gameId); return activeGames.get(gameId);
} }
public Minigame findGame(Player player) {
for (Minigame game : activeGames.values()) {
if (game.getPlayers().contains(player)) {
return game;
}
}
return null;
}
public static boolean isInGame(Player player) { public static boolean isInGame(Player player) {
for (Minigame game : activeGames.values()) { for (Minigame game : activeGames.values()) {
if (game.getPlayers().contains(player)) { if (game.getPlayers().contains(player)) {
@ -47,16 +45,37 @@ public class GameManager {
return false; return false;
} }
public void initGame(Minigame game, CommandSender owner, String level) { public Minigame findGame(Player player) {
for (Minigame game : activeGames.values()) {
if (game.getPlayers().contains(player)) {
return game;
}
}
return null;
}
public void initGame(String internalName, CommandSender owner, String level) {
try { try {
Minigame game = createGameInstance(internalName);
game.init(owner, level); game.init(owner, level);
} catch (IOException e) { activeGames.put(game.getGameId(), game);
} catch (InstantiationException | IllegalAccessException | IOException | NoSuchMethodException |
InvocationTargetException e) {
SGM.getInstance().getCLogger().error(e.getMessage()); SGM.getInstance().getCLogger().error(e.getMessage());
owner.sendMessage(ChatUtils.translate(PlaceholderManager.setPlaceholders(SGM.getInstance().getMessages().getString("sgm.game.cant-start"), owner))); owner.sendMessage(ChatUtils.translate(PlaceholderManager.setPlaceholders(SGM.getInstance().getMessages().getString("sgm.game.cant-start"), owner)));
} }
activeGames.put(game.getGameId(), game);
} }
// public void initGame(Minigame game, CommandSender owner, String level) {
// try {
// game.init(owner, level);
// } catch (IOException e) {
// SGM.getInstance().getCLogger().error(e.getMessage());
// owner.sendMessage(ChatUtils.translate(PlaceholderManager.setPlaceholders(SGM.getInstance().getMessages().getString("sgm.game.cant-start"), owner)));
// }
// activeGames.put(game.getGameId(), game);
// }
public void addPlayerToGame(Player player, UUID gameId) { public void addPlayerToGame(Player player, UUID gameId) {
Minigame game = findGame(gameId); Minigame game = findGame(gameId);
if (game.getState() == Minigame.GameState.READY && !game.getPlayers().contains(player) && !isInGame(player)) { if (game.getState() == Minigame.GameState.READY && !game.getPlayers().contains(player) && !isInGame(player)) {
@ -69,17 +88,28 @@ public class GameManager {
game.removePlayer(player); game.removePlayer(player);
} }
public Minigame createGameInstance(String internalName) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
Class<? extends Minigame> gameClass = gameMappings.get(internalName);
if (gameClass != null) {
return gameClass.getDeclaredConstructor().newInstance();
} else {
throw new IllegalArgumentException("No game registered with internal name: " + internalName);
}
}
public void registerGame(Minigame game) { public void registerGame(Minigame game) {
String intName = game.getName().toLowerCase(); String intName = game.getName().toLowerCase();
try { try {
SGM.getInstance().getConfigManager().loadConfig("games/" + intName + "/options.yml"); SGM.getInstance().getConfigManager().loadConfig("games/" + intName + "/options.yml");
registeredGames.add(intName); registeredGames.add(intName);
gameMappings.put(intName, game.getClass());
SGM.getInstance().getCLogger().log("Registered game " + game.getName()); SGM.getInstance().getCLogger().log("Registered game " + game.getName());
} catch(IllegalArgumentException error) { } catch (IllegalArgumentException error) {
String errMsg = error.getMessage(); String errMsg = error.getMessage();
if (errMsg.contains("The embedded resource") && errMsg.contains("cannot be found")) { if (errMsg.contains("The embedded resource") && errMsg.contains("cannot be found")) {
SGM.getInstance().getCLogger().log(game.getName() + "'s game options are nowhere to be found. Please ensure this is intended behaviour."); SGM.getInstance().getCLogger().log(game.getName() + "'s game options are nowhere to be found. Please ensure this is intended behaviour.");
registeredGames.add(intName); registeredGames.add(intName);
gameMappings.put(intName, game.getClass());
} else { } else {
SGM.getInstance().getCLogger().error("Failed to register game " + game.getName() + ". Reason: " + errMsg); SGM.getInstance().getCLogger().error("Failed to register game " + game.getName() + ". Reason: " + errMsg);
} }

View File

@ -1,5 +1,10 @@
package xyz.twovb.sgm.games.impl.capturethebrick; package xyz.twovb.sgm.games.impl.capturethebrick;
/*
* Created by 2vb - 5/7/2024
*/
/* /*
* Created by 2vb - 3/7/2024 * Created by 2vb - 3/7/2024
*/ */
@ -152,7 +157,7 @@ public class CTB implements Minigame {
for (Player player : players) { for (Player player : players) {
player.teleport(this.spawnLoc); player.teleport(this.spawnLoc);
} }
for (int i = 0; i < bricks; i++) { for (int i = 0; i <= bricks; i++) {
for (Location brickLoc : redBrickSpawns) { for (Location brickLoc : redBrickSpawns) {
placeBrick(brickLoc, "red"); placeBrick(brickLoc, "red");
} }

View File

@ -1,5 +1,10 @@
package xyz.twovb.sgm.guis; package xyz.twovb.sgm.guis;
/*
* Created by 2vb - 5/7/2024
*/
import com.github.stefvanschie.inventoryframework.gui.GuiItem; import com.github.stefvanschie.inventoryframework.gui.GuiItem;
import com.github.stefvanschie.inventoryframework.gui.type.ChestGui; import com.github.stefvanschie.inventoryframework.gui.type.ChestGui;
import com.github.stefvanschie.inventoryframework.pane.OutlinePane; import com.github.stefvanschie.inventoryframework.pane.OutlinePane;
@ -49,8 +54,6 @@ public class MapGui {
public void globalClick(InventoryClickEvent event) { public void globalClick(InventoryClickEvent event) {
event.setCancelled(true); event.setCancelled(true);
// event.getWhoClicked().sendMessage(this.game);
// gui.getInventory().clear();
} }
public void addMaps() { public void addMaps() {
@ -67,7 +70,9 @@ public class MapGui {
// Handle click event if needed // Handle click event if needed
// Example: navigate to the map or show map details // Example: navigate to the map or show map details
Player player = (Player) event.getWhoClicked(); Player player = (Player) event.getWhoClicked();
player.sendMessage("Clicked on map: " + mapName); SGM.getInstance().getGameManager().initGame(this.game, player, mapName);
player.closeInventory();
// player.sendMessage("Clicked on map: " + mapName);
})); }));
} }
} else { } else {

View File

@ -1,5 +1,10 @@
package xyz.twovb.sgm.levels; package xyz.twovb.sgm.levels;
/*
* Created by 2vb - 5/7/2024
*/
/* /*
* Created by 2vb - 4/6/2024 * Created by 2vb - 4/6/2024
*/ */
@ -177,8 +182,6 @@ public class LevelManager {
block.setType(Material.STONE); block.setType(Material.STONE);
} }
} }
// Block block = location.subtract(0, 2, 0).getBlock();
// block.setType(Material.STONE);
world.setSpawnLocation(location); world.setSpawnLocation(location);
world.setSpawnFlags(false, false); world.setSpawnFlags(false, false);
world.setGameRule(GameRule.KEEP_INVENTORY, true); world.setGameRule(GameRule.KEEP_INVENTORY, true);