Completed the savePlayer function

Added timeUntilKickOfflinePlayer
Added some messages
This commit is contained in:
Grafe 2013-01-24 01:56:43 +01:00
parent 5571bc5c26
commit a3c56f9d6d
9 changed files with 162 additions and 81 deletions

View File

@ -28,6 +28,8 @@ public class DConfig {
public int timeToNextPlay = 0;
public int timeToNextLoot = 0;
public int timeUntilKickOfflinePlayer = -1;
//Spout
public boolean spoutCraftOnly = false;
public String spoutTexturepackURL;
@ -53,7 +55,7 @@ public class DConfig {
Set<String> list = configSetionClasses.getKeys(false);
for (String className:list) {
String name = className;
boolean hasDog = configSetionClasses.getBoolean(className+".hasdog");
boolean hasDog = configSetionClasses.getBoolean(className+".dog");
/* Items */
List<String> items = configSetionClasses.getStringList(className+".items");
@ -131,25 +133,29 @@ public class DConfig {
}
/* Invited Players */
if(configFile.contains("invitedplayers")){
List<String> invitedplayers = configFile.getStringList("invitedplayers");
if(configFile.contains("invitedPlayers")){
List<String> invitedplayers = configFile.getStringList("invitedPlayers");
for(String i:invitedplayers){
this.invitedPlayers.add(i);
}
}
/* Lobby */
if(configFile.contains("islobbydisabled")){
isLobbyDisabled = configFile.getBoolean("islobbydisabled");
if(configFile.contains("isLobbyDisabled")){
isLobbyDisabled = configFile.getBoolean("isLobbyDisabled");
}
/* Times */
if(configFile.contains("timetonextplay")){
timeToNextPlay = configFile.getInt("timetonextplay");
if(configFile.contains("timeToNextPlay")){
timeToNextPlay = configFile.getInt("timeToNextPlay");
}
if(configFile.contains("timetonextloot")){
timeToNextLoot = configFile.getInt("timetonextloot");
if(configFile.contains("timeToNextLoot")){
timeToNextLoot = configFile.getInt("timeToNextLoot");
}
if(configFile.contains("timeUntilKickOfflinePlayer")){
timeUntilKickOfflinePlayer = configFile.getInt("timeUntilKickOfflinePlayer");
}
/* Spout */

View File

@ -66,14 +66,14 @@ public class DGSign {
if(dgroup!=null){
if(dgroup.isPlaying){
sign.setLine(0, strIsPlaying);
}else if(dgroup.players.size()>=this.maxPlayersPerGroup){
}else if(dgroup.getPlayers().size()>=this.maxPlayersPerGroup){
sign.setLine(0, strFull);
}else{
sign.setLine(0, strJoinGrp);
}
int j=1;
Sign rowSign=sign;
for(Player player:dgroup.players){
for(Player player:dgroup.getPlayers()){
if(j>3){
j=0;
rowSign=(Sign) sign.getBlock().getRelative(0, -1, 0).getState();
@ -233,13 +233,11 @@ public class DGSign {
dgsign.update();
}
}else if(topSign.getLine(0).equals(strJoinGrp)){
if(DGroup.get(player)==null){
if(!dgsign.dgroups[column].players.contains(player)){
dgsign.dgroups[column].players.add(player);
if(DGroup.get(player) == null){
dgsign.dgroups[column].addPlayer(player);
dgsign.update();
}
}
}
}
}

View File

@ -8,28 +8,46 @@ import com.dre.dungeonsxl.game.GameWorld;
public class DGroup {
public static CopyOnWriteArrayList<DGroup> dgroups=new CopyOnWriteArrayList<DGroup>();
//Variables
public CopyOnWriteArrayList<Player> players=new CopyOnWriteArrayList<Player>();
public String dungeonname;
public GameWorld gworld;
private CopyOnWriteArrayList<Player> players=new CopyOnWriteArrayList<Player>();
private String dungeonname;
private GameWorld gworld;
public boolean isPlaying;
public DGroup(Player player, String dungeonname){
dgroups.add(this);
this.players.add(player);
this.getPlayers().add(player);
this.isPlaying=false;
this.dungeonname=dungeonname;
this.setDungeonname(dungeonname);
}
public void addPlayer(Player player){
//Send message
for(Player groupPlayer : this.getPlayers()){
P.p.msg(groupPlayer,P.p.language.get("Player_JoinGroup", player.getName()));
}
//Add player
this.getPlayers().add(player);
}
public void removePlayer(Player player) {
this.players.remove(player);
this.getPlayers().remove(player);
DGSign.updatePerGroup(this);
//Send message
for(Player groupPlayer : this.getPlayers()){
P.p.msg(groupPlayer,P.p.language.get("Player_LeftGroup", player.getName()));
}
//Check group
if(this.isEmpty()){
this.remove();
}
}
public boolean isEmpty() {
return this.players.isEmpty();
return this.getPlayers().isEmpty();
}
public void remove() {
@ -39,8 +57,8 @@ public class DGroup {
public void startGame(){
this.isPlaying=true;
gworld.startGame();
for(Player player:players){
getGworld().startGame();
for(Player player:getPlayers()){
DPlayer dplayer=DPlayer.get(player);
dplayer.respawn();
}
@ -51,7 +69,7 @@ public class DGroup {
//Statics
public static DGroup get(Player player){
for(DGroup dgroup:dgroups){
if(dgroup.players.contains(player)){
if(dgroup.getPlayers().contains(player)){
return dgroup;
}
}
@ -60,7 +78,7 @@ public class DGroup {
public static DGroup get(GameWorld gworld){
for(DGroup dgroup:dgroups){
if(dgroup.gworld==gworld){
if(dgroup.getGworld()==gworld){
return dgroup;
}
}
@ -69,10 +87,36 @@ public class DGroup {
public static void leaveGroup(Player player){
for(DGroup dgroup:dgroups){
if(dgroup.players.contains(player)){
dgroup.players.remove(player);
if(dgroup.getPlayers().contains(player)){
dgroup.getPlayers().remove(player);
}
}
}
//Getters and setters
public CopyOnWriteArrayList<Player> getPlayers() {
return players;
}
public void setPlayers(CopyOnWriteArrayList<Player> players) {
this.players = players;
}
public GameWorld getGworld() {
return gworld;
}
public void setGworld(GameWorld gworld) {
this.gworld = gworld;
}
public String getDungeonname() {
return dungeonname;
}
public void setDungeonname(String dungeonname) {
this.dungeonname = dungeonname;
}
}

View File

@ -44,7 +44,7 @@ public class DPlayer {
public GameCheckpoint checkpoint;
public Wolf wolf;
public int wolfRespawnTime=30;
public int offlineTime;
public long offlineTime;
public CopyOnWriteArrayList<ItemStack> respawnInventory=new CopyOnWriteArrayList<ItemStack>();
public Inventory treasureInv = P.p.getServer().createInventory(player, 45, "Belohnungen");
@ -101,10 +101,6 @@ public class DPlayer {
}
}
public void goOffline(){
offlineTime=1;
}
public void leave(){
remove(this);
@ -120,9 +116,6 @@ public class DPlayer {
DGroup dgroup=DGroup.get(this.player);
if(dgroup!=null){
dgroup.removePlayer(this.player);
if(dgroup.isEmpty()){
dgroup.remove();
}
}
//Belohnung
@ -167,7 +160,7 @@ public class DPlayer {
int i=0;
Player groupplayer;
do{
groupplayer=dgroup.players.get(i);
groupplayer=dgroup.getPlayers().get(i);
if(groupplayer!=null){
for(ItemStack istack:this.player.getInventory()){
if(istack!=null){
@ -199,7 +192,7 @@ public class DPlayer {
DGroup dgroup=DGroup.get(this.player);
if(!dgroup.isPlaying){
if(dgroup!=null){
for(Player player:dgroup.players){
for(Player player:dgroup.getPlayers()){
DPlayer dplayer=get(player);
if(!dplayer.isReady){
return;
@ -217,7 +210,7 @@ public class DPlayer {
public void respawn(){
DGroup dgroup=DGroup.get(this.player);
if(this.checkpoint==null){
this.player.teleport(dgroup.gworld.locStart);
this.player.teleport(dgroup.getGworld().locStart);
}else{
this.player.teleport(this.checkpoint.location);
}
@ -242,7 +235,7 @@ public class DPlayer {
DGroup dgroup=DGroup.get(this.player);
if(dgroup!=null){
if(dgroup.isPlaying){
for(Player player:dgroup.players){
for(Player player:dgroup.getPlayers()){
DPlayer dplayer=get(player);
if(!dplayer.isFinished){
p.msg(this.player, p.language.get("Player_WaitForOtherPlayers"));
@ -250,7 +243,7 @@ public class DPlayer {
}
}
for(Player player:dgroup.players){
for(Player player:dgroup.getPlayers()){
DPlayer dplayer=get(player);
dplayer.leave();
}
@ -431,9 +424,9 @@ public class DPlayer {
DGroup dgroup=DGroup.get(dplayer.player);
if(dplayer.checkpoint==null){
dplayer.player.teleport(dgroup.gworld.locStart);
dplayer.player.teleport(dgroup.getGworld().locStart);
if(dplayer.wolf!=null){
dplayer.wolf.teleport(dgroup.gworld.locStart);
dplayer.wolf.teleport(dgroup.getGworld().locStart);
}
}else{
dplayer.player.teleport(dplayer.checkpoint.location);
@ -467,6 +460,13 @@ public class DPlayer {
dplayer.wolfRespawnTime--;
}
}
//Kick offline players
if(dplayer.offlineTime > 0){
if(dplayer.offlineTime < System.currentTimeMillis()){
dplayer.leave();
}
}
}
}
}

View File

@ -101,15 +101,15 @@ public class DPortal {
else if(this.type.equals("todungeon")){
DGroup dgroup=DGroup.get(player);
if(dgroup!=null){
if(dgroup.gworld==null){
dgroup.gworld=GameWorld.load(DGroup.get(player).dungeonname);
if(dgroup.getGworld()==null){
dgroup.setGworld(GameWorld.load(DGroup.get(player).getDungeonname()));
}
if(dgroup.gworld!=null){
if(dgroup.getGworld()!=null){
/* Check Spout */
boolean spoutCheck = true;
if(P.p.isSpoutEnabled){
if(dgroup.gworld.config.spoutCraftOnly){
if(dgroup.getGworld().config.spoutCraftOnly){
if(!Spout.getServer().getPlayer(player.getName()).isSpoutCraftEnabled()){
spoutCheck = false;
}
@ -118,16 +118,16 @@ public class DPortal {
/* Teleport Player */
if(spoutCheck){
if(dgroup.gworld.locLobby==null){
new DPlayer(player,dgroup.gworld.world,dgroup.gworld.world.getSpawnLocation(), false);
if(dgroup.getGworld().locLobby==null){
new DPlayer(player,dgroup.getGworld().world,dgroup.getGworld().world.getSpawnLocation(), false);
}else{
new DPlayer(player,dgroup.gworld.world,dgroup.gworld.locLobby, false);
new DPlayer(player,dgroup.getGworld().world,dgroup.getGworld().locLobby, false);
}
}else{
p.msg(player,p.language.get("Error_SpoutCraftOnly"));
}
}else{
p.msg(player,p.language.get("Error_DungeonNotExist",DGroup.get(player).dungeonname));
p.msg(player,p.language.get("Error_DungeonNotExist",DGroup.get(player).getDungeonname()));
}
}else{
p.msg(player,p.language.get("Error_NotInGroup"));

View File

@ -51,6 +51,10 @@ public class LanguageReader {
defaults.put("Player_FinishedDungeon","&6Du hast den Dungeon erfolgreich beendet!");
defaults.put("Player_WaitForOtherPlayers","&6Noch auf Mitspieler warten...");
defaults.put("Player_LeaveGroup","&6Du hast deine Gruppe erfolgreich verlassen!");
defaults.put("Player_Offline","&6Spieler &4&v1&6 ging Offline. Er wird in &4&v2&6 Sekunden automatisch aus der Instanz geworfen!");
defaults.put("Player_OfflineNever","&6Spieler &4&v1&6 ging Offline. Er wird &4nicht&6 automatisch aus der Instanz geworfen!");
defaults.put("Player_LeftGroup","&6Spieler &4&v1&6 hat die Gruppe verlassen!");
defaults.put("Player_JoinGroup","&6Spieler &4&v1&6 hat die Gruppe betreten!");
/* Cmds */
defaults.put("Cmd_Chat_DungeonChat","&6Du bist nun im Dungeon-Chat");

View File

@ -28,16 +28,16 @@ public class CMDTest extends DCommand {
if(EditWorld.exist(dungeonname)){
DGroup dgroup=new DGroup(player, dungeonname);
if(dgroup!=null){
if(dgroup.gworld==null){
dgroup.gworld=GameWorld.load(DGroup.get(player).dungeonname);
if(dgroup.getGworld()==null){
dgroup.setGworld(GameWorld.load(DGroup.get(player).getDungeonname()));
}
DPlayer newDPlayer;
if(dgroup.gworld.locLobby==null){
newDPlayer=new DPlayer(player,dgroup.gworld.world,dgroup.gworld.world.getSpawnLocation(), false);
if(dgroup.getGworld().locLobby==null){
newDPlayer=new DPlayer(player,dgroup.getGworld().world,dgroup.getGworld().world.getSpawnLocation(), false);
}else{
newDPlayer=new DPlayer(player,dgroup.gworld.world,dgroup.gworld.locLobby, false);
newDPlayer=new DPlayer(player,dgroup.getGworld().world,dgroup.getGworld().locLobby, false);
}
newDPlayer.isinTestMode=true;
}

View File

@ -32,7 +32,7 @@ public class GameChest {
public void addTreasure(DGroup dgroup){
if(dgroup!=null){
for(Player player:dgroup.players){
for(Player player:dgroup.getPlayers()){
DPlayer dplayer=DPlayer.get(player);
if(dplayer!=null){
String msg="";

View File

@ -20,6 +20,7 @@ import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerPortalEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.inventory.ItemStack;
@ -112,11 +113,10 @@ public class PlayerListener implements Listener{
DPlayer dplayer=DPlayer.get(player);
if(dplayer!=null){
//Check GameWorld Signs
GameWorld gworld=GameWorld.get(player.getWorld());
if(gworld!=null){
//Ready Sign
for(Block blockReady:gworld.blocksReady){
if(blockReady.getLocation().distance(clickedBlock.getLocation())<1){
@ -128,6 +128,8 @@ public class PlayerListener implements Listener{
}else{
p.msg(player,p.language.get("Error_Ready"));
}
}else{
dplayer.ready();
}
}
}
@ -135,7 +137,6 @@ public class PlayerListener implements Listener{
//End Sign
for(Block blockEnd:gworld.blocksEnd){
if(blockEnd.getLocation().distance(clickedBlock.getLocation())<1){
if(!dplayer.isFinished){
if(event.getAction()==Action.LEFT_CLICK_BLOCK){
dplayer.finish();
return;
@ -144,7 +145,6 @@ public class PlayerListener implements Listener{
}
}
}
}
//Leave Sign
for(Block blockLeave:gworld.blocksLeave){
@ -227,13 +227,13 @@ public class PlayerListener implements Listener{
DGroup dgroup=DGroup.get(dplayer.player);
if(dplayer.checkpoint==null){
event.setRespawnLocation(dgroup.gworld.locStart);
event.setRespawnLocation(dgroup.getGworld().locStart);
//Da einige Plugins einen anderen Respawn setzen wird ein Scheduler gestartet der den Player nach einer Sekunde teleportiert.
p.getServer().getScheduler().scheduleSyncDelayedTask(p, new RespawnRunnable(player,dgroup.gworld.locStart), 10);
p.getServer().getScheduler().scheduleSyncDelayedTask(p, new RespawnRunnable(player,dgroup.getGworld().locStart), 10);
if(dplayer.wolf!=null){
dplayer.wolf.teleport(dgroup.gworld.locStart);
dplayer.wolf.teleport(dgroup.getGworld().locStart);
}
}else{
event.setRespawnLocation(dplayer.checkpoint.location);
@ -287,6 +287,29 @@ public class PlayerListener implements Listener{
}
@EventHandler(priority = EventPriority.HIGH)
public void onPlayerQuit(PlayerQuitEvent event){
Player player = event.getPlayer();
DPlayer dPlayer = DPlayer.get(player);
if(dPlayer!=null){
//Check GameWorld
GameWorld gWorld = GameWorld.get(player.getWorld());
if(gWorld != null){
int timeUntilKickOfflinePlayer = gWorld.config.timeUntilKickOfflinePlayer;
if(timeUntilKickOfflinePlayer == 0){
dPlayer.leave();
} else if(timeUntilKickOfflinePlayer > 0){
dPlayer.msg(p.language.get("Player_Offline",dPlayer.player.getName(),""+timeUntilKickOfflinePlayer));
dPlayer.offlineTime = System.currentTimeMillis() + timeUntilKickOfflinePlayer*1000;
} else {
dPlayer.msg(p.language.get("Player_OfflineNeverKick",dPlayer.player.getName()));
}
}
}
}
@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerJoin(PlayerJoinEvent event){
Player player = event.getPlayer();
@ -294,8 +317,14 @@ public class PlayerListener implements Listener{
DPlayer dplayer = DPlayer.get(event.getPlayer().getName());
if(dplayer != null){
dplayer.player = event.getPlayer();
//Check offlineTime
dplayer.offlineTime = 0;
}
//Tutorial Mode
if(p.mainConfig.tutorialActivated){
if(DPlayer.get(player) == null){
@ -304,16 +333,16 @@ public class PlayerListener implements Listener{
if(p.mainConfig.tutorialStartGroup.equalsIgnoreCase(group)){
DGroup dgroup = new DGroup(player, p.mainConfig.tutorialDungeon);
if(dgroup.gworld == null){
dgroup.gworld = GameWorld.load(DGroup.get(player).dungeonname);
dgroup.gworld.isTutorial = true;
if(dgroup.getGworld() == null){
dgroup.setGworld(GameWorld.load(DGroup.get(player).getDungeonname()));
dgroup.getGworld().isTutorial = true;
}
if(dgroup.gworld != null){
if(dgroup.gworld.locLobby == null){
new DPlayer(player,dgroup.gworld.world,dgroup.gworld.world.getSpawnLocation(), false);
if(dgroup.getGworld() != null){
if(dgroup.getGworld().locLobby == null){
new DPlayer(player,dgroup.getGworld().world,dgroup.getGworld().world.getSpawnLocation(), false);
}else{
new DPlayer(player,dgroup.gworld.world,dgroup.gworld.locLobby, false);
new DPlayer(player,dgroup.getGworld().world,dgroup.getGworld().locLobby, false);
}
}else{
p.msg(player,p.language.get("Error_TutorialNotExist"));