#61 Added central GameRules class

Not implemented and tested yet!
This commit is contained in:
Daniel Saukel 2016-05-08 00:44:43 +02:00
parent 6e0d4ef9b8
commit ffde4f6c8b
7 changed files with 697 additions and 378 deletions

View File

@ -26,7 +26,6 @@ import io.github.dre2n.dungeonsxl.command.*;
import io.github.dre2n.dungeonsxl.config.DMessages;
import io.github.dre2n.dungeonsxl.config.DataConfig;
import io.github.dre2n.dungeonsxl.config.MainConfig;
import io.github.dre2n.dungeonsxl.config.WorldConfig;
import io.github.dre2n.dungeonsxl.dungeon.Dungeons;
import io.github.dre2n.dungeonsxl.game.Game;
import io.github.dre2n.dungeonsxl.game.GameTypes;
@ -532,13 +531,6 @@ public class DungeonsXL extends BRPlugin {
return editWorlds;
}
/**
* @return the defaultConfig
*/
public WorldConfig getDefaultConfig() {
return WorldConfig.defaultConfig;// TODO
}
/**
* @return the gameWorlds
*/

View File

@ -16,57 +16,33 @@
*/
package io.github.dre2n.dungeonsxl.config;
import io.github.dre2n.commons.config.BRConfig;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
/**
* @author Daniel Saukel
*/
public class DungeonConfig extends WorldConfig {
public class DungeonConfig extends BRConfig {
public static final int CONFIG_VERSION = 1;
private String startFloor;
private String endFloor;
private List<String> floors = new ArrayList<>();
private int floorCount;
private boolean removeWhenPlayed;
private WorldConfig overrideValues;
private WorldConfig defaultValues;
public DungeonConfig(File file) {
super(file);
load(YamlConfiguration.loadConfiguration(file));
}
super(file, CONFIG_VERSION);
public DungeonConfig(ConfigurationSection configFile) {
super(configFile);
load(configFile);
}
@Override
public void load(ConfigurationSection configFile) {
super.load(configFile);
/* Floors */
if (configFile.contains("floors")) {
floors = configFile.getStringList("floors");
}
if (configFile.contains("startFloor")) {
startFloor = configFile.getString("startFloor");
}
if (configFile.contains("endFloor")) {
endFloor = configFile.getString("endFloor");
}
if (configFile.contains("floorCount")) {
floorCount = configFile.getInt("floorCount");
}
if (configFile.contains("removeWhenPlayed")) {
removeWhenPlayed = configFile.getBoolean("removeWhenPlayed");
if (initialize) {
initialize();
}
load();
}
/**
@ -152,4 +128,105 @@ public class DungeonConfig extends WorldConfig {
this.removeWhenPlayed = removeWhenPlayed;
}
/**
* The values from this WorldConfig will override all values of the
* WorldConfigs of inherited maps.
*
* @return the override values
*/
public WorldConfig getOverrideValues() {
return overrideValues;
}
/**
* @param worldConfig
* the WorldConfig to set
*/
public void setOverrideValues(WorldConfig worldConfig) {
overrideValues = worldConfig;
}
/**
* The values from this WorldConfig will get overriden by values of the
* WorldConfigs of inherited maps.
* They will still override the values from the main config, though.
*
* @return the default values
*/
public WorldConfig getDefaultValues() {
return defaultValues;
}
/**
* @param worldConfig
* the WorldConfig to set
*/
public void setDefaultValues(WorldConfig worldConfig) {
defaultValues = worldConfig;
}
@Override
public void initialize() {
if (!config.contains("floors")) {
config.set("floors", floors);
}
if (!config.contains("startFloor")) {
config.set("startFloor", startFloor);
}
if (!config.contains("endFloor")) {
config.set("endFloor", endFloor);
}
if (!config.contains("floorCount")) {
config.set("floorCount", floorCount);
}
if (!config.contains("removeWhenPlayed")) {
config.set("removeWhenPlayed", removeWhenPlayed);
}
if (!config.contains("overrideValues")) {
config.createSection("overrideValues");
}
if (!config.contains("defaultValues")) {
config.createSection("defaultValues");
}
save();
}
@Override
public void load() {
if (config.contains("floors")) {
floors = config.getStringList("floors");
}
if (config.contains("startFloor")) {
startFloor = config.getString("startFloor");
}
if (config.contains("endFloor")) {
endFloor = config.getString("endFloor");
}
if (config.contains("floorCount")) {
floorCount = config.getInt("floorCount");
}
if (config.contains("removeWhenPlayed")) {
removeWhenPlayed = config.getBoolean("removeWhenPlayed");
}
if (config.contains("overrideValues")) {
overrideValues = new WorldConfig(config.getConfigurationSection("overrideValues"));
}
if (config.contains("defaultValues")) {
defaultValues = new WorldConfig(config.getConfigurationSection("defaultValues"));
}
}
}

View File

@ -301,7 +301,6 @@ public class MainConfig extends BRConfig {
ConfigurationSection configSection = config.getConfigurationSection("default");
if (configSection != null) {
defaultWorldConfig = new WorldConfig(configSection);
WorldConfig.defaultConfig = defaultWorldConfig;// TODO
}
}

View File

@ -19,20 +19,17 @@ package io.github.dre2n.dungeonsxl.config;
import io.github.dre2n.commons.util.EnumUtil;
import io.github.dre2n.commons.util.NumberUtil;
import io.github.dre2n.dungeonsxl.DungeonsXL;
import io.github.dre2n.dungeonsxl.game.GameRules;
import io.github.dre2n.dungeonsxl.game.GameType;
import io.github.dre2n.dungeonsxl.mob.DMobType;
import io.github.dre2n.dungeonsxl.player.DClass;
import io.github.dre2n.dungeonsxl.requirement.FeeLevelRequirement;
import io.github.dre2n.dungeonsxl.requirement.FeeMoneyRequirement;
import io.github.dre2n.dungeonsxl.requirement.Requirement;
import io.github.dre2n.dungeonsxl.reward.Reward;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList;
import org.bukkit.GameMode;
@ -46,58 +43,15 @@ import org.bukkit.inventory.ItemStack;
/**
* @author Frank Baumann, Milan Albrecht, Daniel Saukel
*/
public class WorldConfig {
public class WorldConfig extends GameRules {
DungeonsXL plugin = DungeonsXL.getInstance();
@Deprecated
public static WorldConfig defaultConfig = new WorldConfig();
private File file;
private List<String> invitedPlayers = new ArrayList<>();
private boolean keepInventory = false;
private boolean keepInventoryOnEnter = false;
private boolean keepInventoryOnEscape = false;
private boolean keepInventoryOnFinish = false;
private boolean keepInventoryOnDeath = true;
private GameMode gameMode = GameMode.SURVIVAL;
private boolean build = false;
private boolean playerVersusPlayer = false;
private boolean friendlyFire = false;
private List<DClass> dClasses = new ArrayList<>();
private Map<Integer, String> msgs = new HashMap<>();
private List<Material> secureObjects = new ArrayList<>();
private int initialLives = 3;
private boolean isLobbyDisabled = false;
private int timeToNextPlay = 0;
private int timeToNextLoot = 0;
private int timeToNextWave = 10;
private int timeUntilKickOfflinePlayer = -1;
private int timeToFinish = -1;
private List<Requirement> requirements = new ArrayList<>();
private List<Reward> rewards = new ArrayList<>();
private List<String> finishedOne;
private List<String> finishedAll;
private int timeLastPlayed = 0;
private GameType forcedGameType;
private Set<DMobType> mobTypes = new HashSet<>();
private List<String> gameCommandWhitelist = new ArrayList<>();
private List<String> gamePermissions = new ArrayList<>();
public WorldConfig() {
}
@ -208,41 +162,27 @@ public class WorldConfig {
if (!configFile.contains("keepInventoryOnFinish")) {
keepInventoryOnFinish = configFile.getBoolean("keepInventory");
}
} else if (plugin.getDefaultConfig().keepInventory) {
keepInventoryOnEnter = plugin.getDefaultConfig().keepInventory;
keepInventoryOnEscape = plugin.getDefaultConfig().keepInventory;
keepInventoryOnFinish = plugin.getDefaultConfig().keepInventory;
}
if (configFile.contains("keepInventoryOnEnter")) {
keepInventoryOnEnter = configFile.getBoolean("keepInventoryOnEnter");
} else {
keepInventoryOnEnter = plugin.getDefaultConfig().keepInventoryOnEnter;
}
if (configFile.contains("keepInventoryOnEscape")) {
keepInventoryOnEscape = configFile.getBoolean("keepInventoryOnEscape");
} else {
keepInventoryOnEscape = plugin.getDefaultConfig().keepInventoryOnEscape;
}
if (configFile.contains("keepInventoryOnFinish")) {
keepInventoryOnFinish = configFile.getBoolean("keepInventoryOnFinish");
} else {
keepInventoryOnFinish = plugin.getDefaultConfig().keepInventoryOnFinish;
}
if (configFile.contains("keepInventoryOnDeath")) {
keepInventoryOnDeath = configFile.getBoolean("keepInventoryOnDeath");
} else {
keepInventoryOnDeath = plugin.getDefaultConfig().keepInventoryOnDeath;
}
/* Build */
if (configFile.contains("build")) {
build = configFile.getBoolean("build");
} else {
build = plugin.getDefaultConfig().build;
}
/* GameMode */
@ -252,67 +192,47 @@ public class WorldConfig {
} else {
gameMode = GameMode.getByValue(configFile.getInt("gameMode"));
}
} else {
gameMode = plugin.getDefaultConfig().gameMode;
}
/* PvP */
if (configFile.contains("playerVersusPlayer")) {
playerVersusPlayer = configFile.getBoolean("playerVersusPlayer");
} else {
playerVersusPlayer = plugin.getDefaultConfig().playerVersusPlayer;
}
/* Friendly fire */
if (configFile.contains("friendlyFire")) {
friendlyFire = configFile.getBoolean("friendlyFire");
} else {
friendlyFire = plugin.getDefaultConfig().friendlyFire;
}
/* Lives */
if (configFile.contains("initialLives")) {
initialLives = configFile.getInt("initialLives");
} else {
initialLives = plugin.getDefaultConfig().getInitialLives();
}
/* Lobby */
if (configFile.contains("isLobbyDisabled")) {
isLobbyDisabled = configFile.getBoolean("isLobbyDisabled");
} else {
isLobbyDisabled = plugin.getDefaultConfig().isLobbyDisabled;
lobbyDisabled = configFile.getBoolean("isLobbyDisabled");
}
/* Times */
if (configFile.contains("timeToNextPlay")) {
timeToNextPlay = configFile.getInt("timeToNextPlay");
} else {
timeToNextPlay = plugin.getDefaultConfig().timeToNextPlay;
}
if (configFile.contains("timeToNextLoot")) {
timeToNextLoot = configFile.getInt("timeToNextLoot");
} else {
timeToNextLoot = plugin.getDefaultConfig().timeToNextLoot;
}
if (configFile.contains("timeToNextWave")) {
timeToNextWave = configFile.getInt("timeToNextWave");
} else {
timeToNextWave = plugin.getDefaultConfig().timeToNextWave;
}
if (configFile.contains("timeUntilKickOfflinePlayer")) {
timeUntilKickOfflinePlayer = configFile.getInt("timeUntilKickOfflinePlayer");
} else {
timeUntilKickOfflinePlayer = plugin.getDefaultConfig().timeUntilKickOfflinePlayer;
}
if (configFile.contains("timeToFinish")) {
timeToFinish = configFile.getInt("timeToFinish");
} else {
timeToFinish = plugin.getDefaultConfig().timeToFinish;
}
/* Dungeon Requirements */
@ -330,8 +250,6 @@ public class WorldConfig {
requirements.add(requirement);
}
} else {
requirements = plugin.getDefaultConfig().requirements;
}
if (configFile.contains("mustFinishOne")) {
@ -356,14 +274,10 @@ public class WorldConfig {
if (configFile.contains("gameCommandWhitelist")) {
gameCommandWhitelist = configFile.getStringList("gameCommandWhitelist");
} else {
gameCommandWhitelist = plugin.getDefaultConfig().gameCommandWhitelist;
}
if (configFile.contains("gamePermissions")) {
gamePermissions = configFile.getStringList("gamePermissions");
} else {
gamePermissions = plugin.getDefaultConfig().gamePermissions;
}
if (configFile.contains("forcedGameType")) {
@ -408,14 +322,12 @@ public class WorldConfig {
}
}
// Getters and Setters
/**
* @return the UUIDs or names of the players invited to edit the map
*/
public CopyOnWriteArrayList<String> getInvitedPlayers() {
CopyOnWriteArrayList<String> tmpInvitedPlayers = new CopyOnWriteArrayList<>();
tmpInvitedPlayers.addAll(invitedPlayers);
tmpInvitedPlayers.addAll(plugin.getDefaultConfig().invitedPlayers);
return tmpInvitedPlayers;
}
@ -439,248 +351,6 @@ public class WorldConfig {
invitedPlayers.remove(name);
}
/**
* @return the classes
*/
public List<DClass> getClasses() {
if (dClasses != null) {
if (!dClasses.isEmpty()) {
return dClasses;
}
}
return plugin.getDefaultConfig().dClasses;
}
/**
* @param name
* the name of the class
*/
public DClass getClass(String name) {
for (DClass dClass : dClasses) {
if (dClass.getName().equals(name)) {
return dClass;
}
}
for (DClass dClass : plugin.getDefaultConfig().dClasses) {
if (dClass.getName().equals(name)) {
return dClass;
}
}
return null;
}
/**
* @param id
* the id of the message
* @param returnMainConfig
* if a default value shall be returned
*/
public String getMsg(int id, boolean returnMainConfig) {
String msg = msgs.get(id);
if (msg != null) {
return msgs.get(id);
}
if (returnMainConfig) {
return plugin.getDefaultConfig().msgs.get(id);
}
return null;
}
/**
* @param msg
* the message to set
* @param id
* the ID of the message
*/
public void setMsg(String msg, int id) {
msgs.put(id, msg);
}
/**
* @return the objects to get passed to another player of the group when this player leaves
*/
public CopyOnWriteArrayList<Material> getSecureObjects() {
CopyOnWriteArrayList<Material> tmpSecureObjects = new CopyOnWriteArrayList<>();
tmpSecureObjects.addAll(secureObjects);
tmpSecureObjects.addAll(plugin.getDefaultConfig().secureObjects);
return tmpSecureObjects;
}
/**
* @return if the inventory shall be kept when the player enters the dungeon
*/
public boolean getKeepInventoryOnEnter() {
return keepInventoryOnEnter;
}
/**
* @return if the inventory shall be kept when the player leaves the dungeon successlessly
*/
public boolean getKeepInventoryOnEscape() {
return keepInventoryOnEscape;
}
/**
* @return if the inventory shall be kept when the player finishs the dungeon
*/
public boolean getKeepInventoryOnFinish() {
return keepInventoryOnFinish;
}
/**
* @return if the inventory shall be kept on death
*/
public boolean getKeepInventoryOnDeath() {
return keepInventoryOnDeath;
}
/**
* @return the gameMode
*/
public GameMode getGameMode() {
return gameMode;
}
/**
* @return if players may build
*/
public boolean canBuild() {
return build;
}
/**
* @return if players may attack each other
*/
public boolean isPlayerVersusPlayer() {
return playerVersusPlayer;
}
/**
* @return if players may attack group members
*/
public boolean isFriendlyFire() {
return friendlyFire;
}
/**
* @return the initial amount of lives
*/
public int getInitialLives() {
return initialLives;
}
/**
* @return if the lobby is disabled
*/
public boolean isLobbyDisabled() {
return isLobbyDisabled;
}
/**
* @return the time until a player can play again
*/
public int getTimeToNextPlay() {
return timeToNextPlay;
}
/**
* @return the time until a player can get loot again
*/
public int getTimeToNextLoot() {
return timeToNextLoot;
}
/**
* @return the break between two waves
*/
public int getTimeToNextWave() {
return timeToNextWave;
}
/**
* @return the time until a player gets kicked from his group if he is offline
*/
public int getTimeUntilKickOfflinePlayer() {
return timeUntilKickOfflinePlayer;
}
/**
* @return if the game is "time is running"
*/
public boolean isTimeIsRunning() {
return timeToFinish != -1;
}
/**
* @return the time until a player gets kicked from his group
*/
public int getTimeToFinish() {
return timeToFinish;
}
/**
* @return the requirements
*/
public List<Requirement> getRequirements() {
return requirements;
}
/**
* @return the rewards
*/
public List<Reward> getRewards() {
return rewards;
}
/**
* @return the timeLastPlayed
*/
public int getTimeLastPlayed() {
return timeLastPlayed;
}
/**
* @return all maps needed to be finished to play this map
*/
public List<String> getFinishedAll() {
return finishedAll;
}
/**
* @return all maps needed to be finished to play this map and a collection of maps of which at
* least one has to be finished
*/
public List<String> getFinished() {
List<String> merge = new ArrayList<>();
merge.addAll(finishedAll);
merge.addAll(finishedOne);
return merge;
}
/**
* @return the mobTypes
*/
public Set<DMobType> getMobTypes() {
return mobTypes;
}
/**
* @return the gameCommandWhitelist
*/
public List<String> getGameCommandWhitelist() {
return gameCommandWhitelist;
}
/**
* @return the gamePermissions
*/
public List<String> getGamePermissions() {
return gamePermissions;
}
/**
* @return the forcedGameType
*/

View File

@ -19,6 +19,8 @@ package io.github.dre2n.dungeonsxl.game;
import io.github.dre2n.commons.util.playerutil.PlayerUtil;
import io.github.dre2n.dungeonsxl.DungeonsXL;
import io.github.dre2n.dungeonsxl.config.DMessages;
import io.github.dre2n.dungeonsxl.config.DungeonConfig;
import io.github.dre2n.dungeonsxl.config.WorldConfig;
import io.github.dre2n.dungeonsxl.dungeon.Dungeon;
import io.github.dre2n.dungeonsxl.global.GameSign;
import io.github.dre2n.dungeonsxl.player.DGroup;
@ -47,6 +49,7 @@ public class Game {
private boolean started;
private GameType type;
private GameWorld world;
private GameRules rules;
private int waveCount;
private Map<String, Integer> gameKills = new HashMap<>();
private Map<String, Integer> waveKills = new HashMap<>();
@ -136,13 +139,71 @@ public class Game {
}
/**
* @param gameWorld
* @param world
* the GameWorld to connect to the Game
*/
public void setWorld(GameWorld world) {
this.world = world;
}
/**
* @return the GameRules
*/
public GameRules getRules() {
return rules;
}
/**
* @param rules
* the GameRules to set
*/
public void setRules(GameRules rules) {
this.rules = rules;
}
/**
* Fetchs the rules with the following priority:
* 1. Game type
* 2. Dungeon config: Override values
* 3. Floor config
* 4. Dungeon config: Default values
* 5. Main config: Default values
* 6. The default values
*/
public void fetchRules() {
DungeonConfig dungeonConfig = null;
if (getDungeon() != null) {
dungeonConfig = getDungeon().getConfig();
}
WorldConfig floorConfig = null;
if (world != null) {
floorConfig = world.getConfig();
}
GameRules finalRules = new GameRules();
if (type != null) {
finalRules.apply(type);
}
if (dungeonConfig != null) {
finalRules.apply(dungeonConfig.getOverrideValues());
}
if (floorConfig != null) {
finalRules.apply(floorConfig);
}
if (getDungeon() != null) {
finalRules.apply(dungeonConfig.getDefaultValues());
}
finalRules.apply(plugin.getMainConfig().getDefaultWorldConfig());
finalRules.apply(GameRules.DEFAULT_VALUES);
}
/**
* Refers to the DGroup with the best progress.
*

View File

@ -0,0 +1,520 @@
/*
* Copyright (C) 2016 Daniel Saukel
*
* 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 io.github.dre2n.dungeonsxl.game;
import io.github.dre2n.dungeonsxl.DungeonsXL;
import io.github.dre2n.dungeonsxl.mob.DMobType;
import io.github.dre2n.dungeonsxl.player.DClass;
import io.github.dre2n.dungeonsxl.requirement.Requirement;
import io.github.dre2n.dungeonsxl.reward.Reward;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList;
import org.bukkit.GameMode;
import org.bukkit.Material;
/**
* @author Daniel Saukel
*/
public class GameRules {
public static final GameRules DEFAULT_VALUES = new GameRules();
static {
/* keepInventory */
DEFAULT_VALUES.keepInventoryOnEnter = false;
DEFAULT_VALUES.keepInventoryOnEscape = false;
DEFAULT_VALUES.keepInventoryOnFinish = false;
DEFAULT_VALUES.keepInventoryOnDeath = true;
DEFAULT_VALUES.lobbyDisabled = false;
/* World interaction */
DEFAULT_VALUES.gameMode = GameMode.SURVIVAL;
DEFAULT_VALUES.build = false;
/* Fighting */
DEFAULT_VALUES.playerVersusPlayer = false;
DEFAULT_VALUES.friendlyFire = false;
DEFAULT_VALUES.initialLives = 3;
/* Timer */
DEFAULT_VALUES.timeLastPlayed = 0;
DEFAULT_VALUES.timeToNextPlay = 0;
DEFAULT_VALUES.timeToNextLoot = 0;
DEFAULT_VALUES.timeToNextWave = 10;
DEFAULT_VALUES.timeToFinish = -1;
DEFAULT_VALUES.timeUntilKickOfflinePlayer = -1;
/* Requirements and rewards */
DEFAULT_VALUES.requirements = new ArrayList<>();
DEFAULT_VALUES.finishedOne = null;
DEFAULT_VALUES.finishedAll = null;
DEFAULT_VALUES.rewards = new ArrayList<>();
/* Scripts */
DEFAULT_VALUES.dClasses = new ArrayList<>();
DEFAULT_VALUES.mobTypes = new HashSet<>();
/* Commands and permissions */
DEFAULT_VALUES.gameCommandWhitelist = new ArrayList<>();
DEFAULT_VALUES.gamePermissions = new ArrayList<>();
/* Misc */
DEFAULT_VALUES.msgs = new HashMap<>();
DEFAULT_VALUES.secureObjects = new ArrayList<>();
}
/* keepInventory */
protected Boolean keepInventoryOnEnter;
protected Boolean keepInventoryOnEscape;
protected Boolean keepInventoryOnFinish;
protected Boolean keepInventoryOnDeath;
protected Boolean lobbyDisabled;
/* World interaction */
protected GameMode gameMode;
protected Boolean build;
/* Fighting */
protected Boolean playerVersusPlayer;
protected Boolean friendlyFire;
protected Integer initialLives;
/* Timer */
protected Integer timeLastPlayed;
protected Integer timeToNextPlay;
protected Integer timeToNextLoot;
protected Integer timeToNextWave;
protected Integer timeToFinish;
protected Integer timeUntilKickOfflinePlayer;
/* Requirements and rewards */
protected List<Requirement> requirements;
protected List<String> finishedOne;
protected List<String> finishedAll;
protected List<Reward> rewards;
/* Scripts */
protected List<DClass> dClasses;
protected Set<DMobType> mobTypes;
/* Commands and permissions */
protected List<String> gameCommandWhitelist;
protected List<String> gamePermissions;
/* Misc */
protected Map<Integer, String> msgs;
protected List<Material> secureObjects;
/* Getters and setters */
/**
* @return the classes
*/
public List<DClass> getClasses() {
if (dClasses != null) {
if (!dClasses.isEmpty()) {
return dClasses;
}
}
return new ArrayList<>();
}
/**
* @param name
* the name of the class
*/
public DClass getClass(String name) {
for (DClass dClass : dClasses) {
if (dClass.getName().equals(name)) {
return dClass;
}
}
return null;
}
// keepInventory
/**
* @return if the inventory shall be kept when the player enters the dungeon
*/
public boolean getKeepInventoryOnEnter() {
return keepInventoryOnEnter;
}
/**
* @return if the inventory shall be kept when the player leaves the dungeon successlessly
*/
public boolean getKeepInventoryOnEscape() {
return keepInventoryOnEscape;
}
/**
* @return if the inventory shall be kept when the player finishs the dungeon
*/
public boolean getKeepInventoryOnFinish() {
return keepInventoryOnFinish;
}
/**
* @return if the inventory shall be kept on death
*/
public boolean getKeepInventoryOnDeath() {
return keepInventoryOnDeath;
}
/**
* @return if the lobby is disabled
*/
public boolean isLobbyDisabled() {
return lobbyDisabled;
}
// World interaction
/**
* @return the gameMode
*/
public GameMode getGameMode() {
return gameMode;
}
/**
* @return if players may build
*/
public boolean canBuild() {
return build;
}
// Fight
/**
* @return if players may attack each other
*/
public boolean isPlayerVersusPlayer() {
return playerVersusPlayer;
}
/**
* @return if players may attack group members
*/
public boolean isFriendlyFire() {
return friendlyFire;
}
/**
* @return the initial amount of lives
*/
public int getInitialLives() {
return initialLives;
}
// Timer
/**
* @return the timeLastPlayed
*/
public int getTimeLastPlayed() {
return timeLastPlayed;
}
/**
* @return the time until a player can play again
*/
public int getTimeToNextPlay() {
return timeToNextPlay;
}
/**
* @return the time until a player can get loot again
*/
public int getTimeToNextLoot() {
return timeToNextLoot;
}
/**
* @return the break between two waves
*/
public int getTimeToNextWave() {
return timeToNextWave;
}
/**
* @return the time until a player gets kicked from his group
*/
public int getTimeToFinish() {
return timeToFinish;
}
/**
* @return the time until a player gets kicked from his group if he is offline
*/
public int getTimeUntilKickOfflinePlayer() {
return timeUntilKickOfflinePlayer;
}
/**
* @return if the game is "time is running"
*/
public boolean isTimeIsRunning() {
return timeToFinish != -1;
}
// Requirements and rewards
/**
* @return the requirements
*/
public List<Requirement> getRequirements() {
return requirements;
}
/**
* @return all maps needed to be finished to play this map
*/
public List<String> getFinishedAll() {
return finishedAll;
}
/**
* @return all maps needed to be finished to play this map and a collection of maps of which at
* least one has to be finished
*/
public List<String> getFinished() {
List<String> merge = new ArrayList<>();
merge.addAll(finishedAll);
merge.addAll(finishedOne);
return merge;
}
/**
* @return the rewards
*/
public List<Reward> getRewards() {
return rewards;
}
// Scripts
/**
* @return the mobTypes
*/
public Set<DMobType> getMobTypes() {
return mobTypes;
}
// Commands and permissions
/**
* @return the gameCommandWhitelist
*/
public List<String> getGameCommandWhitelist() {
return gameCommandWhitelist;
}
/**
* @return the gamePermissions
*/
public List<String> getGamePermissions() {
return gamePermissions;
}
// Misc
/**
* @param id
* the id of the message
* @param returnMainConfig
* if a default value shall be returned
*/
public String getMsg(int id, boolean returnMainConfig) {
String msg = msgs.get(id);
if (msg != null) {
return msgs.get(id);
}
if (returnMainConfig) {
return DungeonsXL.getInstance().getMainConfig().getDefaultWorldConfig().msgs.get(id);
}
return null;
}
/**
* @param msg
* the message to set
* @param id
* the ID of the message
*/
public void setMsg(String msg, int id) {
msgs.put(id, msg);
}
/**
* @return the objects to get passed to another player of the group when this player leaves
*/
public CopyOnWriteArrayList<Material> getSecureObjects() {
CopyOnWriteArrayList<Material> tmpSecureObjects = new CopyOnWriteArrayList<>();
tmpSecureObjects.addAll(secureObjects);
return tmpSecureObjects;
}
/* Actions */
/**
* @param defaultValues
* the GameType that overrides the values that are null.
*/
public void apply(GameType defaultValues) {
if (playerVersusPlayer == null) {
playerVersusPlayer = defaultValues.isPlayerVersusPlayer();
}
if (friendlyFire == null) {
friendlyFire = defaultValues.isFriendlyFire();
}
if (timeToFinish == null) {
timeToFinish = defaultValues.getShowTime() ? null : -1;
}
if (build == null) {
build = defaultValues.canBuild();
}
if (gameMode == null) {
gameMode = defaultValues.getGameMode();
}
}
/**
* @param defaultValues
* the GameRules that override the values that are null.
*/
public void apply(GameRules defaultValues) {
/* keepInventory */
if (keepInventoryOnEnter == null) {
keepInventoryOnEnter = defaultValues.keepInventoryOnEnter;
}
if (keepInventoryOnEscape == null) {
keepInventoryOnEscape = defaultValues.keepInventoryOnEscape;
}
if (keepInventoryOnFinish == null) {
keepInventoryOnFinish = defaultValues.keepInventoryOnFinish;
}
if (keepInventoryOnDeath == null) {
keepInventoryOnDeath = defaultValues.keepInventoryOnDeath;
}
if (lobbyDisabled == null) {
lobbyDisabled = defaultValues.lobbyDisabled;
}
/* World interaction */
if (gameMode == null) {
gameMode = defaultValues.gameMode;
}
if (build == null) {
build = defaultValues.build;
}
/* Fighting */
if (playerVersusPlayer == null) {
playerVersusPlayer = defaultValues.playerVersusPlayer;
}
if (friendlyFire == null) {
friendlyFire = defaultValues.friendlyFire;
}
if (initialLives == null) {
initialLives = defaultValues.initialLives;
}
/* Timer */
if (timeLastPlayed == null) {
timeLastPlayed = defaultValues.timeLastPlayed;
}
if (timeToNextPlay == null) {
timeToNextPlay = defaultValues.timeToNextPlay;
}
if (timeToNextLoot == null) {
timeToNextLoot = defaultValues.timeToNextLoot;
}
if (timeToNextWave == null) {
timeToNextWave = defaultValues.timeToNextWave;
}
if (timeToFinish == null) {
timeToFinish = defaultValues.timeToFinish;
}
if (timeUntilKickOfflinePlayer == null) {
timeUntilKickOfflinePlayer = defaultValues.timeUntilKickOfflinePlayer;
}
/* Requirements and rewards */
if (requirements == null) {
requirements = defaultValues.requirements;
}
if (finishedOne == null) {
finishedOne = defaultValues.finishedOne;
}
if (finishedAll == null) {
finishedAll = defaultValues.finishedAll;
}
if (rewards == null) {
rewards = defaultValues.rewards;
}
/* Scripts */
if (dClasses == null) {
dClasses = defaultValues.dClasses;
} else if (defaultValues.dClasses != null) {
dClasses.addAll(defaultValues.dClasses);
}
if (mobTypes == null) {
mobTypes = defaultValues.mobTypes;
} else if (defaultValues.mobTypes != null) {
mobTypes.addAll(defaultValues.mobTypes);
}
/* Commands and permissions */
if (gameCommandWhitelist == null) {
gameCommandWhitelist = defaultValues.gameCommandWhitelist;
} else if (defaultValues.gameCommandWhitelist != null) {
gameCommandWhitelist.addAll(defaultValues.gameCommandWhitelist);
}
if (gamePermissions == null) {
gamePermissions = defaultValues.gamePermissions;
} else if (defaultValues.gamePermissions != null) {
gamePermissions.addAll(defaultValues.gamePermissions);
}
/* Misc */
msgs = defaultValues.msgs;
secureObjects = defaultValues.secureObjects;
}
}

View File

@ -361,7 +361,7 @@ public class GameWorld {
*/
public WorldConfig getConfig() {
if (worldConfig == null) {
return plugin.getDefaultConfig();
return plugin.getMainConfig().getDefaultWorldConfig();
}
return worldConfig;