Basic player API

This commit is contained in:
Daniel Saukel 2020-01-11 01:40:04 +01:00
parent 72a941d386
commit b11ff2d4a3
8 changed files with 996 additions and 126 deletions

View File

@ -0,0 +1,98 @@
/*
* Copyright (C) 2012-2020 Frank Baumann
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.erethon.dungeonsxl.api;
import de.erethon.commons.misc.Registry;
import de.erethon.dungeonsxl.api.dungeon.Dungeon;
import de.erethon.dungeonsxl.api.player.PlayerClass;
import de.erethon.dungeonsxl.api.player.PlayerGroup;
import de.erethon.dungeonsxl.api.sign.DungeonSignType;
import java.io.File;
import java.util.Collection;
import org.bukkit.entity.Player;
/**
* @author Daniel Saukel
*/
public interface DungeonsAPI {
static final File PLUGIN_ROOT = new File("plugins/DungeonsXL");
static final File BACKUPS = new File(PLUGIN_ROOT, "backups");
static final File LANGUAGES = new File(PLUGIN_ROOT, "languages");
static final File MAPS = new File(PLUGIN_ROOT, "maps");
static final File PLAYERS = new File(PLUGIN_ROOT, "players");
static final File SCRIPTS = new File(PLUGIN_ROOT, "scripts");
static final File ANNOUNCERS = new File(SCRIPTS, "announcers");
static final File CLASSES = new File(SCRIPTS, "classes");
static final File DUNGEONS = new File(SCRIPTS, "dungeons");
static final File SIGNS = new File(SCRIPTS, "signs");
/**
* Returns a {@link Registry} of the loaded classes.
*
* @return a {@link Registry} of the loaded classes
*/
Registry<String, PlayerClass> getClassRegistry();
/* Object initialization */
/**
* Creates a new group.
*
* @param leader the leader
* @return a new group
*/
PlayerGroup createGroup(Player leader);
/**
* Creates a new group.
*
* @param leader the leader
* @param color the color that represents the group and sets the name
* @return a new group or null if values are invalid
*/
PlayerGroup createGroup(Player leader, PlayerGroup.Color color);
/**
* Creates a new group.
*
* @param leader the leader
* @param name the group's name - must be unique
* @return a new group or null if values are invalid
*/
PlayerGroup createGroup(Player leader, String name);
/**
* Creates a new group.
*
* @param leader the leader
* @param dungeon the dungeon to play
* @return a new group or null if values are invalid
*/
PlayerGroup createGroup(Player leader, Dungeon dungeon);
/**
* Creates a new group.
*
* @param leader the leader
* @param members the group members with or without the leader
* @param name the name of the group
* @param dungeon the dungeon to play
* @return a new group or null if values are invalid
*/
PlayerGroup createGroup(Player leader, Collection<Player> members, String name, Dungeon dungeon);
}

View File

@ -0,0 +1,56 @@
/*
* Copyright (C) 2012-2020 Frank Baumann
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.erethon.dungeonsxl.api.player;
import de.erethon.dungeonsxl.api.world.EditWorld;
/**
* Represents a player in an edit instance.
* <p>
* All players in an edit world have one wrapper object that is an instance of EditPlayer.
*
* @author Daniel Saukel
*/
public interface EditPlayer extends InstancePlayer {
/**
* Returns the {@link de.erethon.dungeonsxl.api.world.EditWorld} the player is editing.
*
* @return the {@link de.erethon.dungeonsxl.api.world.EditWorld} the player is editing
*/
EditWorld getEditWorld();
/**
* Returns the lines of a sign the player has copied with a stick tool in an array with the length of four.
*
* @return the lines of a sign the player has copied with a stick tool in an array with the length of four
*/
String[] getCopiedLines();
/**
* Sets the memorized sign lines.
*
* @param copiedLines the lines
*/
void setCopiedLines(String[] copiedLines);
/**
* Makes the player leave the edit world without saving the progress.
*/
void escape();
}

View File

@ -0,0 +1,210 @@
/*
* Copyright (C) 2012-2020 Frank Baumann
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.erethon.dungeonsxl.api.player;
import org.bukkit.Location;
/**
* Represents a player in a game dungeon instance.
* <p>
* All players in a game world have one wrapper object that is an instance of GamePlayer.
*
* @author Daniel Saukel
*/
public interface GamePlayer extends InstancePlayer {
/**
* Returns if the player is ready to start the game.
* <p>
* This is usually achieved by triggering a ready sign.
*
* @return if the player is ready to start the game
*/
boolean isReady();
/**
* Returns if the player finished the game.
* <p>
* This is usually achieved by triggering an end sign.
* <p>
* It is used for both the end of a whole dungeon and the end of a floor.
*
* @return if the player finished the game
*/
boolean isFinished();
/**
* Sets if the player finished their game.
*
* @param finished if the player finished the game
*/
void setFinished(boolean finished);
/**
* Returns the player's class or null if they have none.
*
* @return the player's class
*/
PlayerClass getPlayerClass();
/**
* Sets and applies the given class.
*
* @param playerClass the class
*/
void setPlayerClass(PlayerClass playerClass);
/**
* Returns the location of the last checkpoint the player reached.
*
* @return the location of the last checkpoint the player reached
*/
Location getLastCheckpoint();
/**
* Sets the location of the last checkpoint the player reached.
* <p>
* This is where the player respawns if they die and have -1 or >0 {@link #getLives() lives} left.
*
* @param checkpoint the checkpoint location
*/
void setLastCheckpoint(Location checkpoint);
/**
* Returns the saved time millis from when the player went offline.
*
* @return the saved time millis from when the player went offline
*/
long getOfflineTimeMillis();
/**
* Sets the saved time millis from when the player went offline.
*
* @param time the time millis
*/
void setOfflineTimeMillis(long time);
/**
* Returns the original amount of lives the player had in the current game or -1 if lives aren't used.
*
* @return the original amount of lives the player had in the current game or -1 if lives aren't used
*/
int getInitialLives();
/**
* Sets the original amount of lives the player had in the current game; -1 means lives aren't used.
*
* @param lives the amount of lives
*/
void setInitialLives(int lives);
/**
* Returns the lives the player has left or -1 if per player lives aren't used.
*
* @return the lives the player has left or -1 if per player lives aren't used
*/
int getLives();
/**
* Sets the lives the player has left.
* <p>
* This is not to be used if the dungeon uses group lives.
*
* @param lives the lives
*/
void setLives(int lives);
/**
* Returns if the player is stealing another group's flag.
*
* @return if the player is stealing another group's flag
*/
boolean isStealingFlag();
/**
* Returns the group whose flag the player robbed; null if the player isn't stealing any.
*
* @return the group whose flag the player robbed; null if the player isn't stealing any
*/
PlayerGroup getRobbedGroup();
/**
* Sets the player to be stealing the team flag of the given group.
*
* @param group the group
*/
void setRobbedGroup(PlayerGroup group);
/* Actions */
/**
* Scores a point.
*/
void captureFlag();
/**
* Makes the player leave his group and dungeon.
* <p>
* This sends default messages to the player.
*/
@Override
default void leave() {
leave(true);
}
/**
* Makes the player leave his group and dungeon.
*
* @param sendMessages if default messages shall be sent to the player
*/
void leave(boolean sendMessages);
/**
* Treats the player as if they lost their last life and kicks them from the dungeon.
*/
void kill();
/**
* Sets the player to be ready to start the dungeon game, like when a ready sign is triggered.
* <p>
* If all other players in the group are already {@link #isReady() ready}, the game is started.
*
* @return if the game has been started.
*/
boolean ready();
/**
* Respawns the player. Also teleports DXL pets if there are any.
*/
void respawn();
/**
* The player finishs the current game.
* <p>
* This sends default messages to the player.
*/
default void finish() {
finish(true);
}
/**
* The player finishs the current game.
*
* @param sendMessages if default messages shall be sent to the player
*/
void finish(boolean sendMessages);
}

View File

@ -0,0 +1,131 @@
/*
* Copyright (C) 2012-2020 Frank Baumann
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.erethon.dungeonsxl.api.player;
import de.erethon.commons.chat.MessageUtil;
import de.erethon.commons.player.PlayerWrapper;
import java.util.List;
import org.bukkit.Location;
import org.bukkit.inventory.ItemStack;
/**
* Represents a player anywhere on the server.
* <p>
* All players on the server, including the ones in dungeons, have one wrapper object that is an instance of GlobalPlayer.
*
* @author Daniel Saukel
*/
public interface GlobalPlayer extends PlayerWrapper {
/**
* Returns the player's group.
*
* @return the player's group.
*/
PlayerGroup getGroup();
/**
* Returns if the player uses the built-in group chat.
*
* @return if the player uses the built-in group chat
*/
boolean isInGroupChat();
/**
* Sets if the player uses the built-in group chat.
*
* @param groupChat if the player shall use the built-in group chat
*/
void setInGroupChat(boolean groupChat);
/**
* Returns if the player may read messages from the built-in group chat.
*
* @return if the player may read messages from the built-in group chat
*/
boolean isInChatSpyMode();
/**
* Sets if the player may read messages from the built-in group chat.
*
* @param chatSpyMode if the player may read messages from the built-in group chat
*/
void setInChatSpyMode(boolean chatSpyMode);
/**
* Checks if the player has the given permission.
*
* @param permission the permission
* @return if the player has the given permission
*/
default boolean hasPermission(String permission) {
return getPlayer().hasPermission(permission);
}
/**
* Returns the reward items a player collected in a dungeon game.
*
* @return the reward items a player collected in a dungeon game
*/
public List<ItemStack> getRewardItems();
/**
* Returns if the player has any reward items left.
*
* @return if the player has any reward items left
*/
public boolean hasRewardItemsLeft();
/**
* Returns if the player is currently breaking a global protection (=using /dxl break).
*
* @return if the player is currently breaking a global protection (=using /dxl break)
*/
boolean isInBreakMode();
/**
* Sets the player into or out of break mode; see {@link #isInBreakMode()}.
*
* @param breakMode if the player may break global protections
*/
void setInBreakMode(boolean breakMode);
/**
* Sends a message to the player.
*
* @param message the message to send
*/
default void sendMessage(String message) {
MessageUtil.sendMessage(getPlayer(), message);
}
/**
* Respawns the player at his old position before he was in a dungeon.
*
* @param keepInventory if the saved status shall be reset
*/
void reset(boolean keepInventory);
/**
* Respawns the player at his old position before he was in a dungeon.
*
* @param tpLoc the location where the player shall respawn
* @param keepInventory if the saved status shall be reset
*/
void reset(Location tpLoc, boolean keepInventory);
}

View File

@ -0,0 +1,42 @@
/*
* Copyright (C) 2012-2020 Frank Baumann
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.erethon.dungeonsxl.api.player;
import org.bukkit.World;
/**
* Represents a player in an instance.
* <p>
* All players in a world instantiated by DungeonsXL, have one wrapper object that is an instance of InstancePlayer.
*
* @author Daniel Saukel
*/
public interface InstancePlayer extends GlobalPlayer {
/**
* The world of the instance, where the player is supposed to be.
*
* @return the world of the instance
*/
World getWorld();
/**
* Makes the player leave his group and dungeon.
*/
void leave();
}

View File

@ -0,0 +1,132 @@
/*
* Copyright (C) 2012-2020 Frank Baumann
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.erethon.dungeonsxl.api.player;
import de.erethon.caliburn.CaliburnAPI;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.inventory.ItemStack;
/**
* Represents a class and a class script.
*
* @author Frank Baumann, Daniel Saukel
*/
public class PlayerClass {
private String name;
private List<ItemStack> items = new ArrayList<>();
private boolean dog;
/**
* Creates a PlayerClass from a class YAML file. The name is taken from the file name.
*
* @param caliburn the CaliburnAPI instance
* @param file the class config file
*/
public PlayerClass(CaliburnAPI caliburn, File file) {
this(caliburn, file.getName().substring(0, file.getName().length() - 4), YamlConfiguration.loadConfiguration(file));
}
/**
* Creates a PlayerClass from the given class config.
*
* @param caliburn the CaliburnAPI instance
* @param name the class name
* @param config the config
*/
public PlayerClass(CaliburnAPI caliburn, String name, FileConfiguration config) {
this.name = name;
if (config.contains("items")) {
items = caliburn.deserializeStackList(config, "items");
}
if (config.contains("dog")) {
dog = config.getBoolean("dog");
}
}
public PlayerClass(String name, List<ItemStack> items, boolean dog) {
this.items = items;
this.name = name;
this.dog = dog;
}
/**
* Returns the name of the class.
*
* @return the name of the class
*/
public String getName() {
return name;
}
/**
* Returns the list of the items this class gives to a player.
*
* @return the list of the the items this class gives to a player
*/
public List<ItemStack> getItems() {
return items;
}
/**
* Adds the given item to this class.
*
* @param itemStack the ItemStack to add
*/
public void addItem(ItemStack itemStack) {
items.add(itemStack);
}
/**
* Removes the given item from this class.
*
* @param itemStack the ItemStack to remove
*/
public void removeItem(ItemStack itemStack) {
items.remove(itemStack);
}
/**
* Returns if the class gives the player a dog.
*
* @return if the class has a dog
* @deprecated More dynamic pet features might make this obsolete in the future.
*/
@Deprecated
public boolean hasDog() {
return dog;
}
/**
* Sets if the class gives the player a dog.
*
* @param dog if the class shall give the player a dog
* @deprecated More dynamic pet features might make this obsolete in the future.
*/
@Deprecated
public void setDog(boolean dog) {
this.dog = dog;
}
}

View File

@ -0,0 +1,327 @@
/*
* Copyright (C) 2012-2020 Frank Baumann
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.erethon.dungeonsxl.api.player;
import de.erethon.caliburn.item.ExItem;
import de.erethon.caliburn.item.VanillaItem;
import de.erethon.commons.compatibility.Version;
import de.erethon.commons.player.PlayerCollection;
import de.erethon.dungeonsxl.api.dungeon.Dungeon;
import de.erethon.dungeonsxl.api.world.GameWorld;
import org.bukkit.ChatColor;
import org.bukkit.DyeColor;
import org.bukkit.entity.Player;
/**
* Represents a group of players provided by DungeonsXL.
*
* @author Daniel Saukel
*/
public interface PlayerGroup {
/**
* Links different color types together.
*/
public enum Color {
BLACK(ChatColor.BLACK, DyeColor.BLACK, VanillaItem.BLACK_WOOL),
DARK_GRAY(ChatColor.DARK_GRAY, DyeColor.GRAY, VanillaItem.GRAY_WOOL),
LIGHT_GRAY(ChatColor.GRAY, DyeColor.valueOf(Version.isAtLeast(Version.MC1_13) ? "LIGHT_GRAY" : "SILVER"), VanillaItem.LIGHT_GRAY_WOOL),
WHITE(ChatColor.WHITE, DyeColor.WHITE, VanillaItem.WHITE_WOOL),
DARK_GREEN(ChatColor.DARK_GREEN, DyeColor.GREEN, VanillaItem.GREEN_WOOL),
LIGHT_GREEN(ChatColor.GREEN, DyeColor.LIME, VanillaItem.LIME_WOOL),
CYAN(ChatColor.DARK_AQUA, DyeColor.CYAN, VanillaItem.CYAN_WOOL),
DARK_BLUE(ChatColor.DARK_BLUE, DyeColor.BLUE, VanillaItem.BLUE_WOOL),
LIGHT_BLUE(ChatColor.AQUA, DyeColor.LIGHT_BLUE, VanillaItem.LIGHT_BLUE_WOOL),
PURPLE(ChatColor.DARK_PURPLE, DyeColor.PURPLE, VanillaItem.PURPLE_WOOL),
MAGENTA(ChatColor.LIGHT_PURPLE, DyeColor.MAGENTA, VanillaItem.MAGENTA_WOOL),
DARK_RED(ChatColor.DARK_RED, DyeColor.BROWN, VanillaItem.BROWN_WOOL),
LIGHT_RED(ChatColor.RED, DyeColor.RED, VanillaItem.RED_WOOL),
ORANGE(ChatColor.GOLD, DyeColor.ORANGE, VanillaItem.ORANGE_WOOL),
YELLOW(ChatColor.YELLOW, DyeColor.YELLOW, VanillaItem.YELLOW_WOOL),
PINK(ChatColor.BLUE, DyeColor.PINK, VanillaItem.PINK_WOOL);
private ChatColor chat;
private DyeColor dye;
private VanillaItem woolMaterial;
Color(ChatColor chat, DyeColor dye, VanillaItem woolMaterial) {
this.chat = chat;
this.dye = dye;
this.woolMaterial = woolMaterial;
}
/**
* Returns the ChatColor.
*
* @return the ChatColor
*/
public ChatColor getChatColor() {
return chat;
}
/**
* Returns the DyeColor.
*
* @return the DyeColor
*/
public DyeColor getDyeColor() {
return dye;
}
/**
* Returns the RGB value.
*
* @return the RGB value
*/
public int getRGBColor() {
return dye.getColor().asRGB();
}
/**
* Returns the wool material.
*
* @return the wool material
*/
public VanillaItem getWoolMaterial() {
return woolMaterial;
}
/**
* Returns the GroupColor matching the ChatColor or null if none exists.
*
* @param color the ChatColor to check
* @return the GroupColor matching the ChatColor or null if none exists
*/
public static Color getByChatColor(ChatColor color) {
for (Color groupColor : values()) {
if (groupColor.chat == color) {
return groupColor;
}
}
return null;
}
/**
* Returns the GroupColor matching the DyeColor or null if none exists.
*
* @param color the DyeColor to check
* @return the GroupColor matching the DyeColor or null if none exists.
*/
public static Color getByDyeColor(DyeColor color) {
for (Color groupColor : values()) {
if (groupColor.dye == color) {
return groupColor;
}
}
return null;
}
/**
* Returns the GroupColor matching the wool material or null if none exists.
*
* @param wool the wool material to check
* @return the GroupColor matching the wool material or null if none exists
*/
public static Color getByWoolType(ExItem wool) {
for (Color groupColor : values()) {
if (groupColor.woolMaterial == wool) {
return groupColor;
}
}
return null;
}
}
/**
* Returns the ID.
*
* @return the ID
*/
int getId();
/**
* Returns the formatted name.
* <p>
* This is the name used e.g. in messages.
*
* @return the formatted name
*/
String getName();
/**
* Returns the raw, unformatted name.
* <p>
* This is the name used e.g. in command arguments.
*
* @return the raw, unformatted name
*/
String getRawName();
/**
* Sets the name.
*
* @param name the name
*/
void setName(String name);
/**
* Sets the name to a default value taken from the color.
* <p>
* In the default implementation, this is nameOfTheColor#{@link #getId()}
*
* @param color the color
*/
default void setName(Color color) {
setName(color.toString() + "#" + getId());
}
/**
* The player who has permission to manage the group.
*
* @return the player who has permission to manage the group
*/
Player getLeader();
/**
* Sets the leader to another group member.
*
* @param player the new leader
*/
void setLeader(Player player);
/**
* Returns a PlayerCollection of the group members
*
* @return a PlayerCollection of the group members
*/
PlayerCollection getMembers();
/**
* Adds a player to the group.
* <p>
* The default implemenation calls {@link #addPlayer(Player, boolean)} with messages set to true.
*
* @param player the player to add
*/
default void addPlayer(Player player) {
addPlayer(player, true);
}
/**
* Adds a player to the group.
*
* @param player the player to add
* @param message if messages shall be sent
*/
void addPlayer(Player player, boolean message);
/**
* Removes a player from the group.
* <p>
* The default implemenation calls {@link #removePlayer(Player, boolean)} with messages set to true.
*
* @param player the player to add
*/
default void removePlayer(Player player) {
addPlayer(player, true);
}
/**
* Removes a player from the group.
*
* @param player the player to add
* @param message if messages shall be sent
*/
void removePlayer(Player player, boolean message);
/**
* Returns a PlayerCollection of the players who are invited to join the group but did not yet do so.
*
* @return a PlayerCollection of the players who are invited to join the group but did not yet do so
*/
PlayerCollection getInvitedPlayers();
/**
* Invites a player to join the group.
*
* @param player the player to invite
* @param message if messages shall be sent
*/
void addInvitedPlayer(Player player, boolean message);
/**
* Removes an invitation priviously made for a player to join the group.
*
* @param player the player to uninvite
* @param message if messages shall be sent
*/
void removeInvitedPlayer(Player player, boolean message);
/**
* Removes all invitations for players who are not online.
*/
void clearOfflineInvitedPlayers();
/**
* Returns the game world the group is in.
*
* @return the game world the group is in
*/
GameWorld getGameWorld();
/**
* Sets the game world the group is in.
*
* @param gameWorld the game world to set
*/
void setGameWorld(GameWorld gameWorld);
/**
* Returns the dungeon the group is playing or has remembered to play next.
* <p>
* The latter is for example used when a group is created by a group sign sothat a portal or the auto-join function knows where to send the group.
*
* @return the dungeon the group is playing or has remembered to play next
*/
Dungeon getDungeon();
/**
* Returns if the group is already playing its remembered {@link #getDungeon() dungeon}.
*
* @return if the group is already playing its remembered {@link #getDungeon() dungeon}
*/
boolean isPlaying();
/**
* Returns the amount of lives the group currently has left or -1 if group lives are not used.
*
* @return the amount of lives the group currently has left or -1 if group lives are not used
*/
int getLives();
/**
* Sets the amount of lives the group currently has left.
* <p>
* The value must be >=0 or -1, which means unlimited lives.
*
* @param lives the amount of lives the group currently has left
*/
void setLives(int lives);
}

View File

@ -1,126 +0,0 @@
/*
* Copyright (C) 2012-2019 Frank Baumann
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.erethon.dungeonsxl.util;
import de.erethon.caliburn.item.ExItem;
import de.erethon.caliburn.item.VanillaItem;
import de.erethon.commons.compatibility.Version;
import org.bukkit.ChatColor;
import org.bukkit.DyeColor;
/**
* Links different color types together.
*
* @author Daniel Saukel
*/
public enum DColor {
BLACK(ChatColor.BLACK, DyeColor.BLACK, VanillaItem.BLACK_WOOL),
DARK_GRAY(ChatColor.DARK_GRAY, DyeColor.GRAY, VanillaItem.GRAY_WOOL),
LIGHT_GRAY(ChatColor.GRAY, DyeColor.valueOf(Version.isAtLeast(Version.MC1_13) ? "LIGHT_GRAY" : "SILVER"), VanillaItem.LIGHT_GRAY_WOOL),
WHITE(ChatColor.WHITE, DyeColor.WHITE, VanillaItem.WHITE_WOOL),
DARK_GREEN(ChatColor.DARK_GREEN, DyeColor.GREEN, VanillaItem.GREEN_WOOL),
LIGHT_GREEN(ChatColor.GREEN, DyeColor.LIME, VanillaItem.LIME_WOOL),
CYAN(ChatColor.DARK_AQUA, DyeColor.CYAN, VanillaItem.CYAN_WOOL),
DARK_BLUE(ChatColor.DARK_BLUE, DyeColor.BLUE, VanillaItem.BLUE_WOOL),
LIGHT_BLUE(ChatColor.AQUA, DyeColor.LIGHT_BLUE, VanillaItem.LIGHT_BLUE_WOOL),
PURPLE(ChatColor.DARK_PURPLE, DyeColor.PURPLE, VanillaItem.PURPLE_WOOL),
MAGENTA(ChatColor.LIGHT_PURPLE, DyeColor.MAGENTA, VanillaItem.MAGENTA_WOOL),
DARK_RED(ChatColor.DARK_RED, DyeColor.BROWN, VanillaItem.BROWN_WOOL),
LIGHT_RED(ChatColor.RED, DyeColor.RED, VanillaItem.RED_WOOL),
ORANGE(ChatColor.GOLD, DyeColor.ORANGE, VanillaItem.ORANGE_WOOL),
YELLOW(ChatColor.YELLOW, DyeColor.YELLOW, VanillaItem.YELLOW_WOOL),
PINK(ChatColor.BLUE, DyeColor.PINK, VanillaItem.PINK_WOOL);
private ChatColor chat;
private DyeColor dye;
private VanillaItem woolMaterial;
DColor(ChatColor chat, DyeColor dye, VanillaItem woolMaterial) {
this.chat = chat;
this.dye = dye;
this.woolMaterial = woolMaterial;
}
/**
* @return the ChatColor
*/
public ChatColor getChatColor() {
return chat;
}
/**
* @return the DyeColor
*/
public DyeColor getDyeColor() {
return dye;
}
/**
* @return the RGB value
*/
public int getRGBColor() {
return dye.getColor().asRGB();
}
/**
* @return the wool material
*/
public VanillaItem getWoolMaterial() {
return woolMaterial;
}
/**
* @param color the ChatColor to check
* @return the matching DColor or null
*/
public static DColor getByChatColor(ChatColor color) {
for (DColor dColor : values()) {
if (dColor.chat == color) {
return dColor;
}
}
return null;
}
/**
* @param color the DyeColor to check
* @return the matching DColor or null
*/
public static DColor getByDyeColor(DyeColor color) {
for (DColor dColor : values()) {
if (dColor.dye == color) {
return dColor;
}
}
return null;
}
/**
* @param wool the wool item to check
* @return the matching DColor or null
*/
public static DColor getByWoolType(ExItem wool) {
for (DColor dColor : values()) {
if (dColor.woolMaterial == wool) {
return dColor;
}
}
return null;
}
}