mirror of
				https://github.com/SunNetservers/MiniGames.git
				synced 2025-11-04 03:33:47 +01:00 
			
		
		
		
	Implements placeholders for arenas
This commit is contained in:
		
							
								
								
									
										19
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								README.md
									
									
									
									
									
								
							@@ -97,4 +97,21 @@ You could use `/droppergroupswap Sea Savanna` to change the order to:
 | 
			
		||||
1. Forest
 | 
			
		||||
2. Savanna
 | 
			
		||||
3. Nether
 | 
			
		||||
4. Sea
 | 
			
		||||
4. Sea
 | 
			
		||||
 | 
			
		||||
## Record display placeholders
 | 
			
		||||
 | 
			
		||||
Player records can be displayed on a leaderboard by using PlaceholderAPI. The format for the built-in placeholders is as
 | 
			
		||||
follows:
 | 
			
		||||
 | 
			
		||||
`%dropper_record_recordType_gameModeType_identifierType_identifier_recordPlacing_infoType%`
 | 
			
		||||
 | 
			
		||||
| Variable       | Values                      | Description                                                                                                                        |
 | 
			
		||||
|----------------|-----------------------------|------------------------------------------------------------------------------------------------------------------------------------|
 | 
			
		||||
| dropper_record |                             | Denotes that it's a placeholder for a dropper record. Must be present as-is.                                                       |
 | 
			
		||||
| recordType     | deaths / time               | Selects the type of record to get (deaths or time).                                                                                |
 | 
			
		||||
| gameModeType   | default / inverted / random | Selects the game-mode to get the record for.                                                                                       |
 | 
			
		||||
| identifierType | arena / group               | The type of thing the following identifier points to (an arena or an arena group).                                                 |
 | 
			
		||||
| identifier     | ?                           | An identifier (the name or UUID) for an arena or a group (whichever was chosen as identifierType).                                 |
 | 
			
		||||
| recordPlacing  | 1 / 2 / 3 / ...             | The position of the record to get (1 = first place, 2 = second place, etc.).                                                       |
 | 
			
		||||
| infoType       | player / value / combined   | The type of info to get. Player gets the player name, Value gets the value of the achieved record. Combined gets "Player: Record". |
 | 
			
		||||
@@ -26,7 +26,7 @@ import net.knarcraft.dropper.listener.CommandListener;
 | 
			
		||||
import net.knarcraft.dropper.listener.DamageListener;
 | 
			
		||||
import net.knarcraft.dropper.listener.MoveListener;
 | 
			
		||||
import net.knarcraft.dropper.listener.PlayerLeaveListener;
 | 
			
		||||
import net.knarcraft.dropper.placeholder.RecordExpansion;
 | 
			
		||||
import net.knarcraft.dropper.placeholder.DropperRecordExpansion;
 | 
			
		||||
import net.knarcraft.dropper.property.ArenaGameMode;
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.command.CommandExecutor;
 | 
			
		||||
@@ -127,7 +127,7 @@ public final class Dropper extends JavaPlugin {
 | 
			
		||||
        registerCommand("dropperGroupList", new GroupListCommand(), null);
 | 
			
		||||
 | 
			
		||||
        if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
 | 
			
		||||
            if (!new RecordExpansion(this).register()) {
 | 
			
		||||
            if (!new DropperRecordExpansion(this).register()) {
 | 
			
		||||
                getLogger().log(Level.WARNING, "Unable to register PlaceholderAPI expansion!");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,230 @@
 | 
			
		||||
package net.knarcraft.dropper.placeholder;
 | 
			
		||||
 | 
			
		||||
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
 | 
			
		||||
import net.knarcraft.dropper.Dropper;
 | 
			
		||||
import net.knarcraft.dropper.arena.ArenaRecord;
 | 
			
		||||
import net.knarcraft.dropper.arena.DropperArena;
 | 
			
		||||
import net.knarcraft.dropper.arena.DropperArenaGroup;
 | 
			
		||||
import net.knarcraft.dropper.arena.DropperArenaHandler;
 | 
			
		||||
import net.knarcraft.dropper.arena.DropperArenaRecordsRegistry;
 | 
			
		||||
import net.knarcraft.dropper.placeholder.parsing.InfoType;
 | 
			
		||||
import net.knarcraft.dropper.placeholder.parsing.RecordType;
 | 
			
		||||
import net.knarcraft.dropper.placeholder.parsing.SelectionType;
 | 
			
		||||
import net.knarcraft.dropper.property.ArenaGameMode;
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.OfflinePlayer;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.jetbrains.annotations.NotNull;
 | 
			
		||||
import org.jetbrains.annotations.Nullable;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Objects;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A placeholder expansion for dropper record placeholders
 | 
			
		||||
 */
 | 
			
		||||
public class DropperRecordExpansion extends PlaceholderExpansion {
 | 
			
		||||
 | 
			
		||||
    private final Dropper plugin;
 | 
			
		||||
 | 
			
		||||
    public DropperRecordExpansion(Dropper plugin) {
 | 
			
		||||
        this.plugin = plugin;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getIdentifier() {
 | 
			
		||||
        return "dropper";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getAuthor() {
 | 
			
		||||
        return "EpicKnarvik97";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getVersion() {
 | 
			
		||||
        return "1.0.0";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean persist() {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public String onRequest(OfflinePlayer player, String parameters) {
 | 
			
		||||
        String[] parts = parameters.split("_");
 | 
			
		||||
        // Record is used as the prefix for all record placeholders in case more placeholder types are added
 | 
			
		||||
        if (parts.length < 7 || !parts[0].equals("record")) {
 | 
			
		||||
            return parameters;
 | 
			
		||||
        }
 | 
			
		||||
        RecordType recordType = RecordType.getFromString(parts[1]);
 | 
			
		||||
        ArenaGameMode gameMode = ArenaGameMode.matchGamemode(parts[2]);
 | 
			
		||||
        SelectionType selectionType = SelectionType.getFromString(parts[3]);
 | 
			
		||||
        String identifier = parts[4];
 | 
			
		||||
        int recordNumber = Integer.parseInt(parts[5]) - 1;
 | 
			
		||||
        InfoType infoType = InfoType.getFromString(parts[6]);
 | 
			
		||||
 | 
			
		||||
        if (recordType == null || infoType == null) {
 | 
			
		||||
            return parameters;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        String info = null;
 | 
			
		||||
        DropperArenaHandler arenaHandler = plugin.getArenaHandler();
 | 
			
		||||
        if (selectionType == SelectionType.GROUP) {
 | 
			
		||||
            info = getGroupRecord(arenaHandler, identifier, gameMode, recordType, recordNumber, infoType);
 | 
			
		||||
        } else if (selectionType == SelectionType.ARENA) {
 | 
			
		||||
            info = getArenaRecord(arenaHandler, identifier, gameMode, recordType, recordNumber, infoType);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return Objects.requireNonNullElse(info, parameters);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets a piece of record information from a dropper arena group
 | 
			
		||||
     *
 | 
			
		||||
     * @param arenaHandler <p>The arena handler to get the group from</p>
 | 
			
		||||
     * @param identifier   <p>The identifier (name/uuid) selecting the group</p>
 | 
			
		||||
     * @param gameMode     <p>The game-mode to get a record for</p>
 | 
			
		||||
     * @param recordType   <p>The type of record to get</p>
 | 
			
		||||
     * @param recordNumber <p>The placing of the record to get (1st place, 2nd place, etc.)</p>
 | 
			
		||||
     * @param infoType     <p>The type of info (player, value, combined) to get</p>
 | 
			
		||||
     * @return <p>The selected information about the record, or null if not found</p>
 | 
			
		||||
     */
 | 
			
		||||
    private @Nullable String getGroupRecord(@NotNull DropperArenaHandler arenaHandler, @NotNull String identifier,
 | 
			
		||||
                                            @NotNull ArenaGameMode gameMode, @NotNull RecordType recordType,
 | 
			
		||||
                                            int recordNumber, @NotNull InfoType infoType) {
 | 
			
		||||
        // Allow specifying the group UUID or the arena name
 | 
			
		||||
        DropperArenaGroup group;
 | 
			
		||||
        try {
 | 
			
		||||
            group = arenaHandler.getGroup(UUID.fromString(identifier));
 | 
			
		||||
        } catch (IllegalArgumentException exception) {
 | 
			
		||||
            group = arenaHandler.getGroup(identifier);
 | 
			
		||||
        }
 | 
			
		||||
        if (group == null) {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
        // TODO: Basically, find all UUIDs that exist for all arenas (for selected game mode), and sum them together
 | 
			
		||||
        return "";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets a piece of record information from a dropper arena
 | 
			
		||||
     *
 | 
			
		||||
     * @param arenaHandler <p>The arena handler to get the arena from</p>
 | 
			
		||||
     * @param identifier   <p>The identifier (name/uuid) selecting the arena</p>
 | 
			
		||||
     * @param gameMode     <p>The game-mode to get a record for</p>
 | 
			
		||||
     * @param recordType   <p>The type of record to get</p>
 | 
			
		||||
     * @param recordNumber <p>The placing of the record to get (1st place, 2nd place, etc.)</p>
 | 
			
		||||
     * @param infoType     <p>The type of info (player, value, combined) to get</p>
 | 
			
		||||
     * @return <p>The selected information about the record, or null if not found</p>
 | 
			
		||||
     */
 | 
			
		||||
    private @Nullable String getArenaRecord(@NotNull DropperArenaHandler arenaHandler, @NotNull String identifier,
 | 
			
		||||
                                            @NotNull ArenaGameMode gameMode, @NotNull RecordType recordType,
 | 
			
		||||
                                            int recordNumber, @NotNull InfoType infoType) {
 | 
			
		||||
        // Allow specifying the arena UUID or the arena name
 | 
			
		||||
        DropperArena arena;
 | 
			
		||||
        try {
 | 
			
		||||
            arena = arenaHandler.getArena(UUID.fromString(identifier));
 | 
			
		||||
        } catch (IllegalArgumentException exception) {
 | 
			
		||||
            arena = arenaHandler.getArena(identifier);
 | 
			
		||||
        }
 | 
			
		||||
        if (arena == null) {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
        @NotNull Map<ArenaGameMode, DropperArenaRecordsRegistry> registries = arena.getData().recordRegistries();
 | 
			
		||||
        DropperArenaRecordsRegistry recordsRegistry = registries.get(gameMode);
 | 
			
		||||
 | 
			
		||||
        ArenaRecord<?> record = getRecord(recordsRegistry, recordType, recordNumber);
 | 
			
		||||
 | 
			
		||||
        // If a record number is not found, leave it blank, so it looks neat
 | 
			
		||||
        if (record == null) {
 | 
			
		||||
            return "";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return getRecordData(infoType, record);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets the specified record
 | 
			
		||||
     *
 | 
			
		||||
     * @param recordsRegistry <p>The records registry to get the record from</p>
 | 
			
		||||
     * @param recordType      <p>The type of record to get</p>
 | 
			
		||||
     * @param recordNumber    <p>The placing of the record to get (1st place, 2nd place, etc.)</p>
 | 
			
		||||
     * @return <p>The record, or null if not found</p>
 | 
			
		||||
     */
 | 
			
		||||
    private @Nullable ArenaRecord<?> getRecord(@NotNull DropperArenaRecordsRegistry recordsRegistry,
 | 
			
		||||
                                               @NotNull RecordType recordType, int recordNumber) {
 | 
			
		||||
        return switch (recordType) {
 | 
			
		||||
            case TIME -> getRecord(recordsRegistry.getShortestTimeMilliSecondsRecords(), recordNumber);
 | 
			
		||||
            case DEATHS -> getRecord(recordsRegistry.getLeastDeathsRecords(), recordNumber);
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets the record at the given index
 | 
			
		||||
     *
 | 
			
		||||
     * @param records <p>The records to search through</p>
 | 
			
		||||
     * @param index   <p>The index of the record to get</p>
 | 
			
		||||
     * @param <K>     <p>The type of record in the record list</p>
 | 
			
		||||
     * @return <p>The record, or null if index is out of bounds</p>
 | 
			
		||||
     */
 | 
			
		||||
    private <K extends Comparable<K>> @Nullable ArenaRecord<K> getRecord(Set<ArenaRecord<K>> records, int index) {
 | 
			
		||||
        List<ArenaRecord<K>> sorted = getSortedRecords(records);
 | 
			
		||||
        if (index < sorted.size() && index >= 0) {
 | 
			
		||||
            return sorted.get(index);
 | 
			
		||||
        } else {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets a piece of data from a record as a string
 | 
			
		||||
     *
 | 
			
		||||
     * @param infoType    <p>The type of info to get data for</p>
 | 
			
		||||
     * @param arenaRecord <p>The record to get the data from</p>
 | 
			
		||||
     * @return <p>The requested data as a string, or null</p>
 | 
			
		||||
     */
 | 
			
		||||
    private String getRecordData(@NotNull InfoType infoType, @NotNull ArenaRecord<?> arenaRecord) {
 | 
			
		||||
        return switch (infoType) {
 | 
			
		||||
            case PLAYER -> getPlayerName(arenaRecord.userId());
 | 
			
		||||
            case VALUE -> arenaRecord.record().toString();
 | 
			
		||||
            case COMBINED -> getPlayerName(arenaRecord.userId()) + ": " + arenaRecord.record().toString();
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets the given set of records as a sorted list
 | 
			
		||||
     *
 | 
			
		||||
     * @param recordSet <p>The set of records to sort</p>
 | 
			
		||||
     * @param <K>       <p>The type of the records</p>
 | 
			
		||||
     * @return <p>The sorted records</p>
 | 
			
		||||
     */
 | 
			
		||||
    private <K extends Comparable<K>> @NotNull List<ArenaRecord<K>> getSortedRecords(
 | 
			
		||||
            @NotNull Set<ArenaRecord<K>> recordSet) {
 | 
			
		||||
        List<ArenaRecord<K>> records = new ArrayList<>(recordSet);
 | 
			
		||||
        Collections.sort(records);
 | 
			
		||||
        return records;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets the name of a player, given the player's UUID
 | 
			
		||||
     *
 | 
			
		||||
     * @param playerId <p>The id of the player to get the name for</p>
 | 
			
		||||
     * @return <p>The name of the player, or a string representation of the UUID if not found</p>
 | 
			
		||||
     */
 | 
			
		||||
    private String getPlayerName(@NotNull UUID playerId) {
 | 
			
		||||
        Player player = Bukkit.getPlayer(playerId);
 | 
			
		||||
        if (player != null) {
 | 
			
		||||
            return player.getName();
 | 
			
		||||
        } else {
 | 
			
		||||
            return playerId.toString();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -1,89 +0,0 @@
 | 
			
		||||
package net.knarcraft.dropper.placeholder;
 | 
			
		||||
 | 
			
		||||
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
 | 
			
		||||
import me.clip.placeholderapi.expansion.Relational;
 | 
			
		||||
import net.knarcraft.dropper.Dropper;
 | 
			
		||||
import org.bukkit.OfflinePlayer;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
 | 
			
		||||
public class RecordExpansion extends PlaceholderExpansion implements Relational {
 | 
			
		||||
 | 
			
		||||
    private final Dropper plugin;
 | 
			
		||||
 | 
			
		||||
    public RecordExpansion(Dropper plugin) {
 | 
			
		||||
        this.plugin = plugin;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getIdentifier() {
 | 
			
		||||
        return "dropper";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getAuthor() {
 | 
			
		||||
        return "EpicKnarvik97";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getVersion() {
 | 
			
		||||
        return "1.0.0";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean persist() {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public String onRequest(OfflinePlayer player, String parameters) {
 | 
			
		||||
        /*String[] parts = parameters.split("_");
 | 
			
		||||
        // Record is used as the prefix for all record placeholders in case more placeholder types are added
 | 
			
		||||
        if (parts.length < 7 || !parts[0].equals("record")) {
 | 
			
		||||
            return parameters;
 | 
			
		||||
        }
 | 
			
		||||
        boolean timeRecords = parts[1].equals("time");
 | 
			
		||||
        ArenaGameMode gameMode = ArenaGameMode.matchGamemode(parts[2]);
 | 
			
		||||
        boolean isGroup = parts[3].equalsIgnoreCase("group");
 | 
			
		||||
        String identifier = parts[4];
 | 
			
		||||
        int recordNumber = Integer.parseInt(parts[5]);
 | 
			
		||||
        boolean value = parts[6].equalsIgnoreCase("value");
 | 
			
		||||
 | 
			
		||||
        DropperArenaHandler arenaHandler = Dropper.getInstance().getArenaHandler();
 | 
			
		||||
        if (isGroup) {
 | 
			
		||||
            DropperArenaGroup group = arenaHandler.getGroup(identifier);
 | 
			
		||||
        } else {
 | 
			
		||||
            DropperArena arena = arenaHandler.getArena(identifier);
 | 
			
		||||
            if (arena == null) {
 | 
			
		||||
                return parameters;
 | 
			
		||||
            }
 | 
			
		||||
            @NotNull Map<ArenaGameMode, DropperArenaRecordsRegistry> registries = arena.getData().recordRegistries();
 | 
			
		||||
            DropperArenaRecordsRegistry recordsRegistry = registries.get(gameMode);
 | 
			
		||||
            if (timeRecords) {
 | 
			
		||||
                recordsRegistry.getShortestTimeMilliSecondsRecords();
 | 
			
		||||
            } else {
 | 
			
		||||
                recordsRegistry.getLeastDeathsRecords();
 | 
			
		||||
            }
 | 
			
		||||
        }*/
 | 
			
		||||
        
 | 
			
		||||
        /*
 | 
			
		||||
        Format:
 | 
			
		||||
        %dropper_record_time_random_arena_arenaname_1_player%
 | 
			
		||||
        %dropper_record_time_random_arena_arenaname_1_value%
 | 
			
		||||
 | 
			
		||||
        dropper_record: Denotes that it's a placeholder for a dropper record
 | 
			
		||||
        deaths/time: The type of record to get
 | 
			
		||||
        default/inverted/random: The game-mode to get the record for
 | 
			
		||||
        arena/group: Denoting if the following name is the name of an arena or an arena group
 | 
			
		||||
        1,2,3,...: The placing to get: 1 for first place, etc.
 | 
			
		||||
        player/value: Whether to get the name of the player, or the player's record
 | 
			
		||||
         */
 | 
			
		||||
        // TODO: Figure out how placeholders should work. %dropper_group_1% should display the top player of the arena group
 | 
			
		||||
        return parameters;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public String onPlaceholderRequest(Player player1, Player player2, String parameters) {
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,42 @@
 | 
			
		||||
package net.knarcraft.dropper.placeholder.parsing;
 | 
			
		||||
 | 
			
		||||
import org.jetbrains.annotations.NotNull;
 | 
			
		||||
import org.jetbrains.annotations.Nullable;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * The type of information returned by a placeholder
 | 
			
		||||
 */
 | 
			
		||||
public enum InfoType {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The player that achieved the record
 | 
			
		||||
     */
 | 
			
		||||
    PLAYER,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The value of the record, whatever it is
 | 
			
		||||
     */
 | 
			
		||||
    VALUE,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * A combined PLAYER: VALUE
 | 
			
		||||
     */
 | 
			
		||||
    COMBINED,
 | 
			
		||||
    ;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets the info type specified in the given string
 | 
			
		||||
     *
 | 
			
		||||
     * @param type <p>The string specifying the info type</p>
 | 
			
		||||
     * @return <p>The info type, or null if not found</p>
 | 
			
		||||
     */
 | 
			
		||||
    public static @Nullable InfoType getFromString(@NotNull String type) {
 | 
			
		||||
        for (InfoType infoType : InfoType.values()) {
 | 
			
		||||
            if (infoType.name().equalsIgnoreCase(type)) {
 | 
			
		||||
                return infoType;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,37 @@
 | 
			
		||||
package net.knarcraft.dropper.placeholder.parsing;
 | 
			
		||||
 | 
			
		||||
import org.jetbrains.annotations.NotNull;
 | 
			
		||||
import org.jetbrains.annotations.Nullable;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A type of record a player can achieve
 | 
			
		||||
 */
 | 
			
		||||
public enum RecordType {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * A least-deaths record
 | 
			
		||||
     */
 | 
			
		||||
    DEATHS,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     *
 | 
			
		||||
     */
 | 
			
		||||
    TIME,
 | 
			
		||||
    ;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets the record type specified in the given string
 | 
			
		||||
     *
 | 
			
		||||
     * @param type <p>The string specifying the record type</p>
 | 
			
		||||
     * @return <p>The record type, or null if not found</p>
 | 
			
		||||
     */
 | 
			
		||||
    public static @Nullable RecordType getFromString(@NotNull String type) {
 | 
			
		||||
        for (RecordType recordType : RecordType.values()) {
 | 
			
		||||
            if (recordType.name().equalsIgnoreCase(type)) {
 | 
			
		||||
                return recordType;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,37 @@
 | 
			
		||||
package net.knarcraft.dropper.placeholder.parsing;
 | 
			
		||||
 | 
			
		||||
import org.jetbrains.annotations.NotNull;
 | 
			
		||||
import org.jetbrains.annotations.Nullable;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A type of selection performed by a placeholder
 | 
			
		||||
 */
 | 
			
		||||
public enum SelectionType {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The identifier is trying to select a group
 | 
			
		||||
     */
 | 
			
		||||
    GROUP,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The identifier is trying to select an arena
 | 
			
		||||
     */
 | 
			
		||||
    ARENA,
 | 
			
		||||
    ;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets the selection type specified in the given string
 | 
			
		||||
     *
 | 
			
		||||
     * @param type <p>The string specifying the selection type</p>
 | 
			
		||||
     * @return <p>The selection type, or null if not found</p>
 | 
			
		||||
     */
 | 
			
		||||
    public static @Nullable SelectionType getFromString(@NotNull String type) {
 | 
			
		||||
        for (SelectionType selectionType : SelectionType.values()) {
 | 
			
		||||
            if (selectionType.name().equalsIgnoreCase(type)) {
 | 
			
		||||
                return selectionType;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user