Java tutorial
/* * This file is part of Matter Overdrive * Copyright (c) 2015., Simeon Radivoev, All rights reserved. * * Matter Overdrive is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Matter Overdrive is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Matter Overdrive. If not, see <http://www.gnu.org/licenses>. */ package matteroverdrive.starmap.data; import io.netty.buffer.ByteBuf; import matteroverdrive.starmap.GalaxyGenerator; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.world.World; import java.io.File; import java.util.Collection; import java.util.HashMap; import java.util.Map; /** * Created by Simeon on 6/13/2015. */ public class Quadrant extends SpaceBody { //region Private Vars private Galaxy galaxy; private HashMap<Integer, Star> starHashMap; private boolean loaded; private float size; private float x, y, z; private boolean isDirty; //endregion //region Constructors public Quadrant() { super(); init(); } public Quadrant(String name, int id) { super(name, id); init(); } //endregion //region Updates public void update(World world) { for (Star star : getStars()) { star.update(world); } } //endregion public void generateMissing(NBTTagCompound tagCompound, GalaxyGenerator galaxyGenerator) { for (Star star : getStars()) { star.generateMissing(tagCompound, galaxyGenerator); } } //region Events public void onSave(File file, World world) { isDirty = false; for (Star star : getStars()) { star.onSave(file, world); } } //endregion //region Read - Write @Override public void writeToNBT(NBTTagCompound tagCompound) { super.writeToNBT(tagCompound); NBTTagList starList = new NBTTagList(); tagCompound.setFloat("X", x); tagCompound.setFloat("Y", y); tagCompound.setFloat("Z", z); tagCompound.setFloat("Size", size); for (Star star : getStars()) { NBTTagCompound quadrantNBT = new NBTTagCompound(); star.writeToNBT(quadrantNBT); starList.appendTag(quadrantNBT); } tagCompound.setTag("Stars", starList); } public void writeToBuffer(ByteBuf buf) { super.writeToBuffer(buf); buf.writeFloat(x); buf.writeFloat(y); buf.writeFloat(z); buf.writeFloat(size); buf.writeInt(getStars().size()); for (Star star : getStars()) { star.writeToBuffer(buf); } } @Override public void readFromNBT(NBTTagCompound tagCompound, GalaxyGenerator generator) { super.readFromNBT(tagCompound, generator); if (tagCompound != null) { x = tagCompound.getFloat("X"); y = tagCompound.getFloat("Y"); z = tagCompound.getFloat("Z"); size = tagCompound.getFloat("Size"); NBTTagList starList = tagCompound.getTagList("Stars", 10); for (int i = 0; i < starList.tagCount(); i++) { Star star = new Star(); star.readFromNBT(starList.getCompoundTagAt(i), generator); addStar(star); star.setQuadrant(this); } } } public void readFromBuffer(ByteBuf buf) { super.readFromBuffer(buf); x = buf.readFloat(); y = buf.readFloat(); z = buf.readFloat(); size = buf.readFloat(); int starCount = buf.readInt(); for (int i = 0; i < starCount; i++) { Star star = new Star(); star.readFromBuffer(buf); addStar(star); star.setQuadrant(this); } } //endregion //region Getters and Setters @Override public SpaceBody getParent() { return galaxy; } private void init() { starHashMap = new HashMap<Integer, Star>(); } public Star star(int at) { return starHashMap.get(at); } public boolean hasStar(int id) { return starHashMap.containsKey(id); } private boolean isLoaded() { return isLoaded(); } public Collection<Star> getStars() { return starHashMap.values(); } public Map<Integer, Star> getStarMap() { return starHashMap; } public void addStar(Star star) { starHashMap.put(star.getId(), star); } public void setGalaxy(Galaxy galaxy) { this.galaxy = galaxy; } public Galaxy getGalaxy() { return galaxy; } public float getX() { return x; } public float getY() { return y; } public float getZ() { return z; } public float getSize() { return size; } public boolean isDirty() { if (isDirty) { return true; } else { for (Star star : getStars()) { if (star.isDirty()) { return true; } } } return false; } public void markDirty() { this.isDirty = true; } public void setPosition(float x, float y, float z) { this.x = x; this.y = y; this.z = z; } public void setSize(float size) { this.size = size; } //endregion }