mirror of
https://github.com/DRE2N/DungeonsXL.git
synced 2024-09-27 23:27:38 +02:00
Rewrite game start code
This commit is contained in:
parent
fbb7fc2348
commit
cdf3906dc9
@ -126,6 +126,38 @@ public interface Game {
|
|||||||
*/
|
*/
|
||||||
List<ResourceWorld> getUnplayedFloors();
|
List<ResourceWorld> getUnplayedFloors();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a floor to the list of floors to play.
|
||||||
|
*
|
||||||
|
* @param unplayedFloor the resource world of the floor
|
||||||
|
* @return if the addition was successful
|
||||||
|
*/
|
||||||
|
boolean addUnplayedFloor(ResourceWorld unplayedFloor);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes a floor from the list of floors to play.
|
||||||
|
*
|
||||||
|
* @param unplayedFloor the resource world of the floor
|
||||||
|
* @param force if the floor shall be removed even if the {@link #getDungeon() dungeon}'s floors are not to be
|
||||||
|
* {@link Dungeon#getRemoveWhenPlayed() removed when played.}
|
||||||
|
* @return if the removal was successful
|
||||||
|
*/
|
||||||
|
boolean removeUnplayedFloor(ResourceWorld unplayedFloor, boolean force);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the resource of the next floor to play.
|
||||||
|
*
|
||||||
|
* @return the resource of the next floor to play
|
||||||
|
*/
|
||||||
|
ResourceWorld getNextFloor();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the next floor to play.
|
||||||
|
*
|
||||||
|
* @param floor the resource world of the floor
|
||||||
|
*/
|
||||||
|
void setNextFloor(ResourceWorld floor);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the amount of played floors in this game.
|
* Returns the amount of played floors in this game.
|
||||||
*
|
*
|
||||||
@ -154,6 +186,13 @@ public interface Game {
|
|||||||
*/
|
*/
|
||||||
boolean isEmpty();
|
boolean isEmpty();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts the game. This is what happens when the ready sign is triggered by everyone.
|
||||||
|
*
|
||||||
|
* @return if the game has started correctly
|
||||||
|
*/
|
||||||
|
boolean start();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deletes this game.
|
* Deletes this game.
|
||||||
*/
|
*/
|
||||||
|
@ -93,6 +93,7 @@ import java.util.HashSet;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.function.Predicate;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
@ -814,4 +815,18 @@ public class DungeonsXL extends DREPlugin implements DungeonsAPI {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean xlDevMode = System.getProperty("XLDevMode") != null;
|
||||||
|
|
||||||
|
public void log(String message) {
|
||||||
|
if (xlDevMode) {
|
||||||
|
MessageUtil.log(this, message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public <T> void log(String message, T t, Predicate<T> predicate) {
|
||||||
|
if (xlDevMode && !predicate.test(t)) {
|
||||||
|
throw new AssertionError(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,7 @@ import de.erethon.dungeonsxl.player.DGroup;
|
|||||||
import de.erethon.dungeonsxl.sign.windup.MobSign;
|
import de.erethon.dungeonsxl.sign.windup.MobSign;
|
||||||
import de.erethon.dungeonsxl.trigger.ProgressTrigger;
|
import de.erethon.dungeonsxl.trigger.ProgressTrigger;
|
||||||
import de.erethon.dungeonsxl.world.DGameWorld;
|
import de.erethon.dungeonsxl.world.DGameWorld;
|
||||||
|
import de.erethon.dungeonsxl.world.DResourceWorld;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -47,11 +48,15 @@ public class DGame implements Game {
|
|||||||
|
|
||||||
private DungeonsXL plugin;
|
private DungeonsXL plugin;
|
||||||
|
|
||||||
|
private Dungeon dungeon;
|
||||||
|
private GameWorld world;
|
||||||
|
private List<ResourceWorld> unplayedFloors = new ArrayList<>();
|
||||||
|
private ResourceWorld nextFloor;
|
||||||
|
private int floorCount;
|
||||||
|
private List<PlayerGroup> groups = new ArrayList<>();
|
||||||
private boolean tutorial;
|
private boolean tutorial;
|
||||||
private boolean test;
|
private boolean test;
|
||||||
private List<PlayerGroup> groups = new ArrayList<>();
|
|
||||||
private boolean started;
|
private boolean started;
|
||||||
private GameWorld world;
|
|
||||||
private int waveCount;
|
private int waveCount;
|
||||||
private Map<String, Integer> gameKills = new HashMap<>();
|
private Map<String, Integer> gameKills = new HashMap<>();
|
||||||
private Map<String, Integer> waveKills = new HashMap<>();
|
private Map<String, Integer> waveKills = new HashMap<>();
|
||||||
@ -60,6 +65,10 @@ public class DGame implements Game {
|
|||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
plugin.getGameCache().add(this);
|
plugin.getGameCache().add(this);
|
||||||
|
|
||||||
|
dungeon = group.getDungeon();
|
||||||
|
if (dungeon == null) {
|
||||||
|
throw new IllegalStateException("Game initialized without dungeon");
|
||||||
|
}
|
||||||
tutorial = false;
|
tutorial = false;
|
||||||
started = false;
|
started = false;
|
||||||
|
|
||||||
@ -70,9 +79,13 @@ public class DGame implements Game {
|
|||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
plugin.getGameCache().add(this);
|
plugin.getGameCache().add(this);
|
||||||
|
|
||||||
|
this.world = world;
|
||||||
|
dungeon = world.getDungeon();
|
||||||
|
if (dungeon == null) {
|
||||||
|
throw new IllegalStateException("Game initialized without dungeon");
|
||||||
|
}
|
||||||
tutorial = false;
|
tutorial = false;
|
||||||
started = false;
|
started = false;
|
||||||
this.world = world;
|
|
||||||
|
|
||||||
addGroup(group);
|
addGroup(group);
|
||||||
}
|
}
|
||||||
@ -83,6 +96,10 @@ public class DGame implements Game {
|
|||||||
|
|
||||||
this.groups = groups;
|
this.groups = groups;
|
||||||
this.world = world;
|
this.world = world;
|
||||||
|
dungeon = world.getDungeon();
|
||||||
|
if (dungeon == null) {
|
||||||
|
throw new IllegalStateException("Game initialized without dungeon");
|
||||||
|
}
|
||||||
tutorial = false;
|
tutorial = false;
|
||||||
started = true;
|
started = true;
|
||||||
|
|
||||||
@ -135,8 +152,47 @@ public class DGame implements Game {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public GameWorld getWorld() {
|
public Dungeon getDungeon() {
|
||||||
return world;
|
return dungeon;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets up all dungeon-related fields.
|
||||||
|
*
|
||||||
|
* @param dungeon the dungeon to set
|
||||||
|
*/
|
||||||
|
public void setDungeon(Dungeon dungeon) {
|
||||||
|
this.dungeon = dungeon;
|
||||||
|
if (dungeon.isMultiFloor()) {
|
||||||
|
unplayedFloors = new ArrayList<>(dungeon.getFloors());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets up all dungeon-related fields.
|
||||||
|
*
|
||||||
|
* @param name the name of the dungeon
|
||||||
|
* @return if the action was successful
|
||||||
|
*/
|
||||||
|
public boolean setDungeon(String name) {
|
||||||
|
dungeon = plugin.getDungeonRegistry().get(name);
|
||||||
|
if (dungeon != null) {
|
||||||
|
unplayedFloors = dungeon.getFloors();
|
||||||
|
return true;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
ResourceWorld resource = plugin.getMapRegistry().get(name);
|
||||||
|
if (resource != null) {
|
||||||
|
dungeon = resource.getSingleFloorDungeon();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DGameWorld getWorld() {
|
||||||
|
return (DGameWorld) world;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -144,6 +200,39 @@ public class DGame implements Game {
|
|||||||
world = gameWorld;
|
world = gameWorld;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ResourceWorld> getUnplayedFloors() {
|
||||||
|
return unplayedFloors;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean addUnplayedFloor(ResourceWorld unplayedFloor) {
|
||||||
|
return unplayedFloors.add(unplayedFloor);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean removeUnplayedFloor(ResourceWorld unplayedFloor, boolean force) {
|
||||||
|
if (getDungeon().getRemoveWhenPlayed() || force) {
|
||||||
|
return unplayedFloors.remove(unplayedFloor);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResourceWorld getNextFloor() {
|
||||||
|
return nextFloor;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setNextFloor(ResourceWorld floor) {
|
||||||
|
nextFloor = floor;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getFloorCount() {
|
||||||
|
return floorCount;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasRewards() {
|
public boolean hasRewards() {
|
||||||
return test;
|
return test;
|
||||||
@ -154,38 +243,6 @@ public class DGame implements Game {
|
|||||||
test = enabled;
|
test = enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<ResourceWorld> getUnplayedFloors() {
|
|
||||||
List<ResourceWorld> unplayedFloors = null;
|
|
||||||
for (PlayerGroup group : groups) {
|
|
||||||
DGroup dGroup = (DGroup) group;
|
|
||||||
if (unplayedFloors == null || dGroup.getUnplayedFloors().size() < unplayedFloors.size()) {
|
|
||||||
unplayedFloors = dGroup.getUnplayedFloors();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (unplayedFloors == null) {
|
|
||||||
unplayedFloors = new ArrayList<>();
|
|
||||||
}
|
|
||||||
return unplayedFloors;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getFloorCount() {
|
|
||||||
int floorCount = 0;
|
|
||||||
for (PlayerGroup group : groups) {
|
|
||||||
DGroup dGroup = (DGroup) group;
|
|
||||||
if (dGroup.getFloorCount() > floorCount) {
|
|
||||||
floorCount = dGroup.getFloorCount();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return floorCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Dungeon getDungeon() {
|
|
||||||
return groups.get(0).getDungeon();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the waveCount
|
* @return the waveCount
|
||||||
*/
|
*/
|
||||||
@ -254,6 +311,32 @@ public class DGame implements Game {
|
|||||||
return groups.isEmpty();
|
return groups.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean start() {
|
||||||
|
getWorld().setWeather(getRules());
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
for (PlayerGroup group : groups) {
|
||||||
|
if (group == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!((DGroup) group).startGame(this, i++)) {
|
||||||
|
return false; // TODO: State of groups that are OK has already been changed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getWorld() != null) {
|
||||||
|
if (!getWorld().isPlaying()) {
|
||||||
|
getWorld().startGame();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
floorCount++;
|
||||||
|
nextFloor = null;
|
||||||
|
started = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void delete() {
|
public void delete() {
|
||||||
GameSign gameSign = GameSign.getByGame(plugin, this);
|
GameSign gameSign = GameSign.getByGame(plugin, this);
|
||||||
|
@ -19,7 +19,9 @@ package de.erethon.dungeonsxl.player;
|
|||||||
import de.erethon.caliburn.item.VanillaItem;
|
import de.erethon.caliburn.item.VanillaItem;
|
||||||
import de.erethon.caliburn.mob.VanillaMob;
|
import de.erethon.caliburn.mob.VanillaMob;
|
||||||
import de.erethon.dungeonsxl.DungeonsXL;
|
import de.erethon.dungeonsxl.DungeonsXL;
|
||||||
|
import de.erethon.dungeonsxl.api.Requirement;
|
||||||
import de.erethon.dungeonsxl.api.Reward;
|
import de.erethon.dungeonsxl.api.Reward;
|
||||||
|
import de.erethon.dungeonsxl.api.dungeon.Dungeon;
|
||||||
import de.erethon.dungeonsxl.api.dungeon.Game;
|
import de.erethon.dungeonsxl.api.dungeon.Game;
|
||||||
import de.erethon.dungeonsxl.api.dungeon.GameGoal;
|
import de.erethon.dungeonsxl.api.dungeon.GameGoal;
|
||||||
import de.erethon.dungeonsxl.api.dungeon.GameRule;
|
import de.erethon.dungeonsxl.api.dungeon.GameRule;
|
||||||
@ -29,6 +31,7 @@ import de.erethon.dungeonsxl.api.event.group.GroupScoreEvent;
|
|||||||
import de.erethon.dungeonsxl.api.event.player.GamePlayerDeathEvent;
|
import de.erethon.dungeonsxl.api.event.player.GamePlayerDeathEvent;
|
||||||
import de.erethon.dungeonsxl.api.event.player.GamePlayerFinishEvent;
|
import de.erethon.dungeonsxl.api.event.player.GamePlayerFinishEvent;
|
||||||
import de.erethon.dungeonsxl.api.event.player.GlobalPlayerRewardPayOutEvent;
|
import de.erethon.dungeonsxl.api.event.player.GlobalPlayerRewardPayOutEvent;
|
||||||
|
import de.erethon.dungeonsxl.api.event.requirement.RequirementDemandEvent;
|
||||||
import de.erethon.dungeonsxl.api.mob.DungeonMob;
|
import de.erethon.dungeonsxl.api.mob.DungeonMob;
|
||||||
import de.erethon.dungeonsxl.api.player.GamePlayer;
|
import de.erethon.dungeonsxl.api.player.GamePlayer;
|
||||||
import de.erethon.dungeonsxl.api.player.PlayerClass;
|
import de.erethon.dungeonsxl.api.player.PlayerClass;
|
||||||
@ -104,6 +107,10 @@ public class DGamePlayer extends DInstancePlayer implements GamePlayer {
|
|||||||
|
|
||||||
resetClassInventoryOnRespawn = rules.getState(GameRule.RESET_CLASS_INVENTORY_ON_RESPAWN);
|
resetClassInventoryOnRespawn = rules.getState(GameRule.RESET_CLASS_INVENTORY_ON_RESPAWN);
|
||||||
|
|
||||||
|
if (rules.getState(GameRule.GROUP_TAG_ENABLED)) {
|
||||||
|
initDGroupTag();
|
||||||
|
}
|
||||||
|
|
||||||
Location teleport = world.getLobbyLocation();
|
Location teleport = world.getLobbyLocation();
|
||||||
if (teleport == null) {
|
if (teleport == null) {
|
||||||
player.teleport(world.getWorld().getSpawnLocation());
|
player.teleport(world.getWorld().getSpawnLocation());
|
||||||
@ -512,17 +519,11 @@ public class DGamePlayer extends DInstancePlayer implements GamePlayer {
|
|||||||
ready = true;
|
ready = true;
|
||||||
|
|
||||||
boolean start = true;
|
boolean start = true;
|
||||||
for (PlayerGroup gameGroup : game.getGroups()) {
|
if (!game.start()) {// TODO: Start for every player???
|
||||||
if (!gameGroup.isPlaying()) {
|
start = false;
|
||||||
if (!((DGroup) gameGroup).startGame(game)) {
|
} else {
|
||||||
start = false;
|
respawn();
|
||||||
}
|
|
||||||
} else {
|
|
||||||
respawn();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
game.setStarted(true);
|
|
||||||
return start;
|
return start;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -550,6 +551,62 @@ public class DGamePlayer extends DInstancePlayer implements GamePlayer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void startGame() {
|
||||||
|
Dungeon dungeon = getGame().getDungeon();
|
||||||
|
GameRuleContainer rules = dungeon.getRules();
|
||||||
|
getData().logTimeLastStarted(dungeon.getName());
|
||||||
|
getData().setKeepInventoryAfterLogout(rules.getState(GameRule.KEEP_INVENTORY_ON_ESCAPE));
|
||||||
|
|
||||||
|
respawn();
|
||||||
|
|
||||||
|
if (plugin.getMainConfig().isSendFloorTitleEnabled()) {
|
||||||
|
String mapName = getGameWorld().getName();
|
||||||
|
if (rules.getState(GameRule.TITLE) != null || rules.getState(GameRule.SUBTITLE) != null) {
|
||||||
|
String title = rules.getState(GameRule.TITLE) == null ? "" : rules.getState(GameRule.TITLE);
|
||||||
|
String subtitle = rules.getState(GameRule.SUBTITLE) == null ? "" : rules.getState(GameRule.SUBTITLE);
|
||||||
|
|
||||||
|
MessageUtil.sendTitleMessage(player, title, subtitle,
|
||||||
|
rules.getState(GameRule.TITLE_FADE_IN), rules.getState(GameRule.TITLE_SHOW), rules.getState(GameRule.TITLE_FADE_OUT));
|
||||||
|
|
||||||
|
} else if (!dungeon.getName().equals(mapName)) {
|
||||||
|
MessageUtil.sendTitleMessage(player, "&b&l" + dungeon.getName().replaceAll("_", " "), "&4&l" + mapName.replaceAll("_", " "));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
MessageUtil.sendTitleMessage(player, "&4&l" + mapName.replaceAll("_", " "));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rules.getState(GameRule.ACTION_BAR) != null) {
|
||||||
|
MessageUtil.sendActionBarMessage(player, rules.getState(GameRule.ACTION_BAR));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rules.getState(GameRule.CHAT) != null) {
|
||||||
|
MessageUtil.sendCenteredMessage(player, rules.getState(GameRule.CHAT));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Requirement requirement : rules.getState(GameRule.REQUIREMENTS)) {
|
||||||
|
RequirementDemandEvent requirementDemandEvent
|
||||||
|
= new RequirementDemandEvent(requirement, dungeon, player, rules.getState(GameRule.KEEP_INVENTORY_ON_ENTER));
|
||||||
|
Bukkit.getPluginManager().callEvent(requirementDemandEvent);
|
||||||
|
if (requirementDemandEvent.isCancelled()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!DPermission.hasPermission(player, DPermission.IGNORE_REQUIREMENTS)) {
|
||||||
|
requirement.demand(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
player.setGameMode(rules.getState(GameRule.GAME_MODE));
|
||||||
|
|
||||||
|
// Permission bridge
|
||||||
|
if (plugin.getPermissionProvider() != null) {
|
||||||
|
for (String permission : rules.getState(GameRule.GAME_PERMISSIONS)) {
|
||||||
|
plugin.getPermissionProvider().playerAddTransient(getGame().getWorld().getWorld().getName(), player, permission);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The DGamePlayer finishs the current floor.
|
* The DGamePlayer finishs the current floor.
|
||||||
*
|
*
|
||||||
@ -571,7 +628,7 @@ public class DGamePlayer extends DInstancePlayer implements GamePlayer {
|
|||||||
if (!dGroup.isPlaying()) {
|
if (!dGroup.isPlaying()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
dGroup.setNextFloor(specifiedFloor);
|
getGame().setNextFloor(specifiedFloor);
|
||||||
if (dGroup.isFinished()) {
|
if (dGroup.isFinished()) {
|
||||||
dGroup.finishFloor(specifiedFloor);
|
dGroup.finishFloor(specifiedFloor);
|
||||||
} else {
|
} else {
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
package de.erethon.dungeonsxl.player;
|
package de.erethon.dungeonsxl.player;
|
||||||
|
|
||||||
import de.erethon.dungeonsxl.DungeonsXL;
|
import de.erethon.dungeonsxl.DungeonsXL;
|
||||||
import de.erethon.dungeonsxl.api.Requirement;
|
|
||||||
import de.erethon.dungeonsxl.api.Reward;
|
import de.erethon.dungeonsxl.api.Reward;
|
||||||
import de.erethon.dungeonsxl.api.dungeon.Dungeon;
|
import de.erethon.dungeonsxl.api.dungeon.Dungeon;
|
||||||
import de.erethon.dungeonsxl.api.dungeon.Game;
|
import de.erethon.dungeonsxl.api.dungeon.Game;
|
||||||
@ -29,7 +28,7 @@ import de.erethon.dungeonsxl.api.event.group.GroupFinishDungeonEvent;
|
|||||||
import de.erethon.dungeonsxl.api.event.group.GroupFinishFloorEvent;
|
import de.erethon.dungeonsxl.api.event.group.GroupFinishFloorEvent;
|
||||||
import de.erethon.dungeonsxl.api.event.group.GroupPlayerJoinEvent;
|
import de.erethon.dungeonsxl.api.event.group.GroupPlayerJoinEvent;
|
||||||
import de.erethon.dungeonsxl.api.event.group.GroupStartFloorEvent;
|
import de.erethon.dungeonsxl.api.event.group.GroupStartFloorEvent;
|
||||||
import de.erethon.dungeonsxl.api.event.requirement.RequirementDemandEvent;
|
import de.erethon.dungeonsxl.api.player.GamePlayer;
|
||||||
import de.erethon.dungeonsxl.api.player.GlobalPlayer;
|
import de.erethon.dungeonsxl.api.player.GlobalPlayer;
|
||||||
import de.erethon.dungeonsxl.api.player.InstancePlayer;
|
import de.erethon.dungeonsxl.api.player.InstancePlayer;
|
||||||
import de.erethon.dungeonsxl.api.player.PlayerCache;
|
import de.erethon.dungeonsxl.api.player.PlayerCache;
|
||||||
@ -44,7 +43,6 @@ import de.erethon.dungeonsxl.dungeon.DungeonConfig;
|
|||||||
import de.erethon.dungeonsxl.global.GroupSign;
|
import de.erethon.dungeonsxl.global.GroupSign;
|
||||||
import de.erethon.dungeonsxl.util.commons.chat.MessageUtil;
|
import de.erethon.dungeonsxl.util.commons.chat.MessageUtil;
|
||||||
import de.erethon.dungeonsxl.util.commons.player.PlayerCollection;
|
import de.erethon.dungeonsxl.util.commons.player.PlayerCollection;
|
||||||
import de.erethon.dungeonsxl.world.DGameWorld;
|
|
||||||
import de.erethon.dungeonsxl.world.DResourceWorld;
|
import de.erethon.dungeonsxl.world.DResourceWorld;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@ -75,14 +73,11 @@ public class DGroup implements PlayerGroup {
|
|||||||
private PlayerCollection players = new PlayerCollection();
|
private PlayerCollection players = new PlayerCollection();
|
||||||
private PlayerCollection invitedPlayers = new PlayerCollection();
|
private PlayerCollection invitedPlayers = new PlayerCollection();
|
||||||
private Dungeon dungeon;
|
private Dungeon dungeon;
|
||||||
private List<ResourceWorld> unplayedFloors = new ArrayList<>();
|
|
||||||
private Game game;
|
private Game game;
|
||||||
private GameWorld gameWorld;
|
private GameWorld gameWorld;
|
||||||
private boolean playing;
|
private boolean playing;
|
||||||
private int floorCount;
|
|
||||||
private List<Reward> rewards = new ArrayList<>();
|
private List<Reward> rewards = new ArrayList<>();
|
||||||
private BukkitTask timeIsRunningTask;
|
private BukkitTask timeIsRunningTask;
|
||||||
private ResourceWorld nextFloor;
|
|
||||||
private Color color;
|
private Color color;
|
||||||
private int score = 0;
|
private int score = 0;
|
||||||
private int initialLives = -1;
|
private int initialLives = -1;
|
||||||
@ -115,7 +110,6 @@ public class DGroup implements PlayerGroup {
|
|||||||
}
|
}
|
||||||
|
|
||||||
playing = false;
|
playing = false;
|
||||||
floorCount = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public DGroup(DungeonsXL plugin, Player player, Dungeon dungeon) {
|
public DGroup(DungeonsXL plugin, Player player, Dungeon dungeon) {
|
||||||
@ -151,9 +145,8 @@ public class DGroup implements PlayerGroup {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
setDungeon(dungeon);
|
this.dungeon = dungeon;
|
||||||
playing = false;
|
playing = false;
|
||||||
floorCount = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Getters and setters
|
// Getters and setters
|
||||||
@ -357,75 +350,39 @@ public class DGroup implements PlayerGroup {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Dungeon getDungeon() {
|
public Dungeon getDungeon() {
|
||||||
return dungeon;
|
return game != null ? game.getDungeon() : dungeon;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets up all dungeon-related fields.
|
* {@link #getDungeon()} ignores this if the group is in a game.
|
||||||
*
|
*
|
||||||
* @param dungeon the dungeon to set
|
* @param dungeon dungeon to set
|
||||||
*/
|
*/
|
||||||
public void setDungeon(Dungeon dungeon) {
|
public void setDungeon(Dungeon dungeon) {
|
||||||
this.dungeon = dungeon;
|
this.dungeon = dungeon;
|
||||||
if (dungeon.isMultiFloor()) {
|
|
||||||
unplayedFloors = new ArrayList<>(dungeon.getFloors());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets up all dungeon-related fields.
|
* Sets the dungeon.
|
||||||
*
|
*
|
||||||
* @param name the name of the dungeon
|
* @param name the name of the dungeon
|
||||||
* @return if the action was successful
|
* @return if the action was successful
|
||||||
*/
|
*/
|
||||||
public boolean setDungeon(String name) {
|
public boolean setDungeon(String name) {
|
||||||
dungeon = plugin.getDungeonRegistry().get(name);
|
return (dungeon = plugin.getDungeonRegistry().get(name)) != null;
|
||||||
if (dungeon != null) {
|
|
||||||
unplayedFloors = dungeon.getFloors();
|
|
||||||
return true;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
ResourceWorld resource = plugin.getMapRegistry().get(name);
|
|
||||||
if (resource != null) {
|
|
||||||
dungeon = resource.getSingleFloorDungeon();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getDungeonName() {
|
public String getDungeonName() {
|
||||||
if (dungeon == null) {
|
if (getDungeon() == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return dungeon.getName();
|
return getDungeon().getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getMapName() {
|
public String getMapName() {
|
||||||
return gameWorld == null ? null : gameWorld.getName();
|
return gameWorld == null ? null : gameWorld.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<ResourceWorld> getUnplayedFloors() {
|
|
||||||
return unplayedFloors;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param unplayedFloor the unplayed floor to add
|
|
||||||
*/
|
|
||||||
public void addUnplayedFloor(DResourceWorld unplayedFloor) {
|
|
||||||
unplayedFloors.add(unplayedFloor);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param unplayedFloor the unplayed floor to remove
|
|
||||||
* @param force remove the floor even if removeWhenPlayed is disabled
|
|
||||||
*/
|
|
||||||
public void removeUnplayedFloor(DResourceWorld unplayedFloor, boolean force) {
|
|
||||||
if (getDungeon().getRemoveWhenPlayed() || force) {
|
|
||||||
unplayedFloors.remove(unplayedFloor);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isPlaying() {
|
public boolean isPlaying() {
|
||||||
return playing;
|
return playing;
|
||||||
@ -435,14 +392,6 @@ public class DGroup implements PlayerGroup {
|
|||||||
this.playing = playing;
|
this.playing = playing;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getFloorCount() {
|
|
||||||
return floorCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFloorCount(int floorCount) {
|
|
||||||
this.floorCount = floorCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Reward> getRewards() {
|
public List<Reward> getRewards() {
|
||||||
return rewards;
|
return rewards;
|
||||||
@ -480,14 +429,6 @@ public class DGroup implements PlayerGroup {
|
|||||||
return !name.matches("Group#[0-9]{1,}");
|
return !name.matches("Group#[0-9]{1,}");
|
||||||
}
|
}
|
||||||
|
|
||||||
public ResourceWorld getNextFloor() {
|
|
||||||
return nextFloor;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setNextFloor(DResourceWorld floor) {
|
|
||||||
nextFloor = floor;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the color that represents this group.
|
* Returns the color that represents this group.
|
||||||
*
|
*
|
||||||
@ -624,15 +565,17 @@ public class DGroup implements PlayerGroup {
|
|||||||
getDGamePlayers().forEach(p -> p.leave(false));
|
getDGamePlayers().forEach(p -> p.leave(false));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Move code to more appropriate classes
|
||||||
/**
|
/**
|
||||||
* The group finishs the current floor.
|
* The group finishs the current floor.
|
||||||
*
|
*
|
||||||
* @param specifiedFloor the name of the next floor
|
* @param specifiedFloor the name of the next floor
|
||||||
*/
|
*/
|
||||||
public void finishFloor(DResourceWorld specifiedFloor) {
|
public void finishFloor(DResourceWorld specifiedFloor) {
|
||||||
|
Game game = getGame();
|
||||||
DungeonConfig dConfig = ((DDungeon) dungeon).getConfig();
|
DungeonConfig dConfig = ((DDungeon) dungeon).getConfig();
|
||||||
int floorsLeft = getDungeon().getFloors().size() - floorCount; //floorCount contains start floor, but dungeon floor list doesn't
|
int floorsLeft = getDungeon().getFloors().size() - game.getFloorCount(); //floorCount contains start floor, but dungeon floor list doesn't
|
||||||
removeUnplayedFloor((DResourceWorld) gameWorld.getResource(), false);
|
game.removeUnplayedFloor((DResourceWorld) gameWorld.getResource(), false);
|
||||||
ResourceWorld newFloor = null;
|
ResourceWorld newFloor = null;
|
||||||
GameWorld.Type type = null;
|
GameWorld.Type type = null;
|
||||||
if (gameWorld.getType() == GameWorld.Type.END_FLOOR) {
|
if (gameWorld.getType() == GameWorld.Type.END_FLOOR) {
|
||||||
@ -643,7 +586,7 @@ public class DGroup implements PlayerGroup {
|
|||||||
type = GameWorld.Type.DEFAULT;
|
type = GameWorld.Type.DEFAULT;
|
||||||
} else if (floorsLeft > 0) {
|
} else if (floorsLeft > 0) {
|
||||||
int random = new Random().nextInt(floorsLeft);
|
int random = new Random().nextInt(floorsLeft);
|
||||||
newFloor = getUnplayedFloors().get(random);
|
newFloor = game.getUnplayedFloors().get(random);
|
||||||
type = GameWorld.Type.DEFAULT;
|
type = GameWorld.Type.DEFAULT;
|
||||||
} else {
|
} else {
|
||||||
newFloor = dConfig.getEndFloor();
|
newFloor = dConfig.getEndFloor();
|
||||||
@ -656,7 +599,6 @@ public class DGroup implements PlayerGroup {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Game game = getGame();
|
|
||||||
GameWorld gameWorld = newFloor.instantiateGameWorld(true);
|
GameWorld gameWorld = newFloor.instantiateGameWorld(true);
|
||||||
gameWorld.setType(type);
|
gameWorld.setType(type);
|
||||||
this.gameWorld = gameWorld;
|
this.gameWorld = gameWorld;
|
||||||
@ -670,7 +612,7 @@ public class DGroup implements PlayerGroup {
|
|||||||
}
|
}
|
||||||
player.setFinished(false);
|
player.setFinished(false);
|
||||||
}
|
}
|
||||||
startGame(game);
|
game.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -699,122 +641,52 @@ public class DGroup implements PlayerGroup {
|
|||||||
plugin.getGroupAdapters().forEach(a -> a.deleteCorrespondingGroup(this));
|
plugin.getGroupAdapters().forEach(a -> a.deleteCorrespondingGroup(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean startGame(Game game) {
|
public boolean startGame(Game game, int index) {
|
||||||
if (game == null) {
|
if (color == null) {
|
||||||
|
color = plugin.getMainConfig().getGroupColorPriority(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean ready = true;
|
||||||
|
for (Player player : getMembers().getOnlinePlayers()) {
|
||||||
|
GamePlayer gamePlayer = plugin.getPlayerCache().getGamePlayer(player);
|
||||||
|
if (gamePlayer == null) {
|
||||||
|
gamePlayer = new DGamePlayer(plugin, player, getGameWorld());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!gamePlayer.isReady()) {
|
||||||
|
ready = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ready) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
GameRuleContainer rules = game.getRules();
|
|
||||||
((DGameWorld) gameWorld).setWeather(rules);
|
|
||||||
|
|
||||||
if (color == null) {
|
GroupStartFloorEvent event = new GroupStartFloorEvent(this, getGameWorld());
|
||||||
color = plugin.getMainConfig().getGroupColorPriority((game.getGroups().indexOf(this)));
|
|
||||||
}
|
|
||||||
|
|
||||||
for (PlayerGroup group : game.getGroups()) {
|
|
||||||
DGroup dGroup = (DGroup) group;
|
|
||||||
if (dGroup == null) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean ready = true;
|
|
||||||
for (Player player : dGroup.getMembers().getOnlinePlayers()) {
|
|
||||||
DGamePlayer dPlayer = (DGamePlayer) dPlayers.getGamePlayer(player);
|
|
||||||
if (dPlayer == null) {
|
|
||||||
dPlayer = new DGamePlayer(plugin, player, gameWorld);
|
|
||||||
}
|
|
||||||
if (rules.getState(GameRule.GROUP_TAG_ENABLED)) {
|
|
||||||
dPlayer.initDGroupTag();
|
|
||||||
}
|
|
||||||
if (!dPlayer.isReady()) {
|
|
||||||
ready = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ready) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
GroupStartFloorEvent event = new GroupStartFloorEvent(this, gameWorld);
|
|
||||||
Bukkit.getPluginManager().callEvent(event);
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
if (event.isCancelled()) {
|
if (event.isCancelled()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
playing = true;
|
playing = true;
|
||||||
|
|
||||||
if (gameWorld != null) {
|
|
||||||
if (!gameWorld.isPlaying()) {
|
|
||||||
((DGameWorld) gameWorld).startGame();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
floorCount++;
|
|
||||||
|
|
||||||
for (Player player : players.getOnlinePlayers()) {
|
|
||||||
DGamePlayer dPlayer = (DGamePlayer) dPlayers.getGamePlayer(player);
|
|
||||||
if (dPlayer == null) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
dPlayer.getData().logTimeLastStarted(getDungeonName());
|
|
||||||
dPlayer.getData().setKeepInventoryAfterLogout(rules.getState(GameRule.KEEP_INVENTORY_ON_ESCAPE));
|
|
||||||
|
|
||||||
dPlayer.respawn();
|
|
||||||
|
|
||||||
if (plugin.getMainConfig().isSendFloorTitleEnabled()) {
|
|
||||||
if (rules.getState(GameRule.TITLE) != null || rules.getState(GameRule.SUBTITLE) != null) {
|
|
||||||
String title = rules.getState(GameRule.TITLE) == null ? "" : rules.getState(GameRule.TITLE);
|
|
||||||
String subtitle = rules.getState(GameRule.SUBTITLE) == null ? "" : rules.getState(GameRule.SUBTITLE);
|
|
||||||
|
|
||||||
MessageUtil.sendTitleMessage(player, title, subtitle,
|
|
||||||
rules.getState(GameRule.TITLE_FADE_IN), rules.getState(GameRule.TITLE_SHOW), rules.getState(GameRule.TITLE_FADE_OUT));
|
|
||||||
|
|
||||||
} else if (!getDungeonName().equals(getMapName())) {
|
|
||||||
MessageUtil.sendTitleMessage(player, "&b&l" + getDungeonName().replaceAll("_", " "), "&4&l" + getMapName().replaceAll("_", " "));
|
|
||||||
|
|
||||||
} else {
|
|
||||||
MessageUtil.sendTitleMessage(player, "&4&l" + getMapName().replaceAll("_", " "));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rules.getState(GameRule.ACTION_BAR) != null) {
|
|
||||||
MessageUtil.sendActionBarMessage(player, rules.getState(GameRule.ACTION_BAR));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rules.getState(GameRule.CHAT) != null) {
|
|
||||||
MessageUtil.sendCenteredMessage(player, rules.getState(GameRule.CHAT));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Requirement requirement : rules.getState(GameRule.REQUIREMENTS)) {
|
|
||||||
RequirementDemandEvent requirementDemandEvent
|
|
||||||
= new RequirementDemandEvent(requirement, dungeon, player, rules.getState(GameRule.KEEP_INVENTORY_ON_ENTER));
|
|
||||||
Bukkit.getPluginManager().callEvent(event);
|
|
||||||
if (requirementDemandEvent.isCancelled()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!DPermission.hasPermission(player, DPermission.IGNORE_REQUIREMENTS)) {
|
|
||||||
requirement.demand(player);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
player.setGameMode(rules.getState(GameRule.GAME_MODE));
|
|
||||||
if (rules.getState(GameRule.TIME_TO_FINISH) != -1) {
|
|
||||||
timeIsRunningTask = new TimeIsRunningTask(plugin, this, rules.getState(GameRule.TIME_TO_FINISH)).runTaskTimer(plugin, 20, 20);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Permission bridge
|
|
||||||
if (plugin.getPermissionProvider() != null) {
|
|
||||||
for (String permission : rules.getState(GameRule.GAME_PERMISSIONS)) {
|
|
||||||
plugin.getPermissionProvider().playerRemoveTransient(gameWorld.getWorld().getName(), player, permission);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
plugin.getGlobalProtectionCache().updateGroupSigns(this);
|
plugin.getGlobalProtectionCache().updateGroupSigns(this);
|
||||||
nextFloor = null;
|
|
||||||
|
GameRuleContainer rules = getDungeon().getRules();
|
||||||
initialLives = rules.getState(GameRule.INITIAL_GROUP_LIVES);
|
initialLives = rules.getState(GameRule.INITIAL_GROUP_LIVES);
|
||||||
lives = initialLives;
|
lives = initialLives;
|
||||||
|
if (rules.getState(GameRule.TIME_TO_FINISH) != -1) {
|
||||||
|
timeIsRunningTask = new TimeIsRunningTask(plugin, this, rules.getState(GameRule.TIME_TO_FINISH)).runTaskTimer(plugin, 20, 20);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (UUID playerId : getMembers()) {
|
||||||
|
GlobalPlayer player = plugin.getPlayerCache().get(playerId);
|
||||||
|
if (!(player instanceof DGamePlayer)) {
|
||||||
|
plugin.log("Player isn't a DGamePlayer");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
((DGamePlayer) player).startGame();
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,16 +16,21 @@
|
|||||||
*/
|
*/
|
||||||
package de.erethon.dungeonsxl.sign.button;
|
package de.erethon.dungeonsxl.sign.button;
|
||||||
|
|
||||||
|
import de.erethon.dungeonsxl.DungeonsXL;
|
||||||
import de.erethon.dungeonsxl.api.DungeonsAPI;
|
import de.erethon.dungeonsxl.api.DungeonsAPI;
|
||||||
import de.erethon.dungeonsxl.api.player.GamePlayer;
|
import de.erethon.dungeonsxl.api.player.GamePlayer;
|
||||||
|
import de.erethon.dungeonsxl.api.player.PlayerGroup;
|
||||||
import de.erethon.dungeonsxl.api.sign.Button;
|
import de.erethon.dungeonsxl.api.sign.Button;
|
||||||
import de.erethon.dungeonsxl.api.world.InstanceWorld;
|
import de.erethon.dungeonsxl.api.world.InstanceWorld;
|
||||||
import de.erethon.dungeonsxl.config.DMessage;
|
import de.erethon.dungeonsxl.config.DMessage;
|
||||||
|
import de.erethon.dungeonsxl.player.DGamePlayer;
|
||||||
import de.erethon.dungeonsxl.player.DPermission;
|
import de.erethon.dungeonsxl.player.DPermission;
|
||||||
import de.erethon.dungeonsxl.trigger.InteractTrigger;
|
import de.erethon.dungeonsxl.trigger.InteractTrigger;
|
||||||
import de.erethon.dungeonsxl.util.commons.misc.NumberUtil;
|
import de.erethon.dungeonsxl.util.commons.misc.NumberUtil;
|
||||||
import de.erethon.dungeonsxl.util.commons.misc.ProgressBar;
|
import de.erethon.dungeonsxl.util.commons.misc.ProgressBar;
|
||||||
import de.erethon.dungeonsxl.world.DGameWorld;
|
import de.erethon.dungeonsxl.world.DGameWorld;
|
||||||
|
import java.util.UUID;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -116,9 +121,7 @@ public class ReadySign extends Button {
|
|||||||
bar.cancel();
|
bar.cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Player player : getGame().getPlayers()) {
|
readyAll();
|
||||||
ready(api.getPlayerCache().getGamePlayer(player));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -143,6 +146,23 @@ public class ReadySign extends Button {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void readyAll() {
|
||||||
|
for (PlayerGroup group : getGame().getGroups()) {
|
||||||
|
for (UUID memberId : group.getMembers()) {
|
||||||
|
Player player = Bukkit.getPlayer(memberId);
|
||||||
|
if (player != null) {
|
||||||
|
GamePlayer gamePlayer = api.getPlayerCache().getGamePlayer(player);
|
||||||
|
if (gamePlayer == null) {
|
||||||
|
gamePlayer = new DGamePlayer((DungeonsXL) api, player, getGameWorld());
|
||||||
|
}
|
||||||
|
ready(gamePlayer);
|
||||||
|
} else {
|
||||||
|
group.getMembers().remove(memberId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void ready(GamePlayer player) {
|
private void ready(GamePlayer player) {
|
||||||
if (player == null || player.isReady()) {
|
if (player == null || player.isReady()) {
|
||||||
return;
|
return;
|
||||||
|
2
pom.xml
2
pom.xml
@ -21,7 +21,7 @@
|
|||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<maven.compiler.source>1.8</maven.compiler.source>
|
<maven.compiler.source>1.8</maven.compiler.source>
|
||||||
<maven.compiler.target>1.8</maven.compiler.target>
|
<maven.compiler.target>1.8</maven.compiler.target>
|
||||||
<spigotVersion.latest>1.16.4-R0.1-SNAPSHOT</spigotVersion.latest>
|
<spigotVersion.latest>1.16.5-R0.1-SNAPSHOT</spigotVersion.latest>
|
||||||
</properties>
|
</properties>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
Loading…
Reference in New Issue
Block a user