mirror of
https://github.com/DRE2N/DungeonsXL.git
synced 2024-12-01 06:53:26 +01:00
commit
3bf602e68d
13
pom.xml
13
pom.xml
@ -2,7 +2,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>io.github.dre2n</groupId>
|
<groupId>io.github.dre2n</groupId>
|
||||||
<artifactId>dungeonsxl</artifactId>
|
<artifactId>dungeonsxl</artifactId>
|
||||||
<version>0.12.1-SNAPSHOT${buildNo}</version>
|
<version>0.13${buildNo}</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
<name>DungeonsXL</name>
|
<name>DungeonsXL</name>
|
||||||
<url>https://dre2n.github.io</url>
|
<url>https://dre2n.github.io</url>
|
||||||
@ -47,7 +47,7 @@
|
|||||||
<relocations>
|
<relocations>
|
||||||
<relocation>
|
<relocation>
|
||||||
<pattern>io.github.dre2n.commons</pattern>
|
<pattern>io.github.dre2n.commons</pattern>
|
||||||
<shadedPattern>io.github.dre2n.util.commons</shadedPattern>
|
<shadedPattern>io.github.dre2n.dungeonsxl.util.commons</shadedPattern>
|
||||||
</relocation>
|
</relocation>
|
||||||
<relocation>
|
<relocation>
|
||||||
<pattern>io.github.dre2n.caliburn</pattern>
|
<pattern>io.github.dre2n.caliburn</pattern>
|
||||||
@ -87,12 +87,12 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.github.dre2n</groupId>
|
<groupId>io.github.dre2n</groupId>
|
||||||
<artifactId>caliburn</artifactId>
|
<artifactId>caliburn</artifactId>
|
||||||
<version>0.1.5</version>
|
<version>0.1.6</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.github.dre2n</groupId>
|
<groupId>io.github.dre2n</groupId>
|
||||||
<artifactId>itemsxl</artifactId>
|
<artifactId>itemsxl</artifactId>
|
||||||
<version>0.1.5</version>
|
<version>0.1.6</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.github.dre2n</groupId>
|
<groupId>io.github.dre2n</groupId>
|
||||||
@ -105,6 +105,11 @@
|
|||||||
<version>2.0.18-SNAPSHOT</version>
|
<version>2.0.18-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.gmail.filoghost</groupId>
|
||||||
|
<artifactId>holographicdisplaysapi</artifactId>
|
||||||
|
<version>2.1.7</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<repositories>
|
<repositories>
|
||||||
<repository>
|
<repository>
|
||||||
|
@ -17,10 +17,6 @@
|
|||||||
package io.github.dre2n.dungeonsxl;
|
package io.github.dre2n.dungeonsxl;
|
||||||
|
|
||||||
import io.github.dre2n.caliburn.CaliburnAPI;
|
import io.github.dre2n.caliburn.CaliburnAPI;
|
||||||
import io.github.dre2n.caliburn.item.ItemCategories;
|
|
||||||
import io.github.dre2n.caliburn.item.Items;
|
|
||||||
import io.github.dre2n.caliburn.mob.MobCategories;
|
|
||||||
import io.github.dre2n.caliburn.mob.Mobs;
|
|
||||||
import io.github.dre2n.commons.command.BRCommands;
|
import io.github.dre2n.commons.command.BRCommands;
|
||||||
import io.github.dre2n.commons.compatibility.Internals;
|
import io.github.dre2n.commons.compatibility.Internals;
|
||||||
import io.github.dre2n.commons.compatibility.Version;
|
import io.github.dre2n.commons.compatibility.Version;
|
||||||
@ -63,8 +59,6 @@ import io.github.dre2n.itemsxl.ItemsXL;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.CopyOnWriteArrayList;
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
|
||||||
import org.bukkit.event.HandlerList;
|
import org.bukkit.event.HandlerList;
|
||||||
import org.bukkit.scheduler.BukkitTask;
|
import org.bukkit.scheduler.BukkitTask;
|
||||||
|
|
||||||
@ -334,8 +328,7 @@ public class DungeonsXL extends BRPlugin {
|
|||||||
caliburn = ItemsXL.getInstance().getAPI();
|
caliburn = ItemsXL.getInstance().getAPI();
|
||||||
} else {
|
} else {
|
||||||
caliburn = new CaliburnAPI(this);
|
caliburn = new CaliburnAPI(this);
|
||||||
ConfigurationSection placeholder = new YamlConfiguration();
|
caliburn.setupClean();
|
||||||
caliburn.setup(new Items(caliburn), new Mobs(caliburn), new ItemCategories(caliburn, placeholder), new MobCategories(caliburn, placeholder));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ public class Announcer {
|
|||||||
if (multiFloor) {
|
if (multiFloor) {
|
||||||
dungeonName = identifier;
|
dungeonName = identifier;
|
||||||
|
|
||||||
Dungeon dungeon = plugin.getDungeons().getDungeon(identifier);
|
Dungeon dungeon = plugin.getDungeons().getByName(identifier);
|
||||||
if (dungeon != null) {
|
if (dungeon != null) {
|
||||||
mapName = dungeon.getConfig().getStartFloor();
|
mapName = dungeon.getConfig().getStartFloor();
|
||||||
}
|
}
|
||||||
@ -135,7 +135,7 @@ public class Announcer {
|
|||||||
if (multiFloor) {
|
if (multiFloor) {
|
||||||
dungeonName = identifier;
|
dungeonName = identifier;
|
||||||
|
|
||||||
Dungeon dungeon = plugin.getDungeons().getDungeon(identifier);
|
Dungeon dungeon = plugin.getDungeons().getByName(identifier);
|
||||||
if (dungeon != null) {
|
if (dungeon != null) {
|
||||||
mapName = dungeon.getConfig().getStartFloor();
|
mapName = dungeon.getConfig().getStartFloor();
|
||||||
}
|
}
|
||||||
|
@ -75,7 +75,7 @@ public class ListCommand extends BRCommand {
|
|||||||
if (args.length >= 2) {
|
if (args.length >= 2) {
|
||||||
if (args[1].equalsIgnoreCase("dungeons") || args[1].equalsIgnoreCase("d")) {
|
if (args[1].equalsIgnoreCase("dungeons") || args[1].equalsIgnoreCase("d")) {
|
||||||
if (args.length >= 3) {
|
if (args.length >= 3) {
|
||||||
Dungeon dungeon = plugin.getDungeons().getDungeon(args[2]);
|
Dungeon dungeon = plugin.getDungeons().getByName(args[2]);
|
||||||
if (dungeon != null) {
|
if (dungeon != null) {
|
||||||
MessageUtil.sendPluginTag(sender, plugin);
|
MessageUtil.sendPluginTag(sender, plugin);
|
||||||
MessageUtil.sendCenteredMessage(sender, "&4&l[ &6" + dungeon.getName() + " &4&l]");
|
MessageUtil.sendCenteredMessage(sender, "&4&l[ &6" + dungeon.getName() + " &4&l]");
|
||||||
|
@ -70,7 +70,7 @@ public class PlayCommand extends BRCommand {
|
|||||||
identifier = args[2];
|
identifier = args[2];
|
||||||
mapName = identifier;
|
mapName = identifier;
|
||||||
if (args[1].equalsIgnoreCase("dungeon") || args[1].equalsIgnoreCase("d")) {
|
if (args[1].equalsIgnoreCase("dungeon") || args[1].equalsIgnoreCase("d")) {
|
||||||
Dungeon dungeon = plugin.getDungeons().getDungeon(args[2]);
|
Dungeon dungeon = plugin.getDungeons().getByName(args[2]);
|
||||||
if (dungeon != null) {
|
if (dungeon != null) {
|
||||||
multiFloor = true;
|
multiFloor = true;
|
||||||
mapName = dungeon.getConfig().getStartFloor();
|
mapName = dungeon.getConfig().getStartFloor();
|
||||||
@ -102,7 +102,7 @@ public class PlayCommand extends BRCommand {
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
dGroup.setDungeonName(identifier);
|
dGroup.setDungeonName(identifier);
|
||||||
Dungeon dungeon = plugin.getDungeons().getDungeon(identifier);
|
Dungeon dungeon = plugin.getDungeons().getByName(identifier);
|
||||||
|
|
||||||
if (dungeon != null) {
|
if (dungeon != null) {
|
||||||
DungeonConfig config = dungeon.getConfig();
|
DungeonConfig config = dungeon.getConfig();
|
||||||
|
@ -56,14 +56,13 @@ public enum DMessages implements Messages {
|
|||||||
ERROR_COOLDOWN("Error_Cooldown", "&4You can only enter this dungeon every &6&v1&4 hours!"),
|
ERROR_COOLDOWN("Error_Cooldown", "&4You can only enter this dungeon every &6&v1&4 hours!"),
|
||||||
ERROR_DISPENSER("Error_Dispenser", "&4You cannot access this dispenser!"),
|
ERROR_DISPENSER("Error_Dispenser", "&4You cannot access this dispenser!"),
|
||||||
ERROR_DROP("Error_Drop", "&4You cannot drop safe items"),
|
ERROR_DROP("Error_Drop", "&4You cannot drop safe items"),
|
||||||
ERROR_DUNGEON_NOT_EXIST("Error_DungeonNotExist", "&4Dungeon &6&v1&4 does not exist!"),
|
ERROR_DUNGEON_NOT_EXIST("Error_DungeonNotExist", "&4This dungeon does not exist."),
|
||||||
ERROR_ENDERCHEST("Error_Enderchest", "&4You cannot use an enderchest while in a dungeon!"),
|
ERROR_ENDERCHEST("Error_Enderchest", "&4You cannot use an enderchest while in a dungeon!"),
|
||||||
ERROR_IN_GROUP("Error_InGroup", "&4The player &6&v1&4 is already member of a group."),
|
ERROR_IN_GROUP("Error_InGroup", "&4The player &6&v1&4 is already member of a group."),
|
||||||
ERROR_JOIN_GROUP("Error_JoinGroup", "&4You have to join a group first!"),
|
ERROR_JOIN_GROUP("Error_JoinGroup", "&4You have to join a group first!"),
|
||||||
ERROR_LEAVE_DUNGEON("Error_LeaveDungeon", "&4You have to leave your current dungeon first!"),
|
ERROR_LEAVE_DUNGEON("Error_LeaveDungeon", "&4You have to leave your current dungeon first!"),
|
||||||
ERROR_LEAVE_GAME("Error_LeaveGame", "&4You have to leave your current game first!"),
|
ERROR_LEAVE_GAME("Error_LeaveGame", "&4You have to leave your current game first!"),
|
||||||
ERROR_LEAVE_GROUP("Error_LeaveGroup", "&4You have to leave your group first!"),
|
ERROR_LEAVE_GROUP("Error_LeaveGroup", "&4You have to leave your group first!"),
|
||||||
ERROR_LEFT_CLICK("Error_Leftklick", "&4You have to use Left-Click on this sign!"),
|
|
||||||
ERROR_MSG_ID_NOT_EXIST("Error_MsgIdNotExist", "&4Messages with Id &6&v1&4 does not exist!"),
|
ERROR_MSG_ID_NOT_EXIST("Error_MsgIdNotExist", "&4Messages with Id &6&v1&4 does not exist!"),
|
||||||
ERROR_MSG_FORMAT("Error_MsgFormat", "&4The Messages has to be between \"!"),
|
ERROR_MSG_FORMAT("Error_MsgFormat", "&4The Messages has to be between \"!"),
|
||||||
ERROR_MSG_NO_INT("Error_MsgNoInt", "&4The argument [id] has to include a number!"),
|
ERROR_MSG_NO_INT("Error_MsgNoInt", "&4The argument [id] has to include a number!"),
|
||||||
@ -139,16 +138,18 @@ public enum DMessages implements Messages {
|
|||||||
PLAYER_CHECKPOINT_REACHED("Player_CheckpointReached", "&6Checkpoint reached!"),
|
PLAYER_CHECKPOINT_REACHED("Player_CheckpointReached", "&6Checkpoint reached!"),
|
||||||
PLAYER_DEATH("Player_Death", "&6You died, lives left: &2&v1"),
|
PLAYER_DEATH("Player_Death", "&6You died, lives left: &2&v1"),
|
||||||
PLAYER_DEATH_KICK("Player_DeathKick", "&2&v1&6 died and lost his last life."),
|
PLAYER_DEATH_KICK("Player_DeathKick", "&2&v1&6 died and lost his last life."),
|
||||||
PLAYER_FINISHED_DUNGEON("Player_FinishedDungeon", "&6You successfully finished the Dungeon!"),
|
PLAYER_FINISHED_DUNGEON("Player_FinishedDungeon", "&6You successfully finished the dungeon!"),
|
||||||
PLAYER_INVITED("Player_Invited", "&4&v1&6 invited you to the group &4&v2&6."),
|
PLAYER_INVITED("Player_Invited", "&4&v1&6 invited you to the group &4&v2&6."),
|
||||||
PLAYER_UNINVITED("Player_Uninvited", "&4&v1&6 took back your invitation to the group &4&v2&6."),
|
PLAYER_UNINVITED("Player_Uninvited", "&4&v1&6 took back your invitation to the group &4&v2&6."),
|
||||||
PLAYER_JOIN_GROUP("Player_JoinGroup", "&6You successfully joined the group!"),
|
PLAYER_JOIN_GROUP("Player_JoinGroup", "&6You successfully joined the group!"),
|
||||||
PLAYER_KICKED("Player_Kicked", "&4You have been kicked out of the group &6&v1&4."),
|
PLAYER_KICKED("Player_Kicked", "&4You have been kicked out of the group &6&v1&4."),
|
||||||
PLAYER_LEAVE_GROUP("Player_LeaveGroup", "&6You have successfully left your group!"),
|
PLAYER_LEAVE_GROUP("Player_LeaveGroup", "&6You have successfully left your group!"),
|
||||||
PLAYER_LEFT_GROUP("Player_LeftGroup", "&6Player &4&v1&6 has left the Group!"),
|
PLAYER_LEFT_GROUP("Player_LeftGroup", "&6Player &4&v1&6 has left the Group!"),
|
||||||
|
PLAYER_LIVES_ADDED("Player_LivesAdded", "&6Received a bonus of &4&v1&6 lives."),
|
||||||
|
PLAYER_LIVES_REMOVED("Player_LivesRemoved", "&6You lost &4&v1&6 lives!"),
|
||||||
PLAYER_LOOT_ADDED("Player_LootAdded", "&4&v1&6 have been added to your reward inventory!"),
|
PLAYER_LOOT_ADDED("Player_LootAdded", "&4&v1&6 have been added to your reward inventory!"),
|
||||||
PLAYER_NEW_CAPTAIN("Player_NewCaptain", "&6You are now the new captain of your group."),
|
PLAYER_NEW_CAPTAIN("Player_NewCaptain", "&6You are now the new captain of your group."),
|
||||||
PLAYER_OFFLINE("Player_Offline", "&Player &4&v1&6 went offline. In &4&v2&6 seconds he will autmatically be kicked from the Dungeon!"),
|
PLAYER_OFFLINE("Player_Offline", "&Player &4&v1&6 went offline. In &4&v2&6 seconds he will autmatically be kicked from the dungeon!"),
|
||||||
PLAYER_OFFLINE_NEVER("Player_OfflineNever", "&6The player &4&v1&6 went offline. He will &4not&6 be kicked from the dungeon automatically!"),
|
PLAYER_OFFLINE_NEVER("Player_OfflineNever", "&6The player &4&v1&6 went offline. He will &4not&6 be kicked from the dungeon automatically!"),
|
||||||
PLAYER_PORTAL_ABORT("Player_PortalAbort", "&6Portal creation cancelled!"),
|
PLAYER_PORTAL_ABORT("Player_PortalAbort", "&6Portal creation cancelled!"),
|
||||||
PLAYER_PORTAL_INTRODUCTION("Player_PortalIntroduction", "&6Click the two edges of the portal with the wooden sword!"),
|
PLAYER_PORTAL_INTRODUCTION("Player_PortalIntroduction", "&6Click the two edges of the portal with the wooden sword!"),
|
||||||
|
@ -26,7 +26,9 @@ import io.github.dre2n.dungeonsxl.game.GameType;
|
|||||||
import io.github.dre2n.dungeonsxl.requirement.FeeLevelRequirement;
|
import io.github.dre2n.dungeonsxl.requirement.FeeLevelRequirement;
|
||||||
import io.github.dre2n.dungeonsxl.requirement.FeeMoneyRequirement;
|
import io.github.dre2n.dungeonsxl.requirement.FeeMoneyRequirement;
|
||||||
import io.github.dre2n.dungeonsxl.requirement.GroupSizeRequirement;
|
import io.github.dre2n.dungeonsxl.requirement.GroupSizeRequirement;
|
||||||
|
import io.github.dre2n.dungeonsxl.requirement.PermissionRequirement;
|
||||||
import io.github.dre2n.dungeonsxl.requirement.Requirement;
|
import io.github.dre2n.dungeonsxl.requirement.Requirement;
|
||||||
|
import io.github.dre2n.dungeonsxl.requirement.RequirementTypeDefault;
|
||||||
import io.github.dre2n.dungeonsxl.util.DeserialisazionUtil;
|
import io.github.dre2n.dungeonsxl.util.DeserialisazionUtil;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -190,15 +192,18 @@ public class WorldConfig extends GameRules {
|
|||||||
Requirement requirement = Requirement.create(plugin.getRequirementTypes().getByIdentifier(identifier));
|
Requirement requirement = Requirement.create(plugin.getRequirementTypes().getByIdentifier(identifier));
|
||||||
|
|
||||||
// Check for built-in requirements
|
// Check for built-in requirements
|
||||||
if (requirement instanceof FeeMoneyRequirement) {
|
if (requirement.getType() == RequirementTypeDefault.FEE_MONEY) {
|
||||||
((FeeMoneyRequirement) requirement).setFee(configFile.getDouble("requirements.feeMoney"));
|
((FeeMoneyRequirement) requirement).setFee(configFile.getDouble("requirements.feeMoney"));
|
||||||
|
|
||||||
} else if (requirement instanceof FeeLevelRequirement) {
|
} else if (requirement.getType() == RequirementTypeDefault.FEE_LEVEL) {
|
||||||
((FeeLevelRequirement) requirement).setFee(configFile.getInt("requirements.feeLevel"));
|
((FeeLevelRequirement) requirement).setFee(configFile.getInt("requirements.feeLevel"));
|
||||||
|
|
||||||
} else if (requirement instanceof GroupSizeRequirement) {
|
} else if (requirement.getType() == RequirementTypeDefault.GROUP_SIZE) {
|
||||||
((GroupSizeRequirement) requirement).setMinimum(configFile.getInt("requirements.groupSize.minimum"));
|
((GroupSizeRequirement) requirement).setMinimum(configFile.getInt("requirements.groupSize.minimum"));
|
||||||
((GroupSizeRequirement) requirement).setMaximum(configFile.getInt("requirements.groupSize.maximum"));
|
((GroupSizeRequirement) requirement).setMaximum(configFile.getInt("requirements.groupSize.maximum"));
|
||||||
|
|
||||||
|
} else if (requirement.getType() == RequirementTypeDefault.PERMISSION) {
|
||||||
|
((PermissionRequirement) requirement).setPermissions(configFile.getStringList("requirements.permission"));
|
||||||
}
|
}
|
||||||
|
|
||||||
requirements.add(requirement);
|
requirements.add(requirement);
|
||||||
|
@ -40,21 +40,14 @@ public class Dungeons {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the dungeons
|
|
||||||
*/
|
|
||||||
public List<Dungeon> getDungeons() {
|
|
||||||
return dungeons;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param name
|
* @param name
|
||||||
* the name of the Dungeon
|
* the name of the Dungeon
|
||||||
* @return the Dungeon that has the name
|
* @return the Dungeon that has the name
|
||||||
*/
|
*/
|
||||||
public Dungeon getDungeon(String name) {
|
public Dungeon getByName(String name) {
|
||||||
for (Dungeon dungeon : dungeons) {
|
for (Dungeon dungeon : dungeons) {
|
||||||
if (dungeon.getName().equals(name)) {
|
if (dungeon.getName().equalsIgnoreCase(name)) {
|
||||||
return dungeon;
|
return dungeon;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -62,6 +55,13 @@ public class Dungeons {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the dungeons
|
||||||
|
*/
|
||||||
|
public List<Dungeon> getDungeons() {
|
||||||
|
return dungeons;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param name
|
* @param name
|
||||||
* the name of the Dungeon
|
* the name of the Dungeon
|
||||||
|
@ -48,7 +48,7 @@ public class Game {
|
|||||||
|
|
||||||
private List<DGroup> dGroups = new ArrayList<>();
|
private List<DGroup> dGroups = new ArrayList<>();
|
||||||
private boolean started;
|
private boolean started;
|
||||||
private GameType type;
|
private GameType type = GameTypeDefault.DEFAULT;
|
||||||
private GameWorld world;
|
private GameWorld world;
|
||||||
private GameRules rules;
|
private GameRules rules;
|
||||||
private int waveCount;
|
private int waveCount;
|
||||||
@ -381,7 +381,7 @@ public class Game {
|
|||||||
public void run() {
|
public void run() {
|
||||||
if (teleport) {
|
if (teleport) {
|
||||||
for (Player player : getPlayers()) {
|
for (Player player : getPlayers()) {
|
||||||
PlayerUtil.secureTeleport(player, world.getStartLocation());
|
PlayerUtil.secureTeleport(player, world.getStartLocation(DGroup.getByPlayer(player)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -185,13 +185,13 @@ public class DPortal extends GlobalProtection {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (target == null) {
|
if (target == null && dGroup.getMapName() != null) {
|
||||||
target = new GameWorld(dGroup.getMapName());
|
target = new GameWorld(dGroup.getMapName());
|
||||||
dGroup.setGameWorld(target);
|
dGroup.setGameWorld(target);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (target == null) {
|
if (target == null) {
|
||||||
MessageUtil.sendMessage(player, DMessages.ERROR_DUNGEON_NOT_EXIST.getMessage(DGroup.getByPlayer(player).getMapName()));
|
MessageUtil.sendMessage(player, DMessages.ERROR_DUNGEON_NOT_EXIST.getMessage());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@ public class GameSign extends GlobalProtection {
|
|||||||
this.setMultiFloor(multiFloor);
|
this.setMultiFloor(multiFloor);
|
||||||
if (multiFloor) {
|
if (multiFloor) {
|
||||||
dungeonName = identifier;
|
dungeonName = identifier;
|
||||||
Dungeon dungeon = plugin.getDungeons().getDungeon(identifier);
|
Dungeon dungeon = plugin.getDungeons().getByName(identifier);
|
||||||
if (dungeon != null) {
|
if (dungeon != null) {
|
||||||
mapName = dungeon.getConfig().getStartFloor();
|
mapName = dungeon.getConfig().getStartFloor();
|
||||||
} else {
|
} else {
|
||||||
@ -511,6 +511,8 @@ public class GameSign extends GlobalProtection {
|
|||||||
|
|
||||||
if (topSign.getLine(0).equals(NEW_GAME)) {
|
if (topSign.getLine(0).equals(NEW_GAME)) {
|
||||||
Game game = new Game(dGroup);
|
Game game = new Game(dGroup);
|
||||||
|
dGroup.setDungeonName(gameSign.dungeonName);
|
||||||
|
dGroup.setMapName(gameSign.mapName);
|
||||||
gameSign.games[column] = game;
|
gameSign.games[column] = game;
|
||||||
gameSign.update();
|
gameSign.update();
|
||||||
|
|
||||||
|
@ -62,7 +62,7 @@ public class GroupSign extends GlobalProtection {
|
|||||||
this.setMultiFloor(multiFloor);
|
this.setMultiFloor(multiFloor);
|
||||||
if (multiFloor) {
|
if (multiFloor) {
|
||||||
dungeonName = identifier;
|
dungeonName = identifier;
|
||||||
Dungeon dungeon = plugin.getDungeons().getDungeon(identifier);
|
Dungeon dungeon = plugin.getDungeons().getByName(identifier);
|
||||||
if (dungeon != null) {
|
if (dungeon != null) {
|
||||||
mapName = dungeon.getConfig().getStartFloor();
|
mapName = dungeon.getConfig().getStartFloor();
|
||||||
} else {
|
} else {
|
||||||
|
@ -22,7 +22,6 @@ import io.github.dre2n.dungeonsxl.config.DMessages;
|
|||||||
import io.github.dre2n.dungeonsxl.config.MainConfig;
|
import io.github.dre2n.dungeonsxl.config.MainConfig;
|
||||||
import io.github.dre2n.dungeonsxl.event.dgroup.DGroupCreateEvent;
|
import io.github.dre2n.dungeonsxl.event.dgroup.DGroupCreateEvent;
|
||||||
import io.github.dre2n.dungeonsxl.event.dplayer.DPlayerDeathEvent;
|
import io.github.dre2n.dungeonsxl.event.dplayer.DPlayerDeathEvent;
|
||||||
import io.github.dre2n.dungeonsxl.event.dplayer.DPlayerKickEvent;
|
|
||||||
import io.github.dre2n.dungeonsxl.game.Game;
|
import io.github.dre2n.dungeonsxl.game.Game;
|
||||||
import io.github.dre2n.dungeonsxl.global.DPortal;
|
import io.github.dre2n.dungeonsxl.global.DPortal;
|
||||||
import io.github.dre2n.dungeonsxl.global.GameSign;
|
import io.github.dre2n.dungeonsxl.global.GameSign;
|
||||||
@ -39,6 +38,7 @@ import io.github.dre2n.dungeonsxl.player.DPlayers;
|
|||||||
import io.github.dre2n.dungeonsxl.player.DSavePlayer;
|
import io.github.dre2n.dungeonsxl.player.DSavePlayer;
|
||||||
import io.github.dre2n.dungeonsxl.reward.DLootInventory;
|
import io.github.dre2n.dungeonsxl.reward.DLootInventory;
|
||||||
import io.github.dre2n.dungeonsxl.reward.RewardChest;
|
import io.github.dre2n.dungeonsxl.reward.RewardChest;
|
||||||
|
import io.github.dre2n.dungeonsxl.sign.OpenDoorSign;
|
||||||
import io.github.dre2n.dungeonsxl.task.RespawnTask;
|
import io.github.dre2n.dungeonsxl.task.RespawnTask;
|
||||||
import io.github.dre2n.dungeonsxl.trigger.InteractTrigger;
|
import io.github.dre2n.dungeonsxl.trigger.InteractTrigger;
|
||||||
import io.github.dre2n.dungeonsxl.trigger.UseItemTrigger;
|
import io.github.dre2n.dungeonsxl.trigger.UseItemTrigger;
|
||||||
@ -133,16 +133,7 @@ public class PlayerListener implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (dPlayer.getLives() == 0 && dPlayer.isReady()) {
|
if (dPlayer.getLives() == 0 && dPlayer.isReady()) {
|
||||||
DPlayerKickEvent dPlayerKickEvent = new DPlayerKickEvent(dPlayer, DPlayerKickEvent.Cause.DEATH);
|
dPlayer.kill();
|
||||||
plugin.getServer().getPluginManager().callEvent(dPlayerKickEvent);
|
|
||||||
|
|
||||||
if (!dPlayerKickEvent.isCancelled()) {
|
|
||||||
MessageUtil.broadcastMessage(DMessages.PLAYER_DEATH_KICK.getMessage(player.getName()));
|
|
||||||
dPlayer.leave();
|
|
||||||
if (game.getRules().getKeepInventoryOnEscape()) {
|
|
||||||
dPlayer.applyRespawnInventory();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -234,7 +225,6 @@ public class PlayerListener implements Listener {
|
|||||||
GameWorld gameWorld = GameWorld.getByWorld(player.getWorld());
|
GameWorld gameWorld = GameWorld.getByWorld(player.getWorld());
|
||||||
if (gameWorld != null) {
|
if (gameWorld != null) {
|
||||||
if (event.getAction() == Action.RIGHT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_AIR) {
|
if (event.getAction() == Action.RIGHT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_AIR) {
|
||||||
if (UseItemTrigger.hasTriggers(gameWorld)) {
|
|
||||||
String name = null;
|
String name = null;
|
||||||
if (item.hasItemMeta()) {
|
if (item.hasItemMeta()) {
|
||||||
if (item.getItemMeta().hasDisplayName()) {
|
if (item.getItemMeta().hasDisplayName()) {
|
||||||
@ -252,14 +242,13 @@ public class PlayerListener implements Listener {
|
|||||||
if (name == null) {
|
if (name == null) {
|
||||||
name = item.getType().toString();
|
name = item.getType().toString();
|
||||||
}
|
}
|
||||||
UseItemTrigger trigger = UseItemTrigger.get(name, gameWorld);
|
UseItemTrigger trigger = UseItemTrigger.getByName(name, gameWorld);
|
||||||
if (trigger != null) {
|
if (trigger != null) {
|
||||||
trigger.onTrigger(player);
|
trigger.onTrigger(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Check Signs
|
// Check Signs
|
||||||
if (clickedBlock != null) {
|
if (clickedBlock != null) {
|
||||||
@ -288,12 +277,10 @@ public class PlayerListener implements Listener {
|
|||||||
if (gameWorld != null) {
|
if (gameWorld != null) {
|
||||||
|
|
||||||
// Trigger InteractTrigger
|
// Trigger InteractTrigger
|
||||||
InteractTrigger trigger = InteractTrigger.get(clickedBlock, gameWorld);
|
InteractTrigger trigger = InteractTrigger.getByBlock(clickedBlock, gameWorld);
|
||||||
if (trigger != null) {
|
if (trigger != null) {
|
||||||
if (event.getAction() == Action.LEFT_CLICK_BLOCK) {
|
if (event.getAction() == Action.LEFT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_BLOCK) {
|
||||||
trigger.onTrigger(player);
|
trigger.onTrigger(player);
|
||||||
} else {
|
|
||||||
MessageUtil.sendMessage(player, DMessages.ERROR_LEFT_CLICK.getMessage());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,10 +288,8 @@ public class PlayerListener implements Listener {
|
|||||||
for (Sign classSign : gameWorld.getSignClass()) {
|
for (Sign classSign : gameWorld.getSignClass()) {
|
||||||
if (classSign != null) {
|
if (classSign != null) {
|
||||||
if (classSign.getLocation().distance(clickedBlock.getLocation()) < 1) {
|
if (classSign.getLocation().distance(clickedBlock.getLocation()) < 1) {
|
||||||
if (event.getAction() == Action.LEFT_CLICK_BLOCK) {
|
if (event.getAction() == Action.LEFT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_BLOCK) {
|
||||||
dPlayer.setDClass(ChatColor.stripColor(classSign.getLine(1)));
|
dPlayer.setDClass(ChatColor.stripColor(classSign.getLine(1)));
|
||||||
} else {
|
|
||||||
MessageUtil.sendMessage(player, DMessages.ERROR_LEFT_CLICK.getMessage());
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -312,6 +297,9 @@ public class PlayerListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} else if (OpenDoorSign.isProtected(clickedBlock)) {
|
||||||
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -398,15 +386,7 @@ public class PlayerListener implements Listener {
|
|||||||
Location respawn = gamePlayer.getCheckpoint();
|
Location respawn = gamePlayer.getCheckpoint();
|
||||||
|
|
||||||
if (respawn == null) {
|
if (respawn == null) {
|
||||||
respawn = dGroup.getGameWorld().getStartLocation();
|
respawn = dGroup.getGameWorld().getStartLocation(dGroup);
|
||||||
}
|
|
||||||
|
|
||||||
if (respawn == null) {
|
|
||||||
respawn = dGroup.getGameWorld().getLobbyLocation();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (respawn == null) {
|
|
||||||
respawn = dGroup.getGameWorld().getWorld().getSpawnLocation();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Because some plugins set another respawn point, DXL teleports a few ticks later.
|
// Because some plugins set another respawn point, DXL teleports a few ticks later.
|
||||||
|
@ -136,7 +136,7 @@ public class DMob {
|
|||||||
name = victim.getType().getName();
|
name = victim.getType().getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
MobTrigger mobTrigger = MobTrigger.get(name, gameWorld);
|
MobTrigger mobTrigger = MobTrigger.getByName(name, gameWorld);
|
||||||
if (mobTrigger != null) {
|
if (mobTrigger != null) {
|
||||||
mobTrigger.onTrigger();
|
mobTrigger.onTrigger();
|
||||||
}
|
}
|
||||||
|
@ -456,6 +456,20 @@ public class DGamePlayer extends DInstancePlayer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void kill() {
|
||||||
|
DPlayerKickEvent dPlayerKickEvent = new DPlayerKickEvent(this, DPlayerKickEvent.Cause.DEATH);
|
||||||
|
plugin.getServer().getPluginManager().callEvent(dPlayerKickEvent);
|
||||||
|
|
||||||
|
if (!dPlayerKickEvent.isCancelled()) {
|
||||||
|
MessageUtil.broadcastMessage(DMessages.PLAYER_DEATH_KICK.getMessage(player.getName()));
|
||||||
|
GameRules rules = Game.getByPlayer(player).getRules();
|
||||||
|
leave();
|
||||||
|
if (rules.getKeepInventoryOnEscape() && rules.getKeepInventoryOnDeath()) {
|
||||||
|
applyRespawnInventory();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public boolean checkRequirements(Game game) {
|
public boolean checkRequirements(Game game) {
|
||||||
if (DPermissions.hasPermission(player, DPermissions.IGNORE_REQUIREMENTS)) {
|
if (DPermissions.hasPermission(player, DPermissions.IGNORE_REQUIREMENTS)) {
|
||||||
return true;
|
return true;
|
||||||
@ -596,11 +610,7 @@ public class DGamePlayer extends DInstancePlayer {
|
|||||||
Location respawn = checkpoint;
|
Location respawn = checkpoint;
|
||||||
|
|
||||||
if (respawn == null) {
|
if (respawn == null) {
|
||||||
respawn = dGroup.getGameWorld().getStartLocation();
|
respawn = dGroup.getGameWorld().getStartLocation(dGroup);
|
||||||
}
|
|
||||||
|
|
||||||
if (respawn == null) {
|
|
||||||
respawn = dGroup.getGameWorld().getLobbyLocation();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (respawn == null) {
|
if (respawn == null) {
|
||||||
@ -693,7 +703,7 @@ public class DGamePlayer extends DInstancePlayer {
|
|||||||
for (Player player : dGroup.getPlayers()) {
|
for (Player player : dGroup.getPlayers()) {
|
||||||
DGamePlayer dPlayer = getByPlayer(player);
|
DGamePlayer dPlayer = getByPlayer(player);
|
||||||
dPlayer.setWorld(gameWorld.getWorld());
|
dPlayer.setWorld(gameWorld.getWorld());
|
||||||
dPlayer.setCheckpoint(dGroup.getGameWorld().getStartLocation());
|
dPlayer.setCheckpoint(dGroup.getGameWorld().getStartLocation(dGroup));
|
||||||
if (dPlayer.getWolf() != null) {
|
if (dPlayer.getWolf() != null) {
|
||||||
dPlayer.getWolf().teleport(dPlayer.getCheckpoint());
|
dPlayer.getWolf().teleport(dPlayer.getCheckpoint());
|
||||||
}
|
}
|
||||||
@ -816,15 +826,7 @@ public class DGamePlayer extends DInstancePlayer {
|
|||||||
teleportLocation = getCheckpoint();
|
teleportLocation = getCheckpoint();
|
||||||
|
|
||||||
if (teleportLocation == null) {
|
if (teleportLocation == null) {
|
||||||
teleportLocation = dGroup.getGameWorld().getStartLocation();
|
teleportLocation = dGroup.getGameWorld().getStartLocation(dGroup);
|
||||||
}
|
|
||||||
|
|
||||||
if (teleportLocation == null) {
|
|
||||||
teleportLocation = dGroup.getGameWorld().getLobbyLocation();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (teleportLocation == null) {
|
|
||||||
teleportLocation = getWorld().getSpawnLocation();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Don't forget Doge!
|
// Don't forget Doge!
|
||||||
|
@ -34,6 +34,7 @@ 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 io.github.dre2n.dungeonsxl.task.TimeIsRunningTask;
|
||||||
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
||||||
|
import io.github.dre2n.dungeonsxl.world.Worlds;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
@ -107,7 +108,7 @@ public class DGroup {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dungeon = plugin.getDungeons().getDungeon(identifier);
|
dungeon = plugin.getDungeons().getByName(identifier);
|
||||||
if (multiFloor && dungeon != null) {
|
if (multiFloor && dungeon != null) {
|
||||||
dungeonName = dungeon.getName();
|
dungeonName = dungeon.getName();
|
||||||
mapName = dungeon.getConfig().getStartFloor();
|
mapName = dungeon.getConfig().getStartFloor();
|
||||||
@ -376,7 +377,7 @@ public class DGroup {
|
|||||||
* the name of the dungeon
|
* the name of the dungeon
|
||||||
*/
|
*/
|
||||||
public void setDungeon(String name) {
|
public void setDungeon(String name) {
|
||||||
dungeon = plugin.getDungeons().getDungeon(name);
|
dungeon = plugin.getDungeons().getByName(name);
|
||||||
if (dungeon != null) {
|
if (dungeon != null) {
|
||||||
dungeonName = dungeon.getName();
|
dungeonName = dungeon.getName();
|
||||||
mapName = dungeon.getConfig().getStartFloor();
|
mapName = dungeon.getConfig().getStartFloor();
|
||||||
@ -396,12 +397,16 @@ public class DGroup {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Will fail if there is no dungeon with this name.
|
||||||
|
*
|
||||||
* @param dungeonName
|
* @param dungeonName
|
||||||
* the dungeonName to set
|
* the dungeonName to set
|
||||||
*/
|
*/
|
||||||
public void setDungeonName(String dungeonName) {
|
public void setDungeonName(String dungeonName) {
|
||||||
|
if (plugin.getDungeons().getByName(name) != null) {
|
||||||
this.dungeonName = dungeonName;
|
this.dungeonName = dungeonName;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return if the group is playing
|
* @return if the group is playing
|
||||||
@ -411,12 +416,16 @@ public class DGroup {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Will fail if there is no resource world with this name.
|
||||||
|
*
|
||||||
* @param name
|
* @param name
|
||||||
* the name to set
|
* the name to set
|
||||||
*/
|
*/
|
||||||
public void setMapName(String name) {
|
public void setMapName(String name) {
|
||||||
|
if (Worlds.exists(name)) {
|
||||||
mapName = name;
|
mapName = name;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the unplayedFloors
|
* @return the unplayedFloors
|
||||||
|
@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2012-2016 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 io.github.dre2n.dungeonsxl.requirement;
|
||||||
|
|
||||||
|
import io.github.dre2n.dungeonsxl.player.DPermissions;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Daniel Saukel
|
||||||
|
*/
|
||||||
|
public class PermissionRequirement extends Requirement {
|
||||||
|
|
||||||
|
private RequirementType type = RequirementTypeDefault.PERMISSION;
|
||||||
|
|
||||||
|
private List<String> permissions = new ArrayList<>();
|
||||||
|
|
||||||
|
/* Getters and setters */
|
||||||
|
/**
|
||||||
|
* @return the permission the player must have to play the dungeon
|
||||||
|
*/
|
||||||
|
public List<String> getPermissions() {
|
||||||
|
return permissions;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param permissions
|
||||||
|
* the permissions to set
|
||||||
|
*/
|
||||||
|
public void setPermissions(List<String> permissions) {
|
||||||
|
this.permissions = permissions;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RequirementType getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Actions */
|
||||||
|
@Override
|
||||||
|
public boolean check(Player player) {
|
||||||
|
for (String permission : permissions) {
|
||||||
|
if (!DPermissions.hasPermission(player, permission)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void demand(Player player) {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -23,7 +23,8 @@ public enum RequirementTypeDefault implements RequirementType {
|
|||||||
|
|
||||||
FEE_LEVEL("feeLevel", FeeLevelRequirement.class),
|
FEE_LEVEL("feeLevel", FeeLevelRequirement.class),
|
||||||
FEE_MONEY("feeMoney", FeeMoneyRequirement.class),
|
FEE_MONEY("feeMoney", FeeMoneyRequirement.class),
|
||||||
GROUP_SIZE("groupSize", GroupSizeRequirement.class);
|
GROUP_SIZE("groupSize", GroupSizeRequirement.class),
|
||||||
|
PERMISSION("permission", PermissionRequirement.class);
|
||||||
|
|
||||||
private String identifier;
|
private String identifier;
|
||||||
private Class<? extends Requirement> handler;
|
private Class<? extends Requirement> handler;
|
||||||
|
@ -29,16 +29,20 @@ public enum DSignTypeDefault implements DSignType {
|
|||||||
CHUNK_UPDATER("ChunkUpdater", "chunkupdater", true, ChunkUpdaterSign.class),
|
CHUNK_UPDATER("ChunkUpdater", "chunkupdater", true, ChunkUpdaterSign.class),
|
||||||
CLASSES("Classes", "classes", true, ClassesSign.class),
|
CLASSES("Classes", "classes", true, ClassesSign.class),
|
||||||
COMMAND("CMD", "cmd", false, CommandSign.class),
|
COMMAND("CMD", "cmd", false, CommandSign.class),
|
||||||
|
DROP("Drop", "drop", false, DropSign.class),
|
||||||
END("End", "end", false, EndSign.class),
|
END("End", "end", false, EndSign.class),
|
||||||
EXTERNAL_MOB("ExternalMob", "mob", false, ExternalMobSign.class),
|
EXTERNAL_MOB("ExternalMob", "mob", false, ExternalMobSign.class),
|
||||||
FLOOR("Floor", "floor", false, FloorSign.class),
|
FLOOR("Floor", "floor", false, FloorSign.class),
|
||||||
|
HOLOGRAM("Hologram", "hologram", true, HologramSign.class),
|
||||||
INTERACT("Interact", "interact", true, InteractSign.class),
|
INTERACT("Interact", "interact", true, InteractSign.class),
|
||||||
LEAVE("Leave", "leave", true, LeaveSign.class),
|
LEAVE("Leave", "leave", true, LeaveSign.class),
|
||||||
|
LIVES_MODIFIER("Lives", "lives", false, LivesModifierSign.class),
|
||||||
LOBBY("Lobby", "lobby", true, LobbySign.class),
|
LOBBY("Lobby", "lobby", true, LobbySign.class),
|
||||||
MOB("Mob", "mob", false, DMobSign.class),
|
MOB("Mob", "mob", false, DMobSign.class),
|
||||||
MESSAGE("MSG", "msg", false, MessageSign.class),
|
MESSAGE("MSG", "msg", false, MessageSign.class),
|
||||||
@Deprecated
|
@Deprecated
|
||||||
MYTHIC_MOBS("MythicMobs", "mob", false, ExternalMobSign.class),
|
MYTHIC_MOBS("MythicMobs", "mob", false, ExternalMobSign.class),
|
||||||
|
OPEN_DOOR("Door", "door", false, OpenDoorSign.class),
|
||||||
PLACE("Place", "place", false, PlaceSign.class),
|
PLACE("Place", "place", false, PlaceSign.class),
|
||||||
READY("Ready", "ready", true, ReadySign.class),
|
READY("Ready", "ready", true, ReadySign.class),
|
||||||
REDSTONE("Redstone", "redstone", false, RedstoneSign.class),
|
REDSTONE("Redstone", "redstone", false, RedstoneSign.class),
|
||||||
|
95
src/main/java/io/github/dre2n/dungeonsxl/sign/DropSign.java
Normal file
95
src/main/java/io/github/dre2n/dungeonsxl/sign/DropSign.java
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2012-2016 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 io.github.dre2n.dungeonsxl.sign;
|
||||||
|
|
||||||
|
import io.github.dre2n.caliburn.item.UniversalItem;
|
||||||
|
import io.github.dre2n.commons.util.NumberUtil;
|
||||||
|
import io.github.dre2n.dungeonsxl.task.DropItemTask;
|
||||||
|
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.Sign;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Frank Baumann, Milan Albrecht, Daniel Saukel
|
||||||
|
*/
|
||||||
|
public class DropSign extends DSign {
|
||||||
|
|
||||||
|
private DSignType type = DSignTypeDefault.DROP;
|
||||||
|
|
||||||
|
private ItemStack item;
|
||||||
|
private double interval = -1;
|
||||||
|
|
||||||
|
public DropSign(Sign sign, String[] lines, GameWorld gameWorld) {
|
||||||
|
super(sign, lines, gameWorld);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Getters and setters */
|
||||||
|
/**
|
||||||
|
* @return the item
|
||||||
|
*/
|
||||||
|
public ItemStack getItem() {
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param item
|
||||||
|
* the item to set
|
||||||
|
*/
|
||||||
|
public void setItem(ItemStack item) {
|
||||||
|
this.item = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Actions */
|
||||||
|
@Override
|
||||||
|
public boolean check() {
|
||||||
|
return plugin.getCaliburnAPI().getItems().getById(lines[1]) != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onInit() {
|
||||||
|
UniversalItem item = plugin.getCaliburnAPI().getItems().getById(lines[1]);
|
||||||
|
|
||||||
|
String[] attributes = lines[2].split(",");
|
||||||
|
if (attributes.length >= 1) {
|
||||||
|
this.item = item.toItemStack(NumberUtil.parseInt(attributes[0], 1));
|
||||||
|
}
|
||||||
|
if (attributes.length == 2) {
|
||||||
|
interval = NumberUtil.parseDouble(attributes[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
getSign().getBlock().setType(Material.AIR);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onTrigger() {
|
||||||
|
Location spawnLocation = getSign().getLocation().add(0.5, 0, 0.5);
|
||||||
|
if (interval < 0) {
|
||||||
|
getSign().getWorld().dropItem(spawnLocation, item);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
new DropItemTask(item, spawnLocation).runTaskTimer(plugin, 0, (long) interval * 20);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DSignType getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,95 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2012-2016 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 io.github.dre2n.dungeonsxl.sign;
|
||||||
|
|
||||||
|
import com.gmail.filoghost.holographicdisplays.api.Hologram;
|
||||||
|
import com.gmail.filoghost.holographicdisplays.api.HologramsAPI;
|
||||||
|
import io.github.dre2n.caliburn.item.UniversalItem;
|
||||||
|
import io.github.dre2n.commons.compatibility.CompatibilityHandler;
|
||||||
|
import io.github.dre2n.commons.compatibility.Version;
|
||||||
|
import io.github.dre2n.commons.util.EnumUtil;
|
||||||
|
import io.github.dre2n.commons.util.NumberUtil;
|
||||||
|
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.Sign;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Daniel Saukel
|
||||||
|
*/
|
||||||
|
public class HologramSign extends DSign {
|
||||||
|
|
||||||
|
private DSignType type = DSignTypeDefault.HOLOGRAM;
|
||||||
|
|
||||||
|
private Hologram hologram;
|
||||||
|
|
||||||
|
public HologramSign(Sign sign, String[] lines, GameWorld gameWorld) {
|
||||||
|
super(sign, lines, gameWorld);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean check() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public void onInit() {
|
||||||
|
getSign().getBlock().setType(Material.AIR);
|
||||||
|
|
||||||
|
String[] holoLines = lines[1].split("/");
|
||||||
|
Location location = getSign().getLocation();
|
||||||
|
location = location.add(0.5, NumberUtil.parseDouble(lines[2]), 0.5);
|
||||||
|
|
||||||
|
hologram = HologramsAPI.createHologram(plugin, location);
|
||||||
|
for (String line : holoLines) {
|
||||||
|
if (line.startsWith("Item:")) {
|
||||||
|
String id = line.replace("Item:", "");
|
||||||
|
ItemStack item = null;
|
||||||
|
|
||||||
|
if (Version.andHigher(Version.MC1_9).contains(CompatibilityHandler.getInstance().getVersion())) {
|
||||||
|
UniversalItem universalItem = plugin.getCaliburnAPI().getItems().getById(id);
|
||||||
|
if (universalItem != null) {
|
||||||
|
item = universalItem.toItemStack(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item == null) {
|
||||||
|
if (EnumUtil.isValidEnum(Material.class, id)) {
|
||||||
|
item = new ItemStack(Material.valueOf(id));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
item = new ItemStack(NumberUtil.parseInt(id, 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hologram.appendItemLine(item);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
hologram.appendTextLine(ChatColor.translateAlternateColorCodes('&', line));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DSignType getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,127 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2012-2016 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 io.github.dre2n.dungeonsxl.sign;
|
||||||
|
|
||||||
|
import io.github.dre2n.commons.util.EnumUtil;
|
||||||
|
import io.github.dre2n.commons.util.NumberUtil;
|
||||||
|
import io.github.dre2n.commons.util.messageutil.MessageUtil;
|
||||||
|
import io.github.dre2n.dungeonsxl.config.DMessages;
|
||||||
|
import io.github.dre2n.dungeonsxl.game.Game;
|
||||||
|
import io.github.dre2n.dungeonsxl.player.DGamePlayer;
|
||||||
|
import io.github.dre2n.dungeonsxl.player.DGroup;
|
||||||
|
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.Sign;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Frank Baumann, Milan Albrecht, Daniel Saukel
|
||||||
|
*/
|
||||||
|
public class LivesModifierSign extends DSign {
|
||||||
|
|
||||||
|
public enum Target {
|
||||||
|
GAME,
|
||||||
|
GROUP,
|
||||||
|
PLAYER,
|
||||||
|
}
|
||||||
|
|
||||||
|
private DSignType type = DSignTypeDefault.LIVES_MODIFIER;
|
||||||
|
|
||||||
|
private int lives;
|
||||||
|
private Target target;
|
||||||
|
|
||||||
|
public LivesModifierSign(Sign sign, String[] lines, GameWorld gameWorld) {
|
||||||
|
super(sign, lines, gameWorld);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Getters and setters */
|
||||||
|
/**
|
||||||
|
* @return the lives to add / remove
|
||||||
|
*/
|
||||||
|
public int getLives() {
|
||||||
|
return lives;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param lives
|
||||||
|
* the lives to add / remove
|
||||||
|
*/
|
||||||
|
public void setLives(int lives) {
|
||||||
|
this.lives = lives;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Actions */
|
||||||
|
@Override
|
||||||
|
public boolean check() {
|
||||||
|
return NumberUtil.parseInt(lines[1]) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onInit() {
|
||||||
|
lives = NumberUtil.parseInt(lines[1]);
|
||||||
|
if (EnumUtil.isValidEnum(Target.class, lines[2].toUpperCase())) {
|
||||||
|
target = Target.valueOf(lines[2].toUpperCase());
|
||||||
|
}
|
||||||
|
|
||||||
|
getSign().getBlock().setType(Material.AIR);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onPlayerTrigger(Player player) {
|
||||||
|
switch (target) {
|
||||||
|
case GAME:
|
||||||
|
for (Player gamePlayer : Game.getByPlayer(player).getPlayers()) {
|
||||||
|
DGamePlayer dPlayer = DGamePlayer.getByPlayer(player);
|
||||||
|
if (gamePlayer != null) {
|
||||||
|
modifyLives(dPlayer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GROUP:
|
||||||
|
for (DGamePlayer dPlayer : DGroup.getByPlayer(player).getDGamePlayers()) {
|
||||||
|
modifyLives(dPlayer);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PLAYER:
|
||||||
|
modifyLives(DGamePlayer.getByPlayer(player));
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void modifyLives(DGamePlayer dPlayer) {
|
||||||
|
dPlayer.setLives(dPlayer.getLives() + lives);
|
||||||
|
if (lives > 0) {
|
||||||
|
MessageUtil.sendMessage(dPlayer.getPlayer(), DMessages.PLAYER_LIVES_ADDED.getMessage(String.valueOf(lives)));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
MessageUtil.sendMessage(dPlayer.getPlayer(), DMessages.PLAYER_LIVES_REMOVED.getMessage(String.valueOf(-1 * lives)));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dPlayer.getLives() <= 0) {
|
||||||
|
dPlayer.kill();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DSignType getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
112
src/main/java/io/github/dre2n/dungeonsxl/sign/OpenDoorSign.java
Normal file
112
src/main/java/io/github/dre2n/dungeonsxl/sign/OpenDoorSign.java
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2012-2016 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 io.github.dre2n.dungeonsxl.sign;
|
||||||
|
|
||||||
|
import io.github.dre2n.commons.util.BlockUtil;
|
||||||
|
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.block.BlockFace;
|
||||||
|
import org.bukkit.block.Sign;
|
||||||
|
import org.bukkit.material.Door;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Daniel Saukel
|
||||||
|
*/
|
||||||
|
public class OpenDoorSign extends DSign {
|
||||||
|
|
||||||
|
private DSignType type = DSignTypeDefault.OPEN_DOOR;
|
||||||
|
|
||||||
|
private Block block;
|
||||||
|
|
||||||
|
public OpenDoorSign(Sign sign, String[] lines, GameWorld gameWorld) {
|
||||||
|
super(sign, lines, gameWorld);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Getters and setters */
|
||||||
|
/**
|
||||||
|
* @return the door to open;
|
||||||
|
*/
|
||||||
|
public Block getBlock() {
|
||||||
|
return block;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param block
|
||||||
|
* the door to open
|
||||||
|
*/
|
||||||
|
public void setBlock(Block block) {
|
||||||
|
this.block = block;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DSignType getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Actions */
|
||||||
|
@Override
|
||||||
|
public boolean check() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onInit() {
|
||||||
|
Block block = BlockUtil.getAttachedBlock(getSign().getBlock());
|
||||||
|
if (block.getState().getData() instanceof Door) {
|
||||||
|
if (block.getRelative(BlockFace.DOWN).getType() == block.getType()) {
|
||||||
|
this.block = block.getRelative(BlockFace.DOWN);
|
||||||
|
} else {
|
||||||
|
this.block = block;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getSign().getBlock().setType(Material.AIR);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onTrigger() {
|
||||||
|
if (block != null) {
|
||||||
|
((Door) block.getState().getData()).setOpen(true);
|
||||||
|
block.getState().update(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Statics */
|
||||||
|
/**
|
||||||
|
* @param block
|
||||||
|
* the block to check
|
||||||
|
* @return
|
||||||
|
* true if the block is openable only with a sign
|
||||||
|
*/
|
||||||
|
public static boolean isProtected(Block block) {
|
||||||
|
GameWorld gameWorld = GameWorld.getByWorld(block.getWorld());
|
||||||
|
if (gameWorld != null) {
|
||||||
|
for (DSign dSign : gameWorld.getDSigns(DSignTypeDefault.OPEN_DOOR)) {
|
||||||
|
Block signBlock1 = ((OpenDoorSign) dSign).getBlock();
|
||||||
|
Block signBlock2 = signBlock1.getRelative(BlockFace.UP);
|
||||||
|
if (block.equals(signBlock1) || block.equals(signBlock2)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -16,19 +16,21 @@
|
|||||||
*/
|
*/
|
||||||
package io.github.dre2n.dungeonsxl.sign;
|
package io.github.dre2n.dungeonsxl.sign;
|
||||||
|
|
||||||
|
import io.github.dre2n.commons.util.NumberUtil;
|
||||||
import io.github.dre2n.commons.util.messageutil.MessageUtil;
|
import io.github.dre2n.commons.util.messageutil.MessageUtil;
|
||||||
import io.github.dre2n.dungeonsxl.config.DMessages;
|
import io.github.dre2n.dungeonsxl.config.DMessages;
|
||||||
import io.github.dre2n.dungeonsxl.game.Game;
|
|
||||||
import io.github.dre2n.dungeonsxl.game.GameType;
|
import io.github.dre2n.dungeonsxl.game.GameType;
|
||||||
import io.github.dre2n.dungeonsxl.game.GameTypeDefault;
|
import io.github.dre2n.dungeonsxl.game.GameTypeDefault;
|
||||||
import io.github.dre2n.dungeonsxl.player.DGamePlayer;
|
import io.github.dre2n.dungeonsxl.player.DGamePlayer;
|
||||||
import io.github.dre2n.dungeonsxl.player.DGroup;
|
import io.github.dre2n.dungeonsxl.player.DGroup;
|
||||||
import io.github.dre2n.dungeonsxl.trigger.InteractTrigger;
|
import io.github.dre2n.dungeonsxl.trigger.InteractTrigger;
|
||||||
|
import io.github.dre2n.dungeonsxl.util.ProgressBar;
|
||||||
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Frank Baumann, Milan Albrecht, Daniel Saukel
|
* @author Frank Baumann, Milan Albrecht, Daniel Saukel
|
||||||
@ -38,6 +40,8 @@ public class ReadySign extends DSign {
|
|||||||
private DSignType type = DSignTypeDefault.READY;
|
private DSignType type = DSignTypeDefault.READY;
|
||||||
|
|
||||||
private GameType gameType;
|
private GameType gameType;
|
||||||
|
private double autoStart = -1;
|
||||||
|
private boolean triggered = false;
|
||||||
|
|
||||||
public ReadySign(Sign sign, String[] lines, GameWorld gameWorld) {
|
public ReadySign(Sign sign, String[] lines, GameWorld gameWorld) {
|
||||||
super(sign, lines, gameWorld);
|
super(sign, lines, gameWorld);
|
||||||
@ -58,6 +62,21 @@ public class ReadySign extends DSign {
|
|||||||
this.gameType = gameType;
|
this.gameType = gameType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the time until the game starts automatically; -1 for no auto start
|
||||||
|
*/
|
||||||
|
public double getTimeToAutoStart() {
|
||||||
|
return autoStart;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param time
|
||||||
|
* the time in seconds until the game starts automatically; -1 for no auto start
|
||||||
|
*/
|
||||||
|
public void setTimeToAutoStart(double time) {
|
||||||
|
autoStart = time;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean check() {
|
public boolean check() {
|
||||||
return true;
|
return true;
|
||||||
@ -72,6 +91,10 @@ public class ReadySign extends DSign {
|
|||||||
gameType = GameTypeDefault.DEFAULT;
|
gameType = GameTypeDefault.DEFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!lines[2].isEmpty()) {
|
||||||
|
autoStart = NumberUtil.parseDouble(lines[2], -1);
|
||||||
|
}
|
||||||
|
|
||||||
if (!getTriggers().isEmpty()) {
|
if (!getTriggers().isEmpty()) {
|
||||||
getSign().getBlock().setType(Material.AIR);
|
getSign().getBlock().setType(Material.AIR);
|
||||||
return;
|
return;
|
||||||
@ -93,15 +116,33 @@ public class ReadySign extends DSign {
|
|||||||
@Override
|
@Override
|
||||||
public boolean onPlayerTrigger(Player player) {
|
public boolean onPlayerTrigger(Player player) {
|
||||||
ready(DGamePlayer.getByPlayer(player));
|
ready(DGamePlayer.getByPlayer(player));
|
||||||
|
|
||||||
|
if (!triggered && autoStart >= 0) {
|
||||||
|
triggered = true;
|
||||||
|
|
||||||
|
new BukkitRunnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
onTrigger();
|
||||||
|
}
|
||||||
|
}.runTaskLater(plugin, (long) (autoStart * 20));
|
||||||
|
|
||||||
|
if (!DGroup.getByPlayer(player).isPlaying()) {
|
||||||
|
ProgressBar.sendProgressBar(getGame().getPlayers(), (int) Math.ceil(autoStart));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onTrigger() {
|
public void onTrigger() {
|
||||||
for (DGroup dGroup : Game.getByGameWorld(getGameWorld()).getDGroups()) {
|
if (getGame() == null) {
|
||||||
for (Player player : dGroup.getPlayers()) {
|
return;
|
||||||
ready(DGamePlayer.getByPlayer(player));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (Player player : getGame().getPlayers()) {
|
||||||
|
ready(DGamePlayer.getByPlayer(player));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
*/
|
*/
|
||||||
package io.github.dre2n.dungeonsxl.sign;
|
package io.github.dre2n.dungeonsxl.sign;
|
||||||
|
|
||||||
|
import io.github.dre2n.commons.util.NumberUtil;
|
||||||
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
@ -27,10 +28,29 @@ public class StartSign extends DSign {
|
|||||||
|
|
||||||
private DSignType type = DSignTypeDefault.START;
|
private DSignType type = DSignTypeDefault.START;
|
||||||
|
|
||||||
|
private int id;
|
||||||
|
|
||||||
public StartSign(Sign sign, String[] lines, GameWorld gameWorld) {
|
public StartSign(Sign sign, String[] lines, GameWorld gameWorld) {
|
||||||
super(sign, lines, gameWorld);
|
super(sign, lines, gameWorld);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Getters and setters */
|
||||||
|
/**
|
||||||
|
* @return the ID
|
||||||
|
*/
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param id
|
||||||
|
* the ID to set
|
||||||
|
*/
|
||||||
|
public void setId(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Actions */
|
||||||
@Override
|
@Override
|
||||||
public boolean check() {
|
public boolean check() {
|
||||||
return true;
|
return true;
|
||||||
@ -38,7 +58,7 @@ public class StartSign extends DSign {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onInit() {
|
public void onInit() {
|
||||||
getGameWorld().setStartLocation(getSign().getLocation());
|
id = NumberUtil.parseInt(lines[1]);
|
||||||
getSign().getBlock().setType(Material.AIR);
|
getSign().getBlock().setType(Material.AIR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ public class TriggerSign extends DSign {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SignTrigger trigger = SignTrigger.get(triggerId, getGameWorld());
|
SignTrigger trigger = SignTrigger.getById(triggerId, getGameWorld());
|
||||||
if (trigger != null) {
|
if (trigger != null) {
|
||||||
trigger.onTrigger(true);
|
trigger.onTrigger(true);
|
||||||
}
|
}
|
||||||
@ -112,7 +112,7 @@ public class TriggerSign extends DSign {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SignTrigger trigger = SignTrigger.get(triggerId, getGameWorld());
|
SignTrigger trigger = SignTrigger.getById(triggerId, getGameWorld());
|
||||||
if (trigger != null) {
|
if (trigger != null) {
|
||||||
trigger.onTrigger(false);
|
trigger.onTrigger(false);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2012-2016 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 io.github.dre2n.dungeonsxl.task;
|
||||||
|
|
||||||
|
import io.github.dre2n.dungeonsxl.DungeonsXL;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Frank Baumann, Daniel Saukel
|
||||||
|
*/
|
||||||
|
public class DropItemTask extends BukkitRunnable {
|
||||||
|
|
||||||
|
DungeonsXL plugin = DungeonsXL.getInstance();
|
||||||
|
|
||||||
|
private ItemStack item;
|
||||||
|
private Location location;
|
||||||
|
|
||||||
|
public DropItemTask(ItemStack item, Location location) {
|
||||||
|
this.item = item;
|
||||||
|
this.location = location;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
location.getWorld().dropItem(location, item);
|
||||||
|
} catch (NullPointerException exception) {
|
||||||
|
cancel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -18,9 +18,6 @@ package io.github.dre2n.dungeonsxl.trigger;
|
|||||||
|
|
||||||
import io.github.dre2n.dungeonsxl.event.trigger.TriggerActionEvent;
|
import io.github.dre2n.dungeonsxl.event.trigger.TriggerActionEvent;
|
||||||
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@ -29,8 +26,6 @@ import org.bukkit.entity.Player;
|
|||||||
*/
|
*/
|
||||||
public class DistanceTrigger extends Trigger {
|
public class DistanceTrigger extends Trigger {
|
||||||
|
|
||||||
private static Map<GameWorld, ArrayList<DistanceTrigger>> triggers = new HashMap<>();
|
|
||||||
|
|
||||||
private TriggerType type = TriggerTypeDefault.DISTANCE;
|
private TriggerType type = TriggerTypeDefault.DISTANCE;
|
||||||
|
|
||||||
private int distance = 5;
|
private int distance = 5;
|
||||||
@ -60,56 +55,23 @@ public class DistanceTrigger extends Trigger {
|
|||||||
updateDSigns();
|
updateDSigns();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void register(GameWorld gameWorld) {
|
|
||||||
if (!hasTriggers(gameWorld)) {
|
|
||||||
ArrayList<DistanceTrigger> list = new ArrayList<>();
|
|
||||||
list.add(this);
|
|
||||||
triggers.put(gameWorld, list);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
triggers.get(gameWorld).add(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void unregister(GameWorld gameWorld) {
|
|
||||||
if (hasTriggers(gameWorld)) {
|
|
||||||
triggers.get(gameWorld).remove(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TriggerType getType() {
|
public TriggerType getType() {
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Statics */
|
||||||
public static void triggerAllInDistance(Player player, GameWorld gameWorld) {
|
public static void triggerAllInDistance(Player player, GameWorld gameWorld) {
|
||||||
if (!hasTriggers(gameWorld)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!player.getLocation().getWorld().equals(gameWorld.getWorld())) {
|
if (!player.getLocation().getWorld().equals(gameWorld.getWorld())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (DistanceTrigger trigger : getTriggersArray(gameWorld)) {
|
for (Trigger uncasted : gameWorld.getTriggers(TriggerTypeDefault.DISTANCE)) {
|
||||||
|
DistanceTrigger trigger = (DistanceTrigger) uncasted;
|
||||||
if (player.getLocation().distance(trigger.loc) < trigger.distance) {
|
if (player.getLocation().distance(trigger.loc) < trigger.distance) {
|
||||||
trigger.onTrigger(player);
|
trigger.onTrigger(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean hasTriggers(GameWorld gameWorld) {
|
|
||||||
return !triggers.isEmpty() && triggers.containsKey(gameWorld);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ArrayList<DistanceTrigger> getTriggers(GameWorld gameWorld) {
|
|
||||||
return triggers.get(gameWorld);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static DistanceTrigger[] getTriggersArray(GameWorld gameWorld) {
|
|
||||||
return getTriggers(gameWorld).toArray(new DistanceTrigger[getTriggers(gameWorld).size()]);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -18,9 +18,6 @@ package io.github.dre2n.dungeonsxl.trigger;
|
|||||||
|
|
||||||
import io.github.dre2n.dungeonsxl.event.trigger.TriggerActionEvent;
|
import io.github.dre2n.dungeonsxl.event.trigger.TriggerActionEvent;
|
||||||
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@ -29,8 +26,6 @@ import org.bukkit.entity.Player;
|
|||||||
*/
|
*/
|
||||||
public class InteractTrigger extends Trigger {
|
public class InteractTrigger extends Trigger {
|
||||||
|
|
||||||
private static Map<GameWorld, ArrayList<InteractTrigger>> triggers = new HashMap<>();
|
|
||||||
|
|
||||||
private TriggerType type = TriggerTypeDefault.INTERACT;
|
private TriggerType type = TriggerTypeDefault.INTERACT;
|
||||||
|
|
||||||
private int interactId;
|
private int interactId;
|
||||||
@ -54,35 +49,17 @@ public class InteractTrigger extends Trigger {
|
|||||||
updateDSigns();
|
updateDSigns();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void register(GameWorld gameWorld) {
|
|
||||||
if (!hasTriggers(gameWorld)) {
|
|
||||||
ArrayList<InteractTrigger> list = new ArrayList<>();
|
|
||||||
list.add(this);
|
|
||||||
triggers.put(gameWorld, list);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
triggers.get(gameWorld).add(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void unregister(GameWorld gameWorld) {
|
|
||||||
if (hasTriggers(gameWorld)) {
|
|
||||||
triggers.get(gameWorld).remove(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TriggerType getType() {
|
public TriggerType getType() {
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Statics */
|
||||||
public static InteractTrigger getOrCreate(int id, GameWorld gameWorld) {
|
public static InteractTrigger getOrCreate(int id, GameWorld gameWorld) {
|
||||||
if (id == 0) {
|
if (id == 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
InteractTrigger trigger = get(id, gameWorld);
|
InteractTrigger trigger = getById(id, gameWorld);
|
||||||
if (trigger != null) {
|
if (trigger != null) {
|
||||||
return trigger;
|
return trigger;
|
||||||
}
|
}
|
||||||
@ -90,7 +67,7 @@ public class InteractTrigger extends Trigger {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static InteractTrigger getOrCreate(int id, Block block, GameWorld gameWorld) {
|
public static InteractTrigger getOrCreate(int id, Block block, GameWorld gameWorld) {
|
||||||
InteractTrigger trigger = get(id, gameWorld);
|
InteractTrigger trigger = getById(id, gameWorld);
|
||||||
if (trigger != null) {
|
if (trigger != null) {
|
||||||
trigger.interactBlock = block;
|
trigger.interactBlock = block;
|
||||||
return trigger;
|
return trigger;
|
||||||
@ -98,34 +75,28 @@ public class InteractTrigger extends Trigger {
|
|||||||
return new InteractTrigger(id, block);
|
return new InteractTrigger(id, block);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static InteractTrigger get(Block block, GameWorld gameWorld) {
|
public static InteractTrigger getByBlock(Block block, GameWorld gameWorld) {
|
||||||
if (hasTriggers(gameWorld)) {
|
for (Trigger uncasted : gameWorld.getTriggers(TriggerTypeDefault.INTERACT)) {
|
||||||
for (InteractTrigger trigger : triggers.get(gameWorld)) {
|
InteractTrigger trigger = (InteractTrigger) uncasted;
|
||||||
if (trigger.interactBlock != null) {
|
if (trigger.interactBlock != null) {
|
||||||
if (trigger.interactBlock.equals(block)) {
|
if (trigger.interactBlock.equals(block)) {
|
||||||
return trigger;
|
return trigger;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static InteractTrigger get(int id, GameWorld gameWorld) {
|
public static InteractTrigger getById(int id, GameWorld gameWorld) {
|
||||||
if (id != 0) {
|
if (id != 0) {
|
||||||
if (hasTriggers(gameWorld)) {
|
for (Trigger uncasted : gameWorld.getTriggers(TriggerTypeDefault.INTERACT)) {
|
||||||
for (InteractTrigger trigger : triggers.get(gameWorld)) {
|
InteractTrigger trigger = (InteractTrigger) uncasted;
|
||||||
if (trigger.interactId == id) {
|
if (trigger.interactId == id) {
|
||||||
return trigger;
|
return trigger;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean hasTriggers(GameWorld gameWorld) {
|
|
||||||
return !triggers.isEmpty() && triggers.containsKey(gameWorld);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -18,17 +18,12 @@ package io.github.dre2n.dungeonsxl.trigger;
|
|||||||
|
|
||||||
import io.github.dre2n.dungeonsxl.event.trigger.TriggerActionEvent;
|
import io.github.dre2n.dungeonsxl.event.trigger.TriggerActionEvent;
|
||||||
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Frank Baumann, Daniel Saukel
|
* @author Frank Baumann, Daniel Saukel
|
||||||
*/
|
*/
|
||||||
public class MobTrigger extends Trigger {
|
public class MobTrigger extends Trigger {
|
||||||
|
|
||||||
private static Map<GameWorld, ArrayList<MobTrigger>> triggers = new HashMap<>();
|
|
||||||
|
|
||||||
private TriggerType type = TriggerTypeDefault.MOB;
|
private TriggerType type = TriggerTypeDefault.MOB;
|
||||||
|
|
||||||
private String name;
|
private String name;
|
||||||
@ -49,51 +44,28 @@ public class MobTrigger extends Trigger {
|
|||||||
updateDSigns();
|
updateDSigns();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void register(GameWorld gameWorld) {
|
|
||||||
if (!hasTriggers(gameWorld)) {
|
|
||||||
ArrayList<MobTrigger> list = new ArrayList<>();
|
|
||||||
list.add(this);
|
|
||||||
triggers.put(gameWorld, list);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
triggers.get(gameWorld).add(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void unregister(GameWorld gameWorld) {
|
|
||||||
if (hasTriggers(gameWorld)) {
|
|
||||||
triggers.get(gameWorld).remove(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TriggerType getType() {
|
public TriggerType getType() {
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Statics */
|
||||||
public static MobTrigger getOrCreate(String name, GameWorld gameWorld) {
|
public static MobTrigger getOrCreate(String name, GameWorld gameWorld) {
|
||||||
MobTrigger trigger = get(name, gameWorld);
|
MobTrigger trigger = getByName(name, gameWorld);
|
||||||
if (trigger != null) {
|
if (trigger != null) {
|
||||||
return trigger;
|
return trigger;
|
||||||
}
|
}
|
||||||
return new MobTrigger(name);
|
return new MobTrigger(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static MobTrigger get(String name, GameWorld gameWorld) {
|
public static MobTrigger getByName(String name, GameWorld gameWorld) {
|
||||||
if (hasTriggers(gameWorld)) {
|
for (Trigger uncasted : gameWorld.getTriggers(TriggerTypeDefault.MOB)) {
|
||||||
for (MobTrigger trigger : triggers.get(gameWorld)) {
|
MobTrigger trigger = (MobTrigger) uncasted;
|
||||||
if (trigger.name.equalsIgnoreCase(name)) {
|
if (trigger.name.equalsIgnoreCase(name)) {
|
||||||
return trigger;
|
return trigger;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean hasTriggers(GameWorld gameWorld) {
|
|
||||||
return !triggers.isEmpty() && triggers.containsKey(gameWorld);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -18,10 +18,7 @@ package io.github.dre2n.dungeonsxl.trigger;
|
|||||||
|
|
||||||
import io.github.dre2n.dungeonsxl.event.trigger.TriggerActionEvent;
|
import io.github.dre2n.dungeonsxl.event.trigger.TriggerActionEvent;
|
||||||
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -29,8 +26,6 @@ import java.util.Set;
|
|||||||
*/
|
*/
|
||||||
public class ProgressTrigger extends Trigger {
|
public class ProgressTrigger extends Trigger {
|
||||||
|
|
||||||
private static Map<GameWorld, ArrayList<ProgressTrigger>> triggers = new HashMap<>();
|
|
||||||
|
|
||||||
private TriggerType type = TriggerTypeDefault.PROGRESS;
|
private TriggerType type = TriggerTypeDefault.PROGRESS;
|
||||||
|
|
||||||
private String floor;
|
private String floor;
|
||||||
@ -105,30 +100,12 @@ public class ProgressTrigger extends Trigger {
|
|||||||
updateDSigns();
|
updateDSigns();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void register(GameWorld gameWorld) {
|
|
||||||
if (!hasTriggers(gameWorld)) {
|
|
||||||
ArrayList<ProgressTrigger> list = new ArrayList<>();
|
|
||||||
list.add(this);
|
|
||||||
triggers.put(gameWorld, list);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
triggers.get(gameWorld).add(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void unregister(GameWorld gameWorld) {
|
|
||||||
if (hasTriggers(gameWorld)) {
|
|
||||||
triggers.get(gameWorld).remove(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TriggerType getType() {
|
public TriggerType getType() {
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Statics */
|
||||||
public static ProgressTrigger getOrCreate(int floorCount, int waveCount, GameWorld gameWorld) {
|
public static ProgressTrigger getOrCreate(int floorCount, int waveCount, GameWorld gameWorld) {
|
||||||
if (floorCount == 0 & waveCount == 0 || floorCount < 0 || waveCount < 0) {
|
if (floorCount == 0 & waveCount == 0 || floorCount < 0 || waveCount < 0) {
|
||||||
return null;
|
return null;
|
||||||
@ -142,14 +119,10 @@ public class ProgressTrigger extends Trigger {
|
|||||||
|
|
||||||
public static Set<ProgressTrigger> getByGameWorld(GameWorld gameWorld) {
|
public static Set<ProgressTrigger> getByGameWorld(GameWorld gameWorld) {
|
||||||
Set<ProgressTrigger> toReturn = new HashSet<>();
|
Set<ProgressTrigger> toReturn = new HashSet<>();
|
||||||
for (ProgressTrigger trigger : triggers.get(gameWorld)) {
|
for (Trigger trigger : gameWorld.getTriggers(TriggerTypeDefault.PROGRESS)) {
|
||||||
toReturn.add(trigger);
|
toReturn.add((ProgressTrigger) trigger);
|
||||||
}
|
}
|
||||||
return toReturn;
|
return toReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean hasTriggers(GameWorld gameWorld) {
|
|
||||||
return !triggers.isEmpty() && triggers.containsKey(gameWorld);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -18,9 +18,6 @@ package io.github.dre2n.dungeonsxl.trigger;
|
|||||||
|
|
||||||
import io.github.dre2n.dungeonsxl.event.trigger.TriggerActionEvent;
|
import io.github.dre2n.dungeonsxl.event.trigger.TriggerActionEvent;
|
||||||
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
@ -31,8 +28,6 @@ import org.bukkit.block.Sign;
|
|||||||
*/
|
*/
|
||||||
public class RedstoneTrigger extends Trigger {
|
public class RedstoneTrigger extends Trigger {
|
||||||
|
|
||||||
private static Map<GameWorld, ArrayList<RedstoneTrigger>> triggers = new HashMap<>();
|
|
||||||
|
|
||||||
private TriggerType type = TriggerTypeDefault.REDSTONE;
|
private TriggerType type = TriggerTypeDefault.REDSTONE;
|
||||||
|
|
||||||
private Block rtBlock;
|
private Block rtBlock;
|
||||||
@ -61,30 +56,12 @@ public class RedstoneTrigger extends Trigger {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void register(GameWorld gameWorld) {
|
|
||||||
if (!hasTriggers(gameWorld)) {
|
|
||||||
ArrayList<RedstoneTrigger> list = new ArrayList<>();
|
|
||||||
list.add(this);
|
|
||||||
triggers.put(gameWorld, list);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
triggers.get(gameWorld).add(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void unregister(GameWorld gameWorld) {
|
|
||||||
if (hasTriggers(gameWorld)) {
|
|
||||||
triggers.get(gameWorld).remove(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TriggerType getType() {
|
public TriggerType getType() {
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Statics */
|
||||||
public static RedstoneTrigger getOrCreate(Sign sign, GameWorld gameWorld) {
|
public static RedstoneTrigger getOrCreate(Sign sign, GameWorld gameWorld) {
|
||||||
Block rtBlock = null;
|
Block rtBlock = null;
|
||||||
if (sign.getBlock().getType() == Material.WALL_SIGN) {
|
if (sign.getBlock().getType() == Material.WALL_SIGN) {
|
||||||
@ -108,36 +85,21 @@ public class RedstoneTrigger extends Trigger {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (rtBlock != null) {
|
if (rtBlock != null) {
|
||||||
if (hasTriggers(gameWorld)) {
|
for (Trigger uncasted : gameWorld.getTriggers(TriggerTypeDefault.REDSTONE)) {
|
||||||
for (RedstoneTrigger trigger : getTriggers(gameWorld)) {
|
RedstoneTrigger trigger = (RedstoneTrigger) uncasted;
|
||||||
if (trigger.rtBlock.equals(rtBlock)) {
|
if (trigger.rtBlock.equals(rtBlock)) {
|
||||||
return trigger;
|
return trigger;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return new RedstoneTrigger(rtBlock);
|
return new RedstoneTrigger(rtBlock);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void updateAll(GameWorld gameWorld) {
|
public static void updateAll(GameWorld gameWorld) {
|
||||||
if (hasTriggers(gameWorld)) {
|
for (Trigger trigger : gameWorld.getTriggers(TriggerTypeDefault.REDSTONE)) {
|
||||||
for (RedstoneTrigger trigger : getTriggersArray(gameWorld)) {
|
((RedstoneTrigger) trigger).onTrigger();
|
||||||
trigger.onTrigger();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean hasTriggers(GameWorld gameWorld) {
|
|
||||||
return !triggers.isEmpty() && triggers.containsKey(gameWorld);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ArrayList<RedstoneTrigger> getTriggers(GameWorld gameWorld) {
|
|
||||||
return triggers.get(gameWorld);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static RedstoneTrigger[] getTriggersArray(GameWorld gameWorld) {
|
|
||||||
return getTriggers(gameWorld).toArray(new RedstoneTrigger[getTriggers(gameWorld).size()]);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -18,17 +18,12 @@ package io.github.dre2n.dungeonsxl.trigger;
|
|||||||
|
|
||||||
import io.github.dre2n.dungeonsxl.event.trigger.TriggerActionEvent;
|
import io.github.dre2n.dungeonsxl.event.trigger.TriggerActionEvent;
|
||||||
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Frank Baumann, Daniel Saukel
|
* @author Frank Baumann, Daniel Saukel
|
||||||
*/
|
*/
|
||||||
public class SignTrigger extends Trigger {
|
public class SignTrigger extends Trigger {
|
||||||
|
|
||||||
private static Map<GameWorld, ArrayList<SignTrigger>> triggers = new HashMap<>();
|
|
||||||
|
|
||||||
private TriggerType type = TriggerTypeDefault.SIGN;
|
private TriggerType type = TriggerTypeDefault.SIGN;
|
||||||
|
|
||||||
private int stId;
|
private int stId;
|
||||||
@ -51,51 +46,28 @@ public class SignTrigger extends Trigger {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void register(GameWorld gameWorld) {
|
|
||||||
if (!hasTriggers(gameWorld)) {
|
|
||||||
ArrayList<SignTrigger> list = new ArrayList<>();
|
|
||||||
list.add(this);
|
|
||||||
triggers.put(gameWorld, list);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
triggers.get(gameWorld).add(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void unregister(GameWorld gameWorld) {
|
|
||||||
if (hasTriggers(gameWorld)) {
|
|
||||||
triggers.get(gameWorld).remove(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TriggerType getType() {
|
public TriggerType getType() {
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Statics */
|
||||||
public static SignTrigger getOrCreate(int id, GameWorld gameWorld) {
|
public static SignTrigger getOrCreate(int id, GameWorld gameWorld) {
|
||||||
SignTrigger trigger = get(id, gameWorld);
|
SignTrigger trigger = getById(id, gameWorld);
|
||||||
if (trigger != null) {
|
if (trigger != null) {
|
||||||
return trigger;
|
return trigger;
|
||||||
}
|
}
|
||||||
return new SignTrigger(id);
|
return new SignTrigger(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SignTrigger get(int id, GameWorld gameWorld) {
|
public static SignTrigger getById(int id, GameWorld gameWorld) {
|
||||||
if (hasTriggers(gameWorld)) {
|
for (Trigger uncasted : gameWorld.getTriggers(TriggerTypeDefault.SIGN)) {
|
||||||
for (SignTrigger trigger : triggers.get(gameWorld)) {
|
SignTrigger trigger = (SignTrigger) uncasted;
|
||||||
if (trigger.stId == id) {
|
if (trigger.stId == id) {
|
||||||
return trigger;
|
return trigger;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean hasTriggers(GameWorld gameWorld) {
|
|
||||||
return !triggers.isEmpty() && triggers.containsKey(gameWorld);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -113,6 +113,14 @@ public abstract class Trigger {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void register(GameWorld gameWorld) {
|
||||||
|
gameWorld.addTrigger(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unregister(GameWorld gameWorld) {
|
||||||
|
gameWorld.removeTrigger(this);
|
||||||
|
}
|
||||||
|
|
||||||
public static Trigger getOrCreate(String identifier, String value, DSign dSign) {
|
public static Trigger getOrCreate(String identifier, String value, DSign dSign) {
|
||||||
TriggerType type = plugin.getTriggers().getByIdentifier(identifier);
|
TriggerType type = plugin.getTriggers().getByIdentifier(identifier);
|
||||||
Trigger trigger = null;
|
Trigger trigger = null;
|
||||||
@ -199,10 +207,6 @@ public abstract class Trigger {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Abstracts */
|
/* Abstracts */
|
||||||
public abstract void register(GameWorld gameWorld);
|
|
||||||
|
|
||||||
public abstract void unregister(GameWorld gameWorld);
|
|
||||||
|
|
||||||
public abstract TriggerType getType();
|
public abstract TriggerType getType();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -18,9 +18,6 @@ package io.github.dre2n.dungeonsxl.trigger;
|
|||||||
|
|
||||||
import io.github.dre2n.dungeonsxl.event.trigger.TriggerActionEvent;
|
import io.github.dre2n.dungeonsxl.event.trigger.TriggerActionEvent;
|
||||||
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@ -29,8 +26,6 @@ import org.bukkit.entity.Player;
|
|||||||
*/
|
*/
|
||||||
public class UseItemTrigger extends Trigger {
|
public class UseItemTrigger extends Trigger {
|
||||||
|
|
||||||
private static Map<GameWorld, ArrayList<UseItemTrigger>> triggers = new HashMap<>();
|
|
||||||
|
|
||||||
private TriggerType type = TriggerTypeDefault.USE_ITEM;
|
private TriggerType type = TriggerTypeDefault.USE_ITEM;
|
||||||
|
|
||||||
private String name;
|
private String name;
|
||||||
@ -57,40 +52,23 @@ public class UseItemTrigger extends Trigger {
|
|||||||
updateDSigns();
|
updateDSigns();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void register(GameWorld gameWorld) {
|
|
||||||
if (!hasTriggers(gameWorld)) {
|
|
||||||
ArrayList<UseItemTrigger> list = new ArrayList<>();
|
|
||||||
list.add(this);
|
|
||||||
triggers.put(gameWorld, list);
|
|
||||||
} else {
|
|
||||||
triggers.get(gameWorld).add(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void unregister(GameWorld gameWorld) {
|
|
||||||
if (hasTriggers(gameWorld)) {
|
|
||||||
triggers.get(gameWorld).remove(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TriggerType getType() {
|
public TriggerType getType() {
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Statics */
|
||||||
public static UseItemTrigger getOrCreate(String name, GameWorld gameWorld) {
|
public static UseItemTrigger getOrCreate(String name, GameWorld gameWorld) {
|
||||||
UseItemTrigger trigger = get(name, gameWorld);
|
UseItemTrigger trigger = getByName(name, gameWorld);
|
||||||
if (trigger != null) {
|
if (trigger != null) {
|
||||||
return trigger;
|
return trigger;
|
||||||
}
|
}
|
||||||
return new UseItemTrigger(name);
|
return new UseItemTrigger(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static UseItemTrigger get(String name, GameWorld gameWorld) {
|
public static UseItemTrigger getByName(String name, GameWorld gameWorld) {
|
||||||
if (hasTriggers(gameWorld)) {
|
for (Trigger uncasted : gameWorld.getTriggers(TriggerTypeDefault.USE_ITEM)) {
|
||||||
for (UseItemTrigger trigger : triggers.get(gameWorld)) {
|
UseItemTrigger trigger = (UseItemTrigger) uncasted;
|
||||||
if (trigger.name.equalsIgnoreCase(name)) {
|
if (trigger.name.equalsIgnoreCase(name)) {
|
||||||
return trigger;
|
return trigger;
|
||||||
} else if (trigger.matchedName != null) {
|
} else if (trigger.matchedName != null) {
|
||||||
@ -99,12 +77,7 @@ public class UseItemTrigger extends Trigger {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean hasTriggers(GameWorld gameWorld) {
|
|
||||||
return !triggers.isEmpty() && triggers.containsKey(gameWorld);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -18,10 +18,7 @@ package io.github.dre2n.dungeonsxl.trigger;
|
|||||||
|
|
||||||
import io.github.dre2n.dungeonsxl.event.trigger.TriggerActionEvent;
|
import io.github.dre2n.dungeonsxl.event.trigger.TriggerActionEvent;
|
||||||
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
import io.github.dre2n.dungeonsxl.world.GameWorld;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -29,8 +26,6 @@ import java.util.Set;
|
|||||||
*/
|
*/
|
||||||
public class WaveTrigger extends Trigger {
|
public class WaveTrigger extends Trigger {
|
||||||
|
|
||||||
private static Map<GameWorld, ArrayList<WaveTrigger>> triggers = new HashMap<>();
|
|
||||||
|
|
||||||
private TriggerType type = TriggerTypeDefault.WAVE;
|
private TriggerType type = TriggerTypeDefault.WAVE;
|
||||||
|
|
||||||
private double mustKillRate = 1;
|
private double mustKillRate = 1;
|
||||||
@ -67,25 +62,6 @@ public class WaveTrigger extends Trigger {
|
|||||||
setTriggered(false);
|
setTriggered(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void register(GameWorld gameWorld) {
|
|
||||||
if (!hasTriggers(gameWorld)) {
|
|
||||||
ArrayList<WaveTrigger> list = new ArrayList<>();
|
|
||||||
list.add(this);
|
|
||||||
triggers.put(gameWorld, list);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
triggers.get(gameWorld).add(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void unregister(GameWorld gameWorld) {
|
|
||||||
if (hasTriggers(gameWorld)) {
|
|
||||||
triggers.get(gameWorld).remove(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TriggerType getType() {
|
public TriggerType getType() {
|
||||||
return type;
|
return type;
|
||||||
@ -101,17 +77,11 @@ public class WaveTrigger extends Trigger {
|
|||||||
*/
|
*/
|
||||||
public static Set<WaveTrigger> getByGameWorld(GameWorld gameWorld) {
|
public static Set<WaveTrigger> getByGameWorld(GameWorld gameWorld) {
|
||||||
Set<WaveTrigger> toReturn = new HashSet<>();
|
Set<WaveTrigger> toReturn = new HashSet<>();
|
||||||
if (triggers.get(gameWorld) != null) {
|
for (Trigger trigger : gameWorld.getTriggers()) {
|
||||||
for (WaveTrigger trigger : triggers.get(gameWorld)) {
|
toReturn.add((WaveTrigger) trigger);
|
||||||
toReturn.add(trigger);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return toReturn;
|
return toReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean hasTriggers(GameWorld gameWorld) {
|
|
||||||
return !triggers.isEmpty() && triggers.containsKey(gameWorld);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -29,13 +29,17 @@ import io.github.dre2n.dungeonsxl.game.Game;
|
|||||||
import io.github.dre2n.dungeonsxl.game.GamePlaceableBlock;
|
import io.github.dre2n.dungeonsxl.game.GamePlaceableBlock;
|
||||||
import io.github.dre2n.dungeonsxl.mob.DMob;
|
import io.github.dre2n.dungeonsxl.mob.DMob;
|
||||||
import io.github.dre2n.dungeonsxl.player.DGamePlayer;
|
import io.github.dre2n.dungeonsxl.player.DGamePlayer;
|
||||||
|
import io.github.dre2n.dungeonsxl.player.DGroup;
|
||||||
import io.github.dre2n.dungeonsxl.reward.RewardChest;
|
import io.github.dre2n.dungeonsxl.reward.RewardChest;
|
||||||
import io.github.dre2n.dungeonsxl.sign.DSign;
|
import io.github.dre2n.dungeonsxl.sign.DSign;
|
||||||
|
import io.github.dre2n.dungeonsxl.sign.DSignType;
|
||||||
|
import io.github.dre2n.dungeonsxl.sign.DSignTypeDefault;
|
||||||
import io.github.dre2n.dungeonsxl.sign.MobSign;
|
import io.github.dre2n.dungeonsxl.sign.MobSign;
|
||||||
import io.github.dre2n.dungeonsxl.trigger.MobTrigger;
|
import io.github.dre2n.dungeonsxl.sign.StartSign;
|
||||||
import io.github.dre2n.dungeonsxl.trigger.ProgressTrigger;
|
import io.github.dre2n.dungeonsxl.trigger.ProgressTrigger;
|
||||||
import io.github.dre2n.dungeonsxl.trigger.RedstoneTrigger;
|
import io.github.dre2n.dungeonsxl.trigger.RedstoneTrigger;
|
||||||
import io.github.dre2n.dungeonsxl.trigger.Trigger;
|
import io.github.dre2n.dungeonsxl.trigger.Trigger;
|
||||||
|
import io.github.dre2n.dungeonsxl.trigger.TriggerType;
|
||||||
import io.github.dre2n.dungeonsxl.trigger.TriggerTypeDefault;
|
import io.github.dre2n.dungeonsxl.trigger.TriggerTypeDefault;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
@ -72,7 +76,6 @@ public class GameWorld {
|
|||||||
private World world;
|
private World world;
|
||||||
private String mapName;
|
private String mapName;
|
||||||
private Location locLobby;
|
private Location locLobby;
|
||||||
private Location locStart;
|
|
||||||
private boolean isPlaying = false;
|
private boolean isPlaying = false;
|
||||||
private int id;
|
private int id;
|
||||||
private List<ItemStack> secureObjects = new ArrayList<>();
|
private List<ItemStack> secureObjects = new ArrayList<>();
|
||||||
@ -83,6 +86,7 @@ public class GameWorld {
|
|||||||
// TODO: Killed mobs
|
// TODO: Killed mobs
|
||||||
private CopyOnWriteArrayList<RewardChest> rewardChests = new CopyOnWriteArrayList<>();
|
private CopyOnWriteArrayList<RewardChest> rewardChests = new CopyOnWriteArrayList<>();
|
||||||
private CopyOnWriteArrayList<DSign> dSigns = new CopyOnWriteArrayList<>();
|
private CopyOnWriteArrayList<DSign> dSigns = new CopyOnWriteArrayList<>();
|
||||||
|
private CopyOnWriteArrayList<Trigger> triggers = new CopyOnWriteArrayList<>();
|
||||||
private WorldConfig worldConfig;
|
private WorldConfig worldConfig;
|
||||||
|
|
||||||
public GameWorld() {
|
public GameWorld() {
|
||||||
@ -203,16 +207,31 @@ public class GameWorld {
|
|||||||
/**
|
/**
|
||||||
* @return the start location
|
* @return the start location
|
||||||
*/
|
*/
|
||||||
public Location getStartLocation() {
|
public Location getStartLocation(DGroup dGroup) {
|
||||||
return locStart;
|
int index = getGame().getDGroups().indexOf(dGroup);
|
||||||
|
|
||||||
|
// Try the matching location
|
||||||
|
for (DSign dSign : dSigns) {
|
||||||
|
if (dSign.getType() == DSignTypeDefault.START) {
|
||||||
|
if (((StartSign) dSign).getId() == index) {
|
||||||
|
return dSign.getSign().getLocation();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// Try any location
|
||||||
* @param location
|
for (DSign dSign : dSigns) {
|
||||||
* the location to start to set
|
if (dSign.getType() == DSignTypeDefault.START) {
|
||||||
*/
|
return dSign.getSign().getLocation();
|
||||||
public void setStartLocation(Location location) {
|
}
|
||||||
this.locStart = location;
|
}
|
||||||
|
|
||||||
|
// Lobby location as fallback
|
||||||
|
if (locLobby != null) {
|
||||||
|
return locLobby;
|
||||||
|
}
|
||||||
|
|
||||||
|
return world.getSpawnLocation();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -335,6 +354,19 @@ public class GameWorld {
|
|||||||
return dSigns;
|
return dSigns;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the triggers with the type
|
||||||
|
*/
|
||||||
|
public List<DSign> getDSigns(DSignType type) {
|
||||||
|
List<DSign> dSignsOfType = new ArrayList<>();
|
||||||
|
for (DSign dSign : dSigns) {
|
||||||
|
if (dSign.getType() == type) {
|
||||||
|
dSignsOfType.add(dSign);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dSignsOfType;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param dSigns
|
* @param dSigns
|
||||||
* the dSigns to set
|
* the dSigns to set
|
||||||
@ -343,6 +375,42 @@ public class GameWorld {
|
|||||||
this.dSigns = dSigns;
|
this.dSigns = dSigns;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the triggers
|
||||||
|
*/
|
||||||
|
public CopyOnWriteArrayList<Trigger> getTriggers() {
|
||||||
|
return triggers;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the triggers with the type
|
||||||
|
*/
|
||||||
|
public List<Trigger> getTriggers(TriggerType type) {
|
||||||
|
List<Trigger> triggersOfType = new ArrayList<>();
|
||||||
|
for (Trigger trigger : triggers) {
|
||||||
|
if (trigger.getType() == type) {
|
||||||
|
triggersOfType.add(trigger);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return triggersOfType;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param trigger
|
||||||
|
* the trigger to add
|
||||||
|
*/
|
||||||
|
public void addTrigger(Trigger trigger) {
|
||||||
|
triggers.add(trigger);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param trigger
|
||||||
|
* the trigger to remove
|
||||||
|
*/
|
||||||
|
public void removeTrigger(Trigger trigger) {
|
||||||
|
triggers.remove(trigger);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the potential amount of mobs in the world
|
* @return the potential amount of mobs in the world
|
||||||
*/
|
*/
|
||||||
@ -426,11 +494,11 @@ public class GameWorld {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (RedstoneTrigger.hasTriggers(this)) {
|
|
||||||
for (RedstoneTrigger trigger : RedstoneTrigger.getTriggersArray(this)) {
|
for (Trigger trigger : getTriggers(TriggerTypeDefault.REDSTONE)) {
|
||||||
trigger.onTrigger();
|
((RedstoneTrigger) trigger).onTrigger();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (DSign dSign : dSigns) {
|
for (DSign dSign : dSigns) {
|
||||||
if (dSign != null) {
|
if (dSign != null) {
|
||||||
if (!dSign.hasTriggers()) {
|
if (!dSign.hasTriggers()) {
|
||||||
|
46
src/main/java/io/github/dre2n/dungeonsxl/world/Worlds.java
Normal file
46
src/main/java/io/github/dre2n/dungeonsxl/world/Worlds.java
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2012-2016 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 io.github.dre2n.dungeonsxl.world;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Daniel Saukel
|
||||||
|
*/
|
||||||
|
public class Worlds {
|
||||||
|
|
||||||
|
/*private Set<ResourceWorld> resourceWorlds;
|
||||||
|
|
||||||
|
public Worlds(File folder) {
|
||||||
|
for (File file : folder.listFiles()) {
|
||||||
|
resourceWorlds.add(new ResourceWorld());
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
public static boolean exists(String name) {
|
||||||
|
for (File world : io.github.dre2n.dungeonsxl.DungeonsXL.MAPS.listFiles()) {
|
||||||
|
if (world.isDirectory() && world.getName().equalsIgnoreCase(name)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -4,7 +4,7 @@ version: ${project.version}
|
|||||||
authors: [Frank Baumann, Milan Albrecht, Tobias Schmitz, Daniel Saukel]
|
authors: [Frank Baumann, Milan Albrecht, Tobias Schmitz, Daniel Saukel]
|
||||||
description: ${project.description}
|
description: ${project.description}
|
||||||
website: ${project.url}
|
website: ${project.url}
|
||||||
softdepend: [BlueRoseCommons, CommandsXL, ItemsXL, Vault, CustomMobs, InsaneMobs, MythicMobs]
|
softdepend: [BlueRoseCommons, CommandsXL, ItemsXL, Vault, CustomMobs, InsaneMobs, MythicMobs, HolographicDisplays]
|
||||||
commands:
|
commands:
|
||||||
dungeonsxl:
|
dungeonsxl:
|
||||||
description: Reference command for DungeonsXL.
|
description: Reference command for DungeonsXL.
|
||||||
|
Loading…
Reference in New Issue
Block a user