package org.buckit.datasource.flatfile; import java.util.Collection; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.buckit.datasource.DataSourceManager; import org.buckit.datasource.type.WarpsDataSource; import org.buckit.model.Warp; import org.bukkit.Location; public class FlatFileWarpsDataSource implements WarpsDataSource{ private DataSourceManager datasource; private Map<String, Warp> warps; //key = groupname/name private int lastId = 0; public FlatFileWarpsDataSource(DataSourceManager dataSource) { datasource = dataSource; } public DataSourceManager getDataSource(){ return datasource; } @Override public boolean load() { warps = new LinkedHashMap<String, Warp>(); List<String> lines = FileHandler.getLines("warps"); LineReader r; int id, level; String name, groupname, world; double x,y,z; float rotX, rotY; Warp warp; for (int i=0; i<lines.size(); i++) { r = new LineReader(lines.get(i)); id = r.nextInt(); name = r.nextStr(); groupname = r.nextStr(); world = r.nextStr(); x = r.nextDouble(); y = r.nextDouble(); z = r.nextDouble(); rotX = r.nextFloat(); rotY = r.nextFloat(); level = r.nextInt(); warp = new Warp(id, name, groupname, new Location(datasource.getServer().getWorld(world), x, y, z, rotX, rotY), level); warps.put(groupname+"/"+name, warp); if (id > lastId) lastId=id; } FFLog.newInit("Warps", warps.size()); return true; } @Override public boolean addWarp(String groupname, String name, Location l, int minaccesslevel) { Warp warp = new Warp((lastId+1), name, groupname, new Location(l.getWorld(), l.getX(), l.getY(), l.getZ(), l.getYaw(), l.getPitch()), minaccesslevel); lastId++; String checkName = groupname+"/"+name; if (!warps.containsKey(checkName)) { warps.put(checkName, warp); FFLog.newEdit("Warps", "new warp '"+name+"'"); return FileHandler.addLine("warps", warp.getId()+FileHandler.sep1+ name+FileHandler.sep1+ groupname+FileHandler.sep1+ l.getWorld().getName()+FileHandler.sep1+ l.getX()+FileHandler.sep1+ l.getY()+FileHandler.sep1+ l.getZ()+FileHandler.sep1+ l.getYaw()+FileHandler.sep1+ l.getPitch()+FileHandler.sep1+ minaccesslevel); } else { return false; } } @Override public boolean removeWarp(Warp warp) { warps.remove(warp.getGroup()+"/"+warp.getName()); List<String> lines = FileHandler.getLines("warps"); LineReader r; int id; for (int i=0; i<lines.size(); i++) { r = new LineReader(lines.get(i)); id = r.nextInt(); if (warp.getId() == id) { lines.remove(i); FFLog.newEdit("Warps", "removed warp '"+warp.getName()+"'"); break; } } return FileHandler.writeFile("warps", lines); } @Override public Warp getWarp(String groupname, String name) { return warps.get(groupname+"/"+name); } @Override public Collection<Warp> getWarps(String groupname) { Collection<Warp> warpsOut = new LinkedList<Warp>(); for (String key : warps.keySet()) { if (groupname.equals(warps.get(key).getGroup())) warpsOut.add(warps.get(key)); } return warpsOut; } @Override public Collection<Warp> getAllWarps() { return warps.values(); } }