DungeonsXL/src/com/dre/dungeonsxl/EditWorld.java

270 lines
6.5 KiB
Java
Raw Normal View History

2012-09-24 16:34:45 +02:00
package com.dre.dungeonsxl;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.concurrent.CopyOnWriteArrayList;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.WorldCreator;
import org.bukkit.WorldType;
import org.bukkit.block.Block;
import org.bukkit.block.Sign;
import org.bukkit.entity.Player;
public class EditWorld {
private static P p=P.p;
2012-09-24 16:34:45 +02:00
public static CopyOnWriteArrayList<EditWorld> eworlds=new CopyOnWriteArrayList<EditWorld>();
2012-09-24 16:34:45 +02:00
//Variables
public World world;
public String owner;
public String name;
public String dungeonname;
public int id;
public Location lobby;
public CopyOnWriteArrayList<String> invitedPlayers=new CopyOnWriteArrayList<String>();
public CopyOnWriteArrayList<Block> sign=new CopyOnWriteArrayList<Block>();
2012-09-24 16:34:45 +02:00
public EditWorld(){
eworlds.add(this);
2012-09-24 16:34:45 +02:00
//ID
this.id=-1;
int i=-1;
while(this.id==-1){
i++;
boolean exist=false;
for(EditWorld eworld:eworlds){
if(eworld.id==i){
exist=true;
break;
}
}
if(!exist) this.id=i;
}
2012-09-24 16:34:45 +02:00
name="DXL_Edit_"+this.id;
}
public void generate(){
WorldCreator creator=WorldCreator.name(name);
creator.type(WorldType.FLAT);
creator.generateStructures(false);
2012-09-24 16:34:45 +02:00
this.world=p.getServer().createWorld(creator);
}
public void save(){
this.world.save();
p.copyDirectory(new File("DXL_Edit_"+this.id),new File(p.getDataFolder(),"/dungeons/"+this.dungeonname));
p.deletenotusingfiles(new File(p.getDataFolder(),"/dungeons/"+this.dungeonname));
2012-09-24 16:34:45 +02:00
try {
ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream(new File(p.getDataFolder(),"/dungeons/"+this.dungeonname+"/DXLData.data")));
2012-09-24 16:34:45 +02:00
out.writeInt(this.sign.size());
for(Block sign:this.sign){
out.writeInt(sign.getX());
out.writeInt(sign.getY());
out.writeInt(sign.getZ());
}
out.close();
2012-09-24 16:34:45 +02:00
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
2012-09-24 16:34:45 +02:00
public void checkSign(Block block){
if((block.getState() instanceof Sign)){
Sign sign = (Sign) block.getState();
String[] lines=sign.getLines();
2012-09-24 16:34:45 +02:00
if(lines[1].equalsIgnoreCase("lobby")){
this.lobby=block.getLocation();
}
}
}
2012-09-24 16:34:45 +02:00
public void delete(){
eworlds.remove(this);
for(Player player:this.world.getPlayers()){
DPlayer dplayer=DPlayer.get(player);
dplayer.leave();
}
2012-09-24 16:34:45 +02:00
p.getServer().unloadWorld(this.world,true);
File dir = new File("DXL_Edit_"+this.id);
p.removeDirectory(dir);
}
2012-09-24 16:34:45 +02:00
//Static
public static EditWorld get(World world){
for(EditWorld eworld:eworlds){
if(eworld.world.equals(world)){
return eworld;
}
}
2012-09-24 16:34:45 +02:00
return null;
}
2012-09-24 16:34:45 +02:00
public static EditWorld get(String name){
for(EditWorld eworld:eworlds){
if(eworld.name.equalsIgnoreCase(name)){
return eworld;
}
}
2012-09-24 16:34:45 +02:00
return null;
}
2012-09-24 16:34:45 +02:00
public static void deleteAll(){
for(EditWorld eworld:eworlds){
eworlds.remove(eworld);
for(Player player:eworld.world.getPlayers()){
DPlayer dplayer=DPlayer.get(player);
dplayer.leave();
}
2012-09-24 16:34:45 +02:00
p.getServer().unloadWorld(eworld.world,true);
File dir = new File("DXL_Edit_"+eworld.id);
p.removeDirectory(dir);
}
}
2012-09-24 16:34:45 +02:00
public static EditWorld load(String name){
for(EditWorld eworld:eworlds){
2012-09-24 16:34:45 +02:00
if(eworld.dungeonname.equalsIgnoreCase(name)){
return eworld;
}
}
File file=new File(p.getDataFolder(),"/dungeons/"+name);
2012-09-24 16:34:45 +02:00
if(file.exists()){
EditWorld eworld = new EditWorld();
eworld.dungeonname=name;
//World
p.copyDirectory(file,new File("DXL_Edit_"+eworld.id));
2012-09-24 16:34:45 +02:00
eworld.world=p.getServer().createWorld(WorldCreator.name("DXL_Edit_"+eworld.id));
2012-09-24 16:34:45 +02:00
try {
ObjectInputStream os=new ObjectInputStream(new FileInputStream(new File(p.getDataFolder(),"/dungeons/"+eworld.dungeonname+"/DXLData.data")));
2012-09-24 16:34:45 +02:00
int length=os.readInt();
for(int i=0; i<length; i++){
int x=os.readInt();
int y=os.readInt();
int z=os.readInt();
Block block=eworld.world.getBlockAt(x, y, z);
eworld.checkSign(block);
eworld.sign.add(block);
}
os.close();
2012-09-24 16:34:45 +02:00
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
2012-09-24 16:34:45 +02:00
return eworld;
}
2012-09-24 16:34:45 +02:00
return null;
}
2012-09-24 16:34:45 +02:00
public static boolean exist(String name){
//Cheack Loaded EditWorlds
for(EditWorld eworld:eworlds){
if(eworld.dungeonname.equalsIgnoreCase(name)){
return true;
}
}
2012-09-24 16:34:45 +02:00
//Cheack Unloaded Worlds
File file=new File(p.getDataFolder(),"/dungeons/"+name);
2012-09-24 16:34:45 +02:00
if(file.exists()){
return true;
}
2012-09-24 16:34:45 +02:00
return false;
}
public void msg(String msg) {
for(DPlayer dplayer:DPlayer.get(this.world)){
p.msg(dplayer.player, msg);
}
}
2012-09-24 16:34:45 +02:00
//Invite
public static boolean addInvitedPlayer(String eworldname,String player){
2012-09-24 16:34:45 +02:00
EditWorld eworld=EditWorld.get(eworldname);
2012-09-24 16:34:45 +02:00
if(eworld!=null){
eworld.invitedPlayers.add(player.toLowerCase());
}else{
if(exist(eworldname)){
2013-01-14 00:41:56 +01:00
DConfig config=new DConfig(new File(p.getDataFolder()+"/dungeons/"+eworldname, "config.yml"));
config.invitedPlayers.add(player.toLowerCase());
config.save();
2012-09-24 16:34:45 +02:00
return true;
}
}
2012-09-24 16:34:45 +02:00
return false;
2012-09-24 16:34:45 +02:00
}
2012-09-24 16:34:45 +02:00
public static boolean removeInvitedPlayer(String eworldname,String player){
2012-09-24 16:34:45 +02:00
EditWorld eworld=EditWorld.get(eworldname);
2012-09-24 16:34:45 +02:00
if(eworld!=null){
eworld.invitedPlayers.remove(player.toLowerCase());
}else{
if(exist(eworldname)){
2013-01-14 00:41:56 +01:00
DConfig config=new DConfig(new File(p.getDataFolder()+"/dungeons/"+eworldname, "config.yml"));
config.invitedPlayers.remove(player.toLowerCase());
config.save();
2012-09-24 16:34:45 +02:00
return true;
}
}
2012-09-24 16:34:45 +02:00
return false;
}
2012-09-24 16:34:45 +02:00
public static boolean isInvitedPlayer(String eworldname,String player){
EditWorld eworld=EditWorld.get(eworldname);
2012-09-24 16:34:45 +02:00
if(eworld!=null){
return eworld.invitedPlayers.contains(player.toLowerCase());
}else{
if(exist(eworldname)){
2013-01-14 00:41:56 +01:00
DConfig config=new DConfig(new File(p.getDataFolder()+"/dungeons/"+eworldname, "config.yml"));
return config.invitedPlayers.contains(player.toLowerCase());
2012-09-24 16:34:45 +02:00
}
}
2012-09-24 16:34:45 +02:00
return false;
2012-09-24 16:34:45 +02:00
}
}