mirror of
https://github.com/DRE2N/DungeonsXL.git
synced 2025-02-10 09:21:30 +01:00
Added Time is Running mode
This commit is contained in:
parent
92b10ec50a
commit
ed0e32d9eb
@ -67,6 +67,8 @@ public class MessageConfig {
|
|||||||
PLAYER_READY("Player_Ready", "&6You are now ready for the Dungeon!"),
|
PLAYER_READY("Player_Ready", "&6You are now ready for the Dungeon!"),
|
||||||
PLAYER_SIGN_CREATED("Player_SignCreated", "&6Sign created!"),
|
PLAYER_SIGN_CREATED("Player_SignCreated", "&6Sign created!"),
|
||||||
PLAYER_SIGN_COPIED("Player_SignCopied", "&6Copied!"),
|
PLAYER_SIGN_COPIED("Player_SignCopied", "&6Copied!"),
|
||||||
|
PLAYER_TIME_LEFT("Player_TimeLeft", "&v1You have &6&v2 &v1seconds left to finish the dungeon!"),
|
||||||
|
PLAYER_TIME_KICK("Player_TimeKick", "&2&v1&6's time expired."),
|
||||||
PLAYER_TREASURES("Player_Treasures", "&1Treasures"),
|
PLAYER_TREASURES("Player_Treasures", "&1Treasures"),
|
||||||
PLAYER_WAIT_FOR_OTHER_PLAYERS("Player_WaitForOtherPlayers", "&6Waiting for teammates..."),
|
PLAYER_WAIT_FOR_OTHER_PLAYERS("Player_WaitForOtherPlayers", "&6Waiting for teammates..."),
|
||||||
|
|
||||||
|
@ -81,6 +81,7 @@ public class WorldConfig {
|
|||||||
private int timeToNextLoot = 0;
|
private int timeToNextLoot = 0;
|
||||||
|
|
||||||
private int timeUntilKickOfflinePlayer = -1;
|
private int timeUntilKickOfflinePlayer = -1;
|
||||||
|
private int timeToFinish = -1;
|
||||||
|
|
||||||
private List<Requirement> requirements = new ArrayList<>();
|
private List<Requirement> requirements = new ArrayList<>();
|
||||||
private List<Reward> rewards = new ArrayList<>();
|
private List<Reward> rewards = new ArrayList<>();
|
||||||
@ -91,7 +92,6 @@ public class WorldConfig {
|
|||||||
|
|
||||||
private GameType forcedGameType;
|
private GameType forcedGameType;
|
||||||
|
|
||||||
// MobTypes
|
|
||||||
private Set<DMobType> mobTypes = new HashSet<>();
|
private Set<DMobType> mobTypes = new HashSet<>();
|
||||||
|
|
||||||
private List<String> gameCommandWhitelist = new ArrayList<>();
|
private List<String> gameCommandWhitelist = new ArrayList<>();
|
||||||
@ -301,6 +301,12 @@ public class WorldConfig {
|
|||||||
timeUntilKickOfflinePlayer = plugin.getDefaultConfig().timeUntilKickOfflinePlayer;
|
timeUntilKickOfflinePlayer = plugin.getDefaultConfig().timeUntilKickOfflinePlayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (configFile.contains("timeToFinish")) {
|
||||||
|
timeToFinish = configFile.getInt("timeToFinish");
|
||||||
|
} else {
|
||||||
|
timeToFinish = plugin.getDefaultConfig().timeToFinish;
|
||||||
|
}
|
||||||
|
|
||||||
/* Dungeon Requirements */
|
/* Dungeon Requirements */
|
||||||
if (configFile.contains("requirements")) {
|
if (configFile.contains("requirements")) {
|
||||||
for (String identifier : configFile.getConfigurationSection("requirements").getKeys(false)) {
|
for (String identifier : configFile.getConfigurationSection("requirements").getKeys(false)) {
|
||||||
@ -580,6 +586,20 @@ public class WorldConfig {
|
|||||||
return timeUntilKickOfflinePlayer;
|
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
|
* @return the requirements
|
||||||
*/
|
*/
|
||||||
|
@ -30,6 +30,7 @@ public class DPlayerKickEvent extends DPlayerEvent implements Cancellable {
|
|||||||
COMMAND,
|
COMMAND,
|
||||||
DEATH,
|
DEATH,
|
||||||
OFFLINE,
|
OFFLINE,
|
||||||
|
TIME_EXPIRED,
|
||||||
CUSTOM
|
CUSTOM
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -447,7 +447,7 @@ public class GameWorld {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Statics
|
/* Statics */
|
||||||
public static GameWorld load(String name) {
|
public static GameWorld load(String name) {
|
||||||
GameWorldLoadEvent event = new GameWorldLoadEvent(name);
|
GameWorldLoadEvent event = new GameWorldLoadEvent(name);
|
||||||
|
|
||||||
@ -520,7 +520,10 @@ public class GameWorld {
|
|||||||
|
|
||||||
public static GameWorld getByWorld(World world) {
|
public static GameWorld getByWorld(World world) {
|
||||||
for (GameWorld gameWorld : plugin.getGameWorlds()) {
|
for (GameWorld gameWorld : plugin.getGameWorlds()) {
|
||||||
if (gameWorld.world.equals(world)) {
|
if (gameWorld.getWorld() == null) {
|
||||||
|
continue;
|
||||||
|
|
||||||
|
} else if (gameWorld.getWorld().equals(world)) {
|
||||||
return gameWorld;
|
return gameWorld;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -35,6 +35,7 @@ import io.github.dre2n.dungeonsxl.global.GameSign;
|
|||||||
import io.github.dre2n.dungeonsxl.global.GroupSign;
|
import io.github.dre2n.dungeonsxl.global.GroupSign;
|
||||||
import io.github.dre2n.dungeonsxl.requirement.Requirement;
|
import io.github.dre2n.dungeonsxl.requirement.Requirement;
|
||||||
import io.github.dre2n.dungeonsxl.reward.Reward;
|
import io.github.dre2n.dungeonsxl.reward.Reward;
|
||||||
|
import io.github.dre2n.dungeonsxl.task.TimeIsRunningTask;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
@ -42,6 +43,7 @@ import java.util.List;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.CopyOnWriteArrayList;
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.scheduler.BukkitTask;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Frank Baumann, Daniel Saukel
|
* @author Frank Baumann, Daniel Saukel
|
||||||
@ -63,6 +65,7 @@ public class DGroup {
|
|||||||
private int floorCount;
|
private int floorCount;
|
||||||
private int waveCount;
|
private int waveCount;
|
||||||
private List<Reward> rewards = new ArrayList<>();
|
private List<Reward> rewards = new ArrayList<>();
|
||||||
|
private BukkitTask timeIsRunningTask;
|
||||||
|
|
||||||
public DGroup(String name, Player player) {
|
public DGroup(String name, Player player) {
|
||||||
plugin.getDGroups().add(this);
|
plugin.getDGroups().add(this);
|
||||||
@ -418,6 +421,21 @@ public class DGroup {
|
|||||||
rewards.remove(reward);
|
rewards.remove(reward);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the "Time is Running" task of the game
|
||||||
|
*/
|
||||||
|
public BukkitTask getTimeIsRunningTask() {
|
||||||
|
return timeIsRunningTask;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param task
|
||||||
|
* the task to set
|
||||||
|
*/
|
||||||
|
public void setTimeIsRunningTask(BukkitTask task) {
|
||||||
|
this.timeIsRunningTask = task;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return whether there are players in the group
|
* @return whether there are players in the group
|
||||||
*/
|
*/
|
||||||
@ -430,9 +448,15 @@ public class DGroup {
|
|||||||
*/
|
*/
|
||||||
public void delete() {
|
public void delete() {
|
||||||
plugin.getDGroups().remove(this);
|
plugin.getDGroups().remove(this);
|
||||||
|
|
||||||
|
if (timeIsRunningTask != null) {
|
||||||
|
timeIsRunningTask.cancel();
|
||||||
|
}
|
||||||
|
|
||||||
if (Game.getByDGroup(this) != null) {
|
if (Game.getByDGroup(this) != null) {
|
||||||
Game.getByDGroup(this).removeDGroup(this);
|
Game.getByDGroup(this).removeDGroup(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
GameSign.updatePerGame(Game.getByDGroup(this));
|
GameSign.updatePerGame(Game.getByDGroup(this));
|
||||||
GroupSign.updatePerGroup(this);
|
GroupSign.updatePerGroup(this);
|
||||||
}
|
}
|
||||||
@ -477,6 +501,10 @@ public class DGroup {
|
|||||||
|
|
||||||
for (Player player : getPlayers()) {
|
for (Player player : getPlayers()) {
|
||||||
DPlayer dPlayer = DPlayer.getByPlayer(player);
|
DPlayer dPlayer = DPlayer.getByPlayer(player);
|
||||||
|
if (dPlayer == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
dPlayer.respawn();
|
dPlayer.respawn();
|
||||||
|
|
||||||
if (plugin.getMainConfig().getSendFloorTitle()) {
|
if (plugin.getMainConfig().getSendFloorTitle()) {
|
||||||
@ -503,9 +531,15 @@ public class DGroup {
|
|||||||
GameType gameType = game.getType();
|
GameType gameType = game.getType();
|
||||||
if (gameType == GameTypeDefault.DEFAULT) {
|
if (gameType == GameTypeDefault.DEFAULT) {
|
||||||
player.setGameMode(config.getGameMode());
|
player.setGameMode(config.getGameMode());
|
||||||
|
if (config.isTimeIsRunning()) {
|
||||||
|
timeIsRunningTask = new TimeIsRunningTask(this, config.getTimeToFinish()).runTaskTimer(plugin, 20, 20);
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
player.setGameMode(gameType.getGameMode());
|
player.setGameMode(gameType.getGameMode());
|
||||||
|
if (gameType.getShowTime()) {
|
||||||
|
timeIsRunningTask = new TimeIsRunningTask(this, config.getTimeToFinish()).runTaskTimer(plugin, 20, 20);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,83 @@
|
|||||||
|
/*
|
||||||
|
* 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.task;
|
||||||
|
|
||||||
|
import io.github.dre2n.commons.util.messageutil.MessageUtil;
|
||||||
|
import io.github.dre2n.dungeonsxl.DungeonsXL;
|
||||||
|
import io.github.dre2n.dungeonsxl.config.MessageConfig;
|
||||||
|
import io.github.dre2n.dungeonsxl.config.MessageConfig.Messages;
|
||||||
|
import io.github.dre2n.dungeonsxl.event.dplayer.DPlayerKickEvent;
|
||||||
|
import io.github.dre2n.dungeonsxl.player.DGroup;
|
||||||
|
import io.github.dre2n.dungeonsxl.player.DPlayer;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Daniel Saukel
|
||||||
|
*/
|
||||||
|
public class TimeIsRunningTask extends BukkitRunnable {
|
||||||
|
|
||||||
|
protected static MessageConfig messageConfig = DungeonsXL.getInstance().getMessageConfig();
|
||||||
|
|
||||||
|
private DGroup dGroup;
|
||||||
|
private int time;
|
||||||
|
private int timeLeft;
|
||||||
|
|
||||||
|
public TimeIsRunningTask(DGroup dGroup, int time) {
|
||||||
|
this.dGroup = dGroup;
|
||||||
|
this.time = time;
|
||||||
|
this.timeLeft = time;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
timeLeft--;
|
||||||
|
|
||||||
|
String color = ChatColor.GREEN.toString();
|
||||||
|
|
||||||
|
try {
|
||||||
|
color = (double) timeLeft / (double) time > 0.25 ? ChatColor.GREEN.toString() : ChatColor.DARK_RED.toString();
|
||||||
|
|
||||||
|
} catch (ArithmeticException exception) {
|
||||||
|
color = ChatColor.DARK_RED.toString();
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
for (Player player : dGroup.getPlayers()) {
|
||||||
|
MessageUtil.sendActionBarMessage(player, messageConfig.getMessage(Messages.PLAYER_TIME_LEFT, color, String.valueOf(timeLeft)));
|
||||||
|
|
||||||
|
DPlayer dPlayer = DPlayer.getByPlayer(player);
|
||||||
|
if (timeLeft > 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
DPlayerKickEvent dPlayerKickEvent = new DPlayerKickEvent(dPlayer, DPlayerKickEvent.Cause.TIME_EXPIRED);
|
||||||
|
|
||||||
|
if (!dPlayerKickEvent.isCancelled()) {
|
||||||
|
MessageUtil.broadcastMessage(messageConfig.getMessage(Messages.PLAYER_TIME_KICK, player.getName()));
|
||||||
|
dPlayer.leave();
|
||||||
|
if (dGroup.getGameWorld().getConfig().getKeepInventoryOnEscape()) {
|
||||||
|
dPlayer.applyRespawnInventory();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cancel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user