package org.dynmap; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.List; import org.dynmap.utils.MapChunkCache; public abstract class MapTile { protected DynmapWorld world; public abstract boolean render(MapChunkCache cache, String mapname); public abstract List getRequiredChunks(); public abstract MapTile[] getAdjecentTiles(); public DynmapWorld getDynmapWorld() { return world; } public abstract String getFilename(); public abstract String getDayFilename(); public MapTile(DynmapWorld world) { this.world = world; } @Override public int hashCode() { return getFilename().hashCode() ^ world.hashCode(); } @Override public abstract boolean equals(Object obj); public abstract String getKey(String prefix); public abstract boolean isBiomeDataNeeded(); public abstract boolean isHightestBlockYDataNeeded(); public abstract boolean isRawBiomeDataNeeded(); public abstract boolean isBlockTypeDataNeeded(); public abstract int tileOrdinalX(); public abstract int tileOrdinalY(); public ConfigurationNode saveTile() { ConfigurationNode cn = new ConfigurationNode(); cn.put("class", this.getClass().getName()); cn.put("data", saveTileData()); return cn; } protected abstract String saveTileData(); public static MapTile restoreTile(DynmapWorld w, ConfigurationNode node) { String cn = node.getString("class"); String dat = node.getString("data"); if((cn == null) || (dat == null)) return null; try { Class cls = Class.forName(cn); Constructor con = cls.getConstructor(DynmapWorld.class, String.class); return (MapTile)con.newInstance(w, dat); } catch (ClassNotFoundException cnfx) { } catch (NoSuchMethodException nsmx) { } catch (InvocationTargetException itx) { } catch (IllegalAccessException iax) { } catch (InstantiationException ix) { } return null; } }