mirror of
https://github.com/DRE2N/DungeonsXL.git
synced 2025-02-13 10:51:19 +01:00
Configurable Requirements - Closes: #29
This commit is contained in:
parent
0c39816f2b
commit
1a770fd0f8
@ -5,6 +5,7 @@ import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
@ -33,6 +34,10 @@ public class DConfig {
|
||||
|
||||
private int timeUntilKickOfflinePlayer = -1;
|
||||
|
||||
private List<String> finishedOne;
|
||||
private List<String> finishedAll;
|
||||
private int timeLastPlayed = 0;
|
||||
|
||||
// Spout
|
||||
private boolean spoutCraftOnly = false;
|
||||
private String spoutTexturepackURL;
|
||||
@ -176,6 +181,23 @@ public class DConfig {
|
||||
timeUntilKickOfflinePlayer = mainConfig.timeUntilKickOfflinePlayer;
|
||||
}
|
||||
|
||||
/* Dungeon Requirements */
|
||||
if (configFile.contains("mustFinishOne")) {
|
||||
finishedOne = configFile.getStringList("mustFinishOne");
|
||||
} else {
|
||||
finishedOne = new ArrayList<String>();
|
||||
}
|
||||
|
||||
if (configFile.contains("mustFinishAll")) {
|
||||
finishedAll = configFile.getStringList("mustFinishAll");
|
||||
} else {
|
||||
finishedAll = new ArrayList<String>();
|
||||
}
|
||||
|
||||
if (configFile.contains("timeLastPlayed")) {
|
||||
timeLastPlayed = configFile.getInt("timeLastPlayed");
|
||||
}
|
||||
|
||||
/* Spout */
|
||||
if (configFile.contains("spout.spoutCraftOnly")) {
|
||||
spoutCraftOnly = configFile.getBoolean("spout.spoutCraftOnly");
|
||||
@ -303,6 +325,21 @@ public class DConfig {
|
||||
return timeUntilKickOfflinePlayer;
|
||||
}
|
||||
|
||||
public int getTimeLastPlayed() {
|
||||
return timeLastPlayed;
|
||||
}
|
||||
|
||||
public List<String> getFinishedAll() {
|
||||
return finishedAll;
|
||||
}
|
||||
|
||||
public List<String> getFinished() {
|
||||
List<String> merge = new ArrayList<String>();
|
||||
merge.addAll(finishedAll);
|
||||
merge.addAll(finishedOne);
|
||||
return merge;
|
||||
}
|
||||
|
||||
public boolean isSpoutCraftOnly() {
|
||||
return spoutCraftOnly;
|
||||
}
|
||||
|
@ -247,6 +247,7 @@ public class DGSign {
|
||||
DGSign dgsign = getSign(block);
|
||||
if (dgsign != null) {
|
||||
if (GameWorld.canPlayDungeon(dgsign.dungeonName, player)) {
|
||||
if (GameWorld.checkRequirements(dgsign.dungeonName, player)) {
|
||||
int sx1 = dgsign.startSign.getX(), sy1 = dgsign.startSign.getY(), sz1 = dgsign.startSign.getZ();
|
||||
|
||||
Block topBlock = block.getRelative(0, sy1 - y, 0);
|
||||
@ -273,6 +274,9 @@ public class DGSign {
|
||||
}
|
||||
|
||||
}
|
||||
} else {
|
||||
P.p.msg(player, P.p.language.get("Error_Requirements"));
|
||||
}
|
||||
} else {
|
||||
File file = new File(P.p.getDataFolder() + "/dungeons/" + dgsign.dungeonName, "config.yml");
|
||||
if (file != null) {
|
||||
|
@ -82,6 +82,7 @@ public class LanguageReader {
|
||||
defaults.put("Error_Dispenser", "&4Du kannst nicht auf diesen Dispenser zugreifen!");
|
||||
defaults.put("Error_Ready", "&4Wähle zuerst eine Klasse aus!");
|
||||
defaults.put("Error_Cooldown", "&4Du kannst den Dungeon nur alle &6&v1&4 Stunden betreten!");
|
||||
defaults.put("Error_Requirements", "&4Du erfüllst nicht die Anforderungen für diesen Dungeon!");
|
||||
defaults.put("Error_Leftklick", "&4Du musst das Schild mit Links-klick berühren!");
|
||||
defaults.put("Error_Drop", "&4Du kannst keine sicheren Objekte droppen");
|
||||
defaults.put("Error_Cmd", "&4Befehle sind während des Dungeons nicht erlaubt!");
|
||||
|
@ -136,12 +136,89 @@ public class GameWorld {
|
||||
return true;
|
||||
}
|
||||
|
||||
File dungeonFolder = new File(p.getDataFolder() + "/dungeons/" + dungeon);
|
||||
if (dungeonFolder.isDirectory()) {
|
||||
if (new File(p.getDataFolder() + "/dungeons/" + dungeon).isDirectory()) {
|
||||
DConfig config = new DConfig(new File(p.getDataFolder() + "/dungeons/" + dungeon, "config.yml"));
|
||||
|
||||
if (config.getTimeToNextPlay() != 0) {
|
||||
// read PlayerConfig
|
||||
Long time = getPlayerTime(dungeon, player.getName());
|
||||
if (time != -1) {
|
||||
if (time + (config.getTimeToNextPlay() * 1000 * 60 * 60) > System.currentTimeMillis()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static boolean checkRequirements(String dungeon, Player player) {
|
||||
/*if (p.permission.has(player, "dungeonsxl.ignoreRequirements") || player.isOp()) {
|
||||
return true;
|
||||
}*/
|
||||
|
||||
if (new File(p.getDataFolder() + "/dungeons/" + dungeon).isDirectory() == false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
DConfig config = new DConfig(new File(p.getDataFolder() + "/dungeons/" + dungeon, "config.yml"));
|
||||
if (config.getFinished() != null && config.getFinishedAll() != null) {
|
||||
if (!config.getFinished().isEmpty()) {
|
||||
|
||||
long bestTime = 0;
|
||||
int numOfNeeded = 0;
|
||||
boolean doneTheOne = false;
|
||||
|
||||
if (config.getFinished().size() == config.getFinishedAll().size()) {
|
||||
doneTheOne = true;
|
||||
}
|
||||
|
||||
for (String played : config.getFinished()) {
|
||||
for (String dungeonName : new File(p.getDataFolder() + "/dungeons").list()) {
|
||||
if (new File(p.getDataFolder() + "/dungeons/" + dungeonName).isDirectory()) {
|
||||
if (played.equalsIgnoreCase(dungeonName) || played.equalsIgnoreCase("any")) {
|
||||
|
||||
Long time = getPlayerTime(dungeonName, player.getName());
|
||||
if (time != -1) {
|
||||
if (config.getFinishedAll().contains(played)) {
|
||||
numOfNeeded++;
|
||||
} else {
|
||||
doneTheOne = true;
|
||||
}
|
||||
if (bestTime < time) {
|
||||
bestTime = time;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (bestTime == 0) {
|
||||
return false;
|
||||
} else {
|
||||
if (config.getTimeLastPlayed() != 0) {
|
||||
if (System.currentTimeMillis() - bestTime > config.getTimeLastPlayed() * (long) 3600000) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (numOfNeeded < config.getFinishedAll().size() || !doneTheOne) {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static long getPlayerTime(String dungeon, String name) {
|
||||
File file = new File(p.getDataFolder() + "/dungeons/" + dungeon, "players.yml");
|
||||
|
||||
if (!file.exists()) {
|
||||
@ -153,19 +230,10 @@ public class GameWorld {
|
||||
}
|
||||
|
||||
FileConfiguration playerConfig = YamlConfiguration.loadConfiguration(file);
|
||||
|
||||
if (playerConfig.contains(player.getName())) {
|
||||
Long time = playerConfig.getLong(player.getName());
|
||||
if (time + (config.getTimeToNextPlay() * 1000 * 60 * 60) > System.currentTimeMillis()) {
|
||||
return false;
|
||||
if (playerConfig.contains(name)) {
|
||||
return playerConfig.getLong(name);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
return -1;
|
||||
}
|
||||
|
||||
public void delete() {
|
||||
|
Loading…
Reference in New Issue
Block a user