/** If this dimension is not yet visited, empty DimensionData will be created. */ public DimensionData getDimensionData(int dimension) { return dimensionMap.computeIfAbsent(dimension, k -> new DimensionData(this, dimension)); }
public void loadSavedBrowsingPosition() { // Apply zoom first, because browsing position depends on it: setMapScale(biomeData.getBrowsingZoom()); mapOffsetX = biomeData.getBrowsingX(); mapOffsetY = biomeData.getBrowsingY(); isDragging = false; }
public Map<ShortVec2, Tile> getSeenChunksInDimension(int dimension) { return getDimensionData(dimension).getSeenChunks(); }
public NBTTagCompound writeToNBT(NBTTagCompound compound, boolean includeTileData) { NBTTagList dimensionMapList = new NBTTagList(); compound.setInteger(TAG_VERSION, VERSION); for (Entry<Integer, DimensionData> dimensionEntry : dimensionMap.entrySet()) { NBTTagCompound dimTag = new NBTTagCompound(); dimTag.setInteger(TAG_DIMENSION_ID, dimensionEntry.getKey()); DimensionData dimData = dimensionEntry.getValue(); if (includeTileData){ dimTag.setTag(TAG_VISITED_CHUNKS, dimData.writeToNBT()); } dimTag.setInteger(TAG_BROWSING_X, dimData.getBrowsingX()); dimTag.setInteger(TAG_BROWSING_Y, dimData.getBrowsingY()); dimTag.setInteger(TAG_BROWSING_ZOOM, (int)Math.round(dimData.getBrowsingZoom() * BrowsingPositionPacket.ZOOM_SCALE_FACTOR)); dimensionMapList.appendTag(dimTag); } compound.setTag(TAG_DIMENSION_MAP_LIST, dimensionMapList); return compound; }
/**Creates a pre-packet-rework AtlasData NBT tag*/ public void writeToNBTv2(AtlasData atlasdata, NBTTagCompound compound) { compound.setInteger(AtlasData.TAG_VERSION, 2); NBTTagList dimensionMapList = new NBTTagList(); int dimension = 0; int key; Iterator<Integer> dimensionEntryKey = atlasdata.getVisitedDimensions().iterator(); for (dimension = 0; dimension<atlasdata.getVisitedDimensions().size(); dimension++) { NBTTagCompound dimTag = new NBTTagCompound(); key = dimensionEntryKey.next().intValue(); dimTag.setInteger(AtlasData.TAG_DIMENSION_ID, key); DimensionData dimData = atlasdata.getDimensionData(key); Map<ShortVec2, Tile> seenChunks = dimData.getSeenChunks(); int[] intArray = new int[seenChunks.size()*3]; int i = 0; for (Entry<ShortVec2, Tile> entry : seenChunks.entrySet()) { intArray[i++] = entry.getKey().x; intArray[i++] = entry.getKey().y; intArray[i++] = entry.getValue().biomeID; } dimTag.setIntArray(AtlasData.TAG_VISITED_CHUNKS, intArray); dimTag.setInteger(AtlasData.TAG_BROWSING_X, dimData.getBrowsingX()); dimTag.setInteger(AtlasData.TAG_BROWSING_Y, dimData.getBrowsingY()); dimTag.setInteger(AtlasData.TAG_BROWSING_ZOOM, (int)Math.round(dimData.getBrowsingZoom() * BrowsingPositionPacket.ZOOM_SCALE_FACTOR)); dimensionMapList.appendTag(dimTag); } compound.setTag(AtlasData.TAG_DIMENSION_MAP_LIST, dimensionMapList); }
@Test public void testNBT(){ NBTTagCompound tagTG = new NBTTagCompound(); tg.writeToNBT(tagTG); TileGroup tg2 = new TileGroup(0,0); tg2.readFromNBT(tagTG); assertEquals(tg, tg2); NBTTagList tagDD = dd.writeToNBT(); DimensionData dd2 = new DimensionData(null, 0); dd2.readFromNBT(tagDD); } }
@Override public void readFromNBT(NBTTagCompound compound) { this.nbt = compound; int version = compound.getInteger(TAG_VERSION); if (version < VERSION) { Log.warn("Outdated atlas data format! Was %d but current is %d. Updating.", version, VERSION); readFromNBT2(compound); return; } NBTTagList dimensionMapList = compound.getTagList(TAG_DIMENSION_MAP_LIST, Constants.NBT.TAG_COMPOUND); for (int d = 0; d < dimensionMapList.tagCount(); d++) { NBTTagCompound dimTag = dimensionMapList.getCompoundTagAt(d); int dimensionID = dimTag.getInteger(TAG_DIMENSION_ID); NBTTagList dimensionTag = (NBTTagList) dimTag.getTag(TAG_VISITED_CHUNKS); DimensionData dimData = getDimensionData(dimensionID); dimData.readFromNBT(dimensionTag); double zoom = (double)dimTag.getInteger(TAG_BROWSING_ZOOM) / BrowsingPositionPacket.ZOOM_SCALE_FACTOR; if (zoom == 0) zoom = 0.5; dimData.setBrowsingPosition(dimTag.getInteger(TAG_BROWSING_X), dimTag.getInteger(TAG_BROWSING_Y), zoom); } }
@Override public boolean equals(Object obj) { if (!(obj instanceof AtlasData)) return false; AtlasData other = (AtlasData) obj; if (other.dimensionMap.size()!=dimensionMap.size()) return false; for (Integer key: dimensionMap.keySet()){ if (!dimensionMap.get(key).equals(other.dimensionMap.get(key))) return false; } return true; } }
/**Puts a tileGroup into this dimensionData, overwriting any previous stuff.*/ public void putTileGroup(TileGroup t){ ShortVec2 key = new ShortVec2(Math.floorDiv(t.scope.minX,TileGroup.CHUNK_STEP), Math.floorDiv(t.scope.minY,TileGroup.CHUNK_STEP)); tileGroups.put(key, t); extendToTileGroup(t); }
if (destBiomes != null && srcBiomes != null && destBiomes != srcBiomes) { for (int dim : srcBiomes.getVisitedDimensions()) { destBiomes.getDimensionData(dim).addData(srcBiomes.getDimensionData(dim));
@Override public DimensionData clone() { //TODO DimensionData data = new DimensionData(parent, dimension); data.tileGroups.putAll(tileGroups); data.scope.set(scope); return data; }