mirror of
https://github.com/SunNetservers/MiniGames.git
synced 2024-12-05 00:43:15 +01:00
Adds a new item to allow arena re-tries
Prevents a NumberFormatException if the record number is invalid Updates Spigot to 1.20
This commit is contained in:
parent
38839c0287
commit
57b3b85fbc
2
pom.xml
2
pom.xml
@ -86,7 +86,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.spigotmc</groupId>
|
<groupId>org.spigotmc</groupId>
|
||||||
<artifactId>spigot-api</artifactId>
|
<artifactId>spigot-api</artifactId>
|
||||||
<version>1.19.4-R0.1-SNAPSHOT</version>
|
<version>1.20-R0.1-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
@ -15,7 +15,7 @@ public abstract class AbstractArenaSession implements ArenaSession {
|
|||||||
private final @NotNull ArenaGameMode gameMode;
|
private final @NotNull ArenaGameMode gameMode;
|
||||||
private final @NotNull Player player;
|
private final @NotNull Player player;
|
||||||
protected int deaths;
|
protected int deaths;
|
||||||
protected final long startTime;
|
protected long startTime;
|
||||||
protected PlayerEntryState entryState;
|
protected PlayerEntryState entryState;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -47,6 +47,14 @@ public abstract class AbstractArenaSession implements ArenaSession {
|
|||||||
player.sendMessage(Message.SUCCESS_ARENA_QUIT.getMessage());
|
player.sendMessage(Message.SUCCESS_ARENA_QUIT.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void reset() {
|
||||||
|
this.deaths = 0;
|
||||||
|
this.startTime = System.currentTimeMillis();
|
||||||
|
PlayerTeleporter.teleportPlayer(this.player, this.arena.getSpawnLocation(), false, false);
|
||||||
|
this.entryState.setArenaState();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Announces a record set by this player
|
* Announces a record set by this player
|
||||||
*
|
*
|
||||||
|
@ -47,4 +47,9 @@ public interface ArenaSession {
|
|||||||
*/
|
*/
|
||||||
@NotNull ArenaGUI getGUI();
|
@NotNull ArenaGUI getGUI();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resets the session to allow a player to try again
|
||||||
|
*/
|
||||||
|
void reset();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -116,6 +116,12 @@ public class ParkourArenaSession extends AbstractArenaSession {
|
|||||||
return new ParkourGUI(player);
|
return new ParkourGUI(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void reset() {
|
||||||
|
this.reachedCheckpoint = null;
|
||||||
|
super.reset();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void removeSession() {
|
protected void removeSession() {
|
||||||
// Remove this session for game sessions to stop listeners from fiddling more with the player
|
// Remove this session for game sessions to stop listeners from fiddling more with the player
|
||||||
|
@ -101,7 +101,7 @@ public class JoinParkourArenaCommand implements CommandExecutor {
|
|||||||
} else {
|
} else {
|
||||||
// Update the player's state to follow the arena's rules
|
// Update the player's state to follow the arena's rules
|
||||||
newSession.getEntryState().setArenaState();
|
newSession.getEntryState().setArenaState();
|
||||||
|
|
||||||
player.getInventory().addItem(GUIHelper.getGUIOpenItem());
|
player.getInventory().addItem(GUIHelper.getGUIOpenItem());
|
||||||
player.sendMessage(Message.SUCCESS_ARENA_JOINED.getMessage());
|
player.sendMessage(Message.SUCCESS_ARENA_JOINED.getMessage());
|
||||||
return true;
|
return true;
|
||||||
|
@ -21,18 +21,29 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
public abstract class ArenaGUI extends AbstractGUI {
|
public abstract class ArenaGUI extends AbstractGUI {
|
||||||
|
|
||||||
protected final ArenaPlayerRegistry<?> playerRegistry;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiates a new arena gui
|
* Instantiates a new arena gui
|
||||||
*
|
*
|
||||||
* @param inventorySize <p>The size of the GUI's inventory</p>
|
* @param inventorySize <p>The size of the GUI's inventory</p>
|
||||||
* @param inventoryName <p>The name of the inventory</p>
|
* @param inventoryName <p>The name of the inventory</p>
|
||||||
* @param playerRegistry <p>The player registry used for this GUI</p>
|
|
||||||
*/
|
*/
|
||||||
public ArenaGUI(int inventorySize, String inventoryName, ArenaPlayerRegistry<?> playerRegistry) {
|
public ArenaGUI(int inventorySize, String inventoryName) {
|
||||||
super(inventorySize, inventoryName, null);
|
super(inventorySize, inventoryName, null);
|
||||||
this.playerRegistry = playerRegistry;
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets an item describing a retry arena action
|
||||||
|
*
|
||||||
|
* @return <p>An arena restart item</p>
|
||||||
|
*/
|
||||||
|
protected ItemStack getRestartItem() {
|
||||||
|
PlayerHeadGUIItemFactory restartItemFactory = new PlayerHeadGUIItemFactory();
|
||||||
|
restartItemFactory.useSkin("e23b225ed0443c4eec7cf30a034490485904e6eb3d53ef2ab9e39c73bdf22c30");
|
||||||
|
List<String> loreLines = getLoreLines();
|
||||||
|
loreLines.add(ChatColor.GRAY + "Use this item to retry the arena");
|
||||||
|
restartItemFactory.setName(ChatColor.BLUE + "Retry arena");
|
||||||
|
restartItemFactory.setLore(loreLines);
|
||||||
|
return restartItemFactory.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -108,7 +119,7 @@ public abstract class ArenaGUI extends AbstractGUI {
|
|||||||
*
|
*
|
||||||
* @return <p>The leave action</p>
|
* @return <p>The leave action</p>
|
||||||
*/
|
*/
|
||||||
protected GUIAction getLeaveAction() {
|
public static GUIAction getLeaveAction() {
|
||||||
return (player) -> {
|
return (player) -> {
|
||||||
ArenaSession session = MiniGames.getInstance().getSession(player.getUniqueId());
|
ArenaSession session = MiniGames.getInstance().getSession(player.getUniqueId());
|
||||||
if (session != null) {
|
if (session != null) {
|
||||||
@ -117,12 +128,27 @@ public abstract class ArenaGUI extends AbstractGUI {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the action to run when triggering the restart action
|
||||||
|
*
|
||||||
|
* @return <p>The action for triggering a session restart</p>
|
||||||
|
*/
|
||||||
|
public static GUIAction getRestartAction() {
|
||||||
|
return (player -> {
|
||||||
|
ArenaSession session = MiniGames.getInstance().getSession(player.getUniqueId());
|
||||||
|
if (session != null) {
|
||||||
|
session.reset();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the action to run when triggering the toggle players action
|
* Gets the action to run when triggering the toggle players action
|
||||||
*
|
*
|
||||||
|
* @param playerRegistry <p>The registry containing relevant players</p>
|
||||||
* @return <p>The action for triggering player visibility</p>
|
* @return <p>The action for triggering player visibility</p>
|
||||||
*/
|
*/
|
||||||
protected GUIAction getTogglePlayersAction() {
|
public GUIAction getTogglePlayersAction(ArenaPlayerRegistry<?> playerRegistry) {
|
||||||
return (player) -> {
|
return (player) -> {
|
||||||
PlayerVisibilityManager visibilityManager = MiniGames.getInstance().getPlayerVisibilityManager();
|
PlayerVisibilityManager visibilityManager = MiniGames.getInstance().getPlayerVisibilityManager();
|
||||||
visibilityManager.toggleHidePlayers(playerRegistry, player);
|
visibilityManager.toggleHidePlayers(playerRegistry, player);
|
||||||
|
@ -14,16 +14,18 @@ public class DropperGUI extends ArenaGUI {
|
|||||||
* @param player <p>The player the GUI is created for</p>
|
* @param player <p>The player the GUI is created for</p>
|
||||||
*/
|
*/
|
||||||
public DropperGUI(Player player) {
|
public DropperGUI(Player player) {
|
||||||
super(9, "Dropper", MiniGames.getInstance().getDropperArenaPlayerRegistry());
|
super(9, "Dropper");
|
||||||
if (MiniGames.getInstance().getPlayerVisibilityManager().isHidingPlayers(player)) {
|
if (MiniGames.getInstance().getPlayerVisibilityManager().isHidingPlayers(player)) {
|
||||||
setItem(0, getTogglePlayersItemEnabled());
|
setItem(0, getTogglePlayersItemEnabled());
|
||||||
} else {
|
} else {
|
||||||
setItem(0, getTogglePlayersItemDisabled());
|
setItem(0, getTogglePlayersItemDisabled());
|
||||||
}
|
}
|
||||||
setItem(2, getLeaveItem());
|
setItem(2, getLeaveItem());
|
||||||
|
setItem(4, getRestartItem());
|
||||||
|
|
||||||
setAnyClickAction(0, getTogglePlayersAction());
|
setAnyClickAction(0, getTogglePlayersAction(MiniGames.getInstance().getDropperArenaPlayerRegistry()));
|
||||||
setAnyClickAction(2, getLeaveAction());
|
setAnyClickAction(2, getLeaveAction());
|
||||||
|
setAnyClickAction(4, getRestartAction());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -14,14 +14,14 @@ public class MiniGamesGUI extends ArenaGUI {
|
|||||||
* @param player <p>The player the GUI is created for</p>
|
* @param player <p>The player the GUI is created for</p>
|
||||||
*/
|
*/
|
||||||
public MiniGamesGUI(Player player) {
|
public MiniGamesGUI(Player player) {
|
||||||
super(9, "MiniGames", null);
|
super(9, "MiniGames");
|
||||||
if (MiniGames.getInstance().getPlayerVisibilityManager().isHidingPlayers(player)) {
|
if (MiniGames.getInstance().getPlayerVisibilityManager().isHidingPlayers(player)) {
|
||||||
setItem(0, getTogglePlayersItemEnabled());
|
setItem(0, getTogglePlayersItemEnabled());
|
||||||
} else {
|
} else {
|
||||||
setItem(0, getTogglePlayersItemDisabled());
|
setItem(0, getTogglePlayersItemDisabled());
|
||||||
}
|
}
|
||||||
|
|
||||||
setAnyClickAction(0, getTogglePlayersAction());
|
setAnyClickAction(0, getTogglePlayersAction(null));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,7 @@ public class ParkourGUI extends ArenaGUI {
|
|||||||
* @param player <p>The player the GUI is created for</p>
|
* @param player <p>The player the GUI is created for</p>
|
||||||
*/
|
*/
|
||||||
public ParkourGUI(Player player) {
|
public ParkourGUI(Player player) {
|
||||||
super(9, "Parkour", MiniGames.getInstance().getParkourArenaPlayerRegistry());
|
super(9, "Parkour");
|
||||||
if (MiniGames.getInstance().getPlayerVisibilityManager().isHidingPlayers(player)) {
|
if (MiniGames.getInstance().getPlayerVisibilityManager().isHidingPlayers(player)) {
|
||||||
setItem(0, getTogglePlayersItemEnabled());
|
setItem(0, getTogglePlayersItemEnabled());
|
||||||
} else {
|
} else {
|
||||||
@ -31,10 +31,12 @@ public class ParkourGUI extends ArenaGUI {
|
|||||||
}
|
}
|
||||||
setItem(2, getGiveUpItem());
|
setItem(2, getGiveUpItem());
|
||||||
setItem(4, getLeaveItem());
|
setItem(4, getLeaveItem());
|
||||||
|
setItem(6, getRestartItem());
|
||||||
|
|
||||||
setAnyClickAction(0, getTogglePlayersAction());
|
setAnyClickAction(0, getTogglePlayersAction(MiniGames.getInstance().getParkourArenaPlayerRegistry()));
|
||||||
setAnyClickAction(2, getGiveUpAction());
|
setAnyClickAction(2, getGiveUpAction());
|
||||||
setAnyClickAction(4, getLeaveAction());
|
setAnyClickAction(4, getLeaveAction());
|
||||||
|
setAnyClickAction(6, getRestartAction());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -57,7 +59,7 @@ public class ParkourGUI extends ArenaGUI {
|
|||||||
*
|
*
|
||||||
* @return <p>The give up action</p>
|
* @return <p>The give up action</p>
|
||||||
*/
|
*/
|
||||||
private GUIAction getGiveUpAction() {
|
public static GUIAction getGiveUpAction() {
|
||||||
return (player) -> {
|
return (player) -> {
|
||||||
ArenaSession session = MiniGames.getInstance().getSession(player.getUniqueId());
|
ArenaSession session = MiniGames.getInstance().getSession(player.getUniqueId());
|
||||||
if (session instanceof ParkourArenaSession) {
|
if (session instanceof ParkourArenaSession) {
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package net.knarcraft.minigames.listener;
|
package net.knarcraft.minigames.listener;
|
||||||
|
|
||||||
import net.knarcraft.minigames.MiniGames;
|
import net.knarcraft.minigames.MiniGames;
|
||||||
|
import net.knarcraft.minigames.gui.ArenaGUI;
|
||||||
|
import net.knarcraft.minigames.gui.ParkourGUI;
|
||||||
import net.knarcraft.minigames.property.PersistentDataKey;
|
import net.knarcraft.minigames.property.PersistentDataKey;
|
||||||
import net.knarcraft.minigames.util.GUIHelper;
|
import net.knarcraft.minigames.util.GUIHelper;
|
||||||
import org.bukkit.NamespacedKey;
|
import org.bukkit.NamespacedKey;
|
||||||
@ -33,6 +35,20 @@ public class InteractListener implements Listener {
|
|||||||
if (persistentData != null && persistentData == PersistentDataKey.MENU_ITEM.getDataValue()) {
|
if (persistentData != null && persistentData == PersistentDataKey.MENU_ITEM.getDataValue()) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
GUIHelper.openGUI(event.getPlayer());
|
GUIHelper.openGUI(event.getPlayer());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
persistentData = meta.getPersistentDataContainer().get(new NamespacedKey(MiniGames.getInstance(),
|
||||||
|
PersistentDataKey.LEAVE_ITEM.getKeyName()), PersistentDataType.INTEGER);
|
||||||
|
if (persistentData != null) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
if (persistentData == PersistentDataKey.LEAVE_ITEM.getDataValue()) {
|
||||||
|
ArenaGUI.getLeaveAction().run(event.getPlayer());
|
||||||
|
} else if (persistentData == PersistentDataKey.GIVE_UP_ITEM.getDataValue()) {
|
||||||
|
ParkourGUI.getGiveUpAction().run(event.getPlayer());
|
||||||
|
} else if (persistentData == PersistentDataKey.TOGGLE_PLAYERS_ITEM.getDataValue()) {
|
||||||
|
//TODO: Figure out how in the world this should be done, as the existing code cannot be re-used
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package net.knarcraft.minigames.placeholder;
|
package net.knarcraft.minigames.placeholder;
|
||||||
|
|
||||||
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
||||||
|
import net.knarcraft.minigames.MiniGames;
|
||||||
import net.knarcraft.minigames.arena.Arena;
|
import net.knarcraft.minigames.arena.Arena;
|
||||||
import net.knarcraft.minigames.arena.ArenaGameMode;
|
import net.knarcraft.minigames.arena.ArenaGameMode;
|
||||||
import net.knarcraft.minigames.arena.ArenaGroup;
|
import net.knarcraft.minigames.arena.ArenaGroup;
|
||||||
@ -26,6 +27,7 @@ import java.util.Objects;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A placeholder expansion for parkour record placeholders
|
* A placeholder expansion for parkour record placeholders
|
||||||
@ -71,7 +73,14 @@ public abstract class RecordExpansion extends PlaceholderExpansion {
|
|||||||
ArenaGameMode gameMode = parseGameMode(parts[2]);
|
ArenaGameMode gameMode = parseGameMode(parts[2]);
|
||||||
SelectionType selectionType = SelectionType.getFromString(parts[3]);
|
SelectionType selectionType = SelectionType.getFromString(parts[3]);
|
||||||
String identifier = parts[4];
|
String identifier = parts[4];
|
||||||
int recordNumber = Integer.parseInt(parts[5]) - 1;
|
int recordNumber;
|
||||||
|
try {
|
||||||
|
recordNumber = Integer.parseInt(parts[5]) - 1;
|
||||||
|
} catch (NumberFormatException exception) {
|
||||||
|
MiniGames.log(Level.WARNING, "Invalid placeholder given. " + parts[5] +
|
||||||
|
" supplied instead of record placement.");
|
||||||
|
return parameters;
|
||||||
|
}
|
||||||
InfoType infoType = InfoType.getFromString(parts[6]);
|
InfoType infoType = InfoType.getFromString(parts[6]);
|
||||||
|
|
||||||
if (recordType == null || infoType == null) {
|
if (recordType == null || infoType == null) {
|
||||||
|
@ -6,6 +6,9 @@ package net.knarcraft.minigames.property;
|
|||||||
public enum PersistentDataKey {
|
public enum PersistentDataKey {
|
||||||
|
|
||||||
MENU_ITEM("MiniGamesMenu", 1799804),
|
MENU_ITEM("MiniGamesMenu", 1799804),
|
||||||
|
LEAVE_ITEM("MiniGamesAction", 1799871),
|
||||||
|
GIVE_UP_ITEM("MiniGamesAction", 1799872),
|
||||||
|
TOGGLE_PLAYERS_ITEM("MiniGamesAction", 1799873),
|
||||||
;
|
;
|
||||||
|
|
||||||
private final String keyName;
|
private final String keyName;
|
||||||
|
Loading…
Reference in New Issue
Block a user