matteroverdrive.starmap.data.Star.java Source code

Java tutorial

Introduction

Here is the source code for matteroverdrive.starmap.data.Star.java

Source

/*
 * 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 matteroverdrive.starmap.gen.ISpaceBodyGen;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.util.Vec3;
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 Star extends SpaceBody {
    //region Private Vars
    private Quadrant quadrant;
    private HashMap<Integer, Planet> planetHashMap;
    private float x, y, z, size, mass;
    private byte type;
    private int temperature, color, seed;
    private boolean generated;
    private boolean isDirty;
    //endregion

    //region Constructors
    public Star() {
        super();
        init();
    }

    public Star(String name, int id) {
        super(name, id);
        init();
    }
    //endregion

    public void generateMissing(NBTTagCompound tagCompound, GalaxyGenerator galaxyGenerator) {
        if (galaxyGenerator != null) {
            for (ISpaceBodyGen<Star> starGen : galaxyGenerator.getStarGen().getGens()) {
                galaxyGenerator.getStarRandom().setSeed(seed);
                if (starGen.generateMissing(tagCompound, this, galaxyGenerator.getStarRandom())) {
                    break;
                }
            }

            for (Planet planet : getPlanets()) {
                planet.generateMissing(tagCompound, galaxyGenerator);
            }
        }
    }

    //region Updates
    public void update(World world) {
        for (Planet planet : getPlanets()) {
            planet.update(world);
        }
    }
    //endregion

    //region Events
    public void onSave(File file, World world) {
        isDirty = false;

        for (Planet planet : getPlanets()) {
            planet.onSave(file, world);
        }
    }
    //endregion

    //region Read - Write
    @Override
    public void writeToNBT(NBTTagCompound tagCompound) {
        super.writeToNBT(tagCompound);
        tagCompound.setFloat("X", x);
        tagCompound.setFloat("Y", y);
        tagCompound.setFloat("Z", z);
        tagCompound.setFloat("Size", size);
        tagCompound.setFloat("Mass", mass);
        tagCompound.setByte("Type", type);
        tagCompound.setInteger("Temperature", temperature);
        tagCompound.setInteger("Color", color);
        tagCompound.setInteger("Seed", seed);
        tagCompound.setBoolean("Generated", generated);
        NBTTagList planetList = new NBTTagList();
        for (Planet planet : getPlanets()) {
            NBTTagCompound quadrantNBT = new NBTTagCompound();
            planet.writeToNBT(quadrantNBT);
            planetList.appendTag(quadrantNBT);
        }
        tagCompound.setTag("Planets", planetList);
    }

    @Override
    public void writeToBuffer(ByteBuf byteBuf) {
        super.writeToBuffer(byteBuf);
        byteBuf.writeFloat(x);
        byteBuf.writeFloat(y);
        byteBuf.writeFloat(z);
        byteBuf.writeFloat(size);
        byteBuf.writeFloat(mass);
        byteBuf.writeByte(type);
        byteBuf.writeInt(temperature);
        byteBuf.writeInt(color);
        /*int planetCount = getPlanets().size();
        byteBuf.writeInt(planetCount);
        for (Planet planet : getPlanets())
        {
        planet.writeToBuffer(byteBuf);
        }*/
    }

    @Override
    public void readFromNBT(NBTTagCompound tagCompound, GalaxyGenerator generator) {
        super.readFromNBT(tagCompound, generator);
        x = tagCompound.getFloat("X");
        y = tagCompound.getFloat("Y");
        z = tagCompound.getFloat("Z");
        size = tagCompound.getFloat("Size");
        mass = tagCompound.getFloat("Mass");
        type = tagCompound.getByte("Type");
        temperature = tagCompound.getInteger("Temperature");
        color = tagCompound.getInteger("Color");
        seed = tagCompound.getInteger("Seed");
        generated = tagCompound.getBoolean("Generated");
        NBTTagList planetList = tagCompound.getTagList("Planets", 10);
        for (int i = 0; i < planetList.tagCount(); i++) {
            Planet planet = new Planet();
            planet.readFromNBT(planetList.getCompoundTagAt(i), generator);
            addPlanet(planet);
            planet.setStar(this);
        }

        generateMissing(tagCompound, generator);
    }

    @Override
    public void readFromBuffer(ByteBuf byteBuf) {
        super.readFromBuffer(byteBuf);
        x = byteBuf.readFloat();
        y = byteBuf.readFloat();
        z = byteBuf.readFloat();
        size = byteBuf.readFloat();
        mass = byteBuf.readFloat();
        type = byteBuf.readByte();
        temperature = byteBuf.readInt();
        color = byteBuf.readInt();
        /*int planetCount = byteBuf.readInt();
        for (int i = 0;i < planetCount;i++)
        {
        Planet planet = new Planet();
        planet.readFromBuffer(byteBuf);
        addPlanet(planet);
        planet.setStar(this);
        }*/
    }
    //endregion

    //region Getters and Setters
    @Override
    public SpaceBody getParent() {
        return quadrant;
    }

    public Planet planet(int at) {
        return planetHashMap.get(at);
    }

    public boolean hasPlanet(int id) {
        return planetHashMap.containsKey(id);
    }

    private void init() {
        planetHashMap = new HashMap<Integer, Planet>();
    }

    public Collection<Planet> getPlanets() {
        return planetHashMap.values();
    }

    public Map<Integer, Planet> getPlanetMap() {
        return planetHashMap;
    }

    public void addPlanet(Planet planet) {
        getPlanetMap().put(planet.getId(), planet);
    }

    public void setPosition(float x, float y, float z) {
        this.x = x;
        this.y = y;
        this.z = z;
    }

    public Vec3 getPosition() {
        return getPosition(1);
    }

    public Vec3 getPosition(double multipy) {
        return Vec3.createVectorHelper(x * multipy, y * multipy, z * multipy);
    }

    public float getX() {
        return x;
    }

    public float getY() {
        return y;
    }

    public float getZ() {
        return z;
    }

    public void setQuadrant(Quadrant quadrant) {
        this.quadrant = quadrant;
    }

    public Quadrant getQuadrant() {
        return quadrant;
    }

    public void setSize(float size) {
        this.size = size;
    }

    public float getSize() {
        return size;
    }

    public void setType(byte type) {
        this.type = type;
    }

    public byte getType() {
        return this.type;
    }

    public void setTemperature(int temperature) {
        this.temperature = temperature;
    }

    public int getTemperature() {
        return temperature;
    }

    public int getColor() {
        return color;
    }

    public void setColor(int color) {
        this.color = color;
    }

    public void clearPlanets() {
        planetHashMap.clear();
    }

    public int getSeed() {
        return seed;
    }

    public void setSeed(int seed) {
        this.seed = seed;
    }

    public boolean isGenerated() {
        return generated;
    }

    public void setGenerated(boolean generated) {
        this.generated = generated;
    }

    public void setMass(float mass) {
        this.mass = mass;
    }

    public float getMass() {
        return mass;
    }

    public int isClaimed(EntityPlayer player) {
        int ownType = 0;
        for (Planet planet : getPlanets()) {
            if (planet.hasOwner()) {
                if (planet.getOwnerUUID().equals(EntityPlayer.func_146094_a(player.getGameProfile()))) {
                    if (planet.isHomeworld())
                        if (ownType < 3) {
                            ownType = 3;
                        } else if (ownType < 2) {
                            ownType = 2;
                        }
                }

                if (ownType < 1) {
                    ownType = 1;
                }
            }
        }
        return ownType;
    }

    public boolean isClaimed() {
        for (Planet planet : getPlanets()) {
            if (planet.hasOwner()) {
                return true;
            }
        }
        return false;
    }

    public boolean isDirty() {
        if (isDirty) {
            return true;
        } else {
            for (Planet planet : getPlanets()) {
                if (planet.isDirty()) {
                    return true;
                }
            }
        }
        return false;
    }

    public void markDirty() {
        this.isDirty = true;
    }
    //endregion
}