package com.bioxx.jmapgen.dungeon; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; public class DungeonRoom { RoomSchematic schematic; Map<DungeonDirection, RoomLink> linkMap = new HashMap<DungeonDirection, RoomLink>(); RoomPos position; public DungeonRoom(RoomSchematic rs, RoomPos pos) { schematic = rs; position = pos; } public void addConnection(DungeonDirection c, RoomLink r) { linkMap.put(c, r); } public RoomLink getConnection(DungeonDirection c) { if(linkMap.containsKey(c)) return linkMap.get(c); else return null; } public boolean hasConnection(DungeonDirection c) { return linkMap.containsKey(c); } public RoomPos getPosition() { return position; } public void removeConnection(DungeonDirection dir) { linkMap.remove(dir); } public void clearConnections(Dungeon d) { for(DungeonDirection dir : DungeonDirection.values()) { RoomLink rl = getConnection(dir); if(rl != null) { DungeonRoom dr = d.getRoom(this.getPosition().offset(dir)); if(dr != null) dr.removeConnection(dir.getOpposite()); removeConnection(dir); } } } public void writeToNBT(NBTTagCompound nbt) { nbt.setString("SchemTheme", schematic.getTheme()); nbt.setString("SchemName", schematic.getFileName()); nbt.setInteger("xPos", position.getX()); nbt.setInteger("yPos", position.getY()); nbt.setInteger("zPos", position.getZ()); NBTTagList linkTag = new NBTTagList(); Iterator iter = linkMap.keySet().iterator(); while(iter.hasNext()) { DungeonDirection dir = (DungeonDirection)iter.next(); NBTTagCompound linkNBT = new NBTTagCompound(); linkNBT.setString("dir", dir.name); linkMap.get(dir).writeToNBT(linkNBT); linkTag.appendTag(linkNBT); } nbt.setTag("LinkMap", linkTag); } public void readFromNBT(NBTTagCompound nbt) { DungeonSchemManager dsm = DungeonSchemManager.getInstance(); schematic = dsm.getTheme(nbt.getString("SchemTheme")).getSchematic(nbt.getString("SchemName")); this.position = new RoomPos(nbt.getInteger("xPos"), nbt.getInteger("yPos"), nbt.getInteger("zPos")); NBTTagList tagList = nbt.getTagList("LinkMap", 10); for(int i = 0; i < tagList.tagCount(); i++) { NBTTagCompound roomTag = tagList.getCompoundTagAt(i); RoomLink link = new RoomLink(false); link.readFromNBT(roomTag); linkMap.put(DungeonDirection.fromString(roomTag.getString("dir")), link); } } public RoomSchematic getSchematic() { return schematic; } }