@Override
	public void update() {
		if(++updateCount >= REGEN_TIME) {
			updateCount = 0;
			amount++;
		}

		if(amount < 0) {
			getWorld().removeStructure(this);
		} else if(amount > SPREAD) {
			Set<Tile> neighbours = new HashSet<Tile>();
			Tile temp;

			temp = getWorld().getTile(getX()+-1, getY());
			neighbours.add(temp);

			temp = getWorld().getTile(getX()+1, getY());
			neighbours.add(temp);

			temp = (getWorld().getTile(getX(), getY()+1));

			neighbours.add(temp);

			temp = (getWorld().getTile(getX(), getY()-1));
			neighbours.add(temp);

			neighbours.remove(null);

			if(neighbours.size() > 0) {
				List<Tile> list = new ArrayList<Tile>(neighbours);
				Collections.shuffle(list);
				Tile t = list.get(0);
				if(t.getStructure() != null){ return; }
				if(t.getHeight() != getWorld().getTile(getX(),getY()).getHeight()){ return; }
				if(t.getImageName().equals("Water")){ return; }
				getWorld().addStructure(new Tree(t.getX(), t.getY()));
			}

			amount = HALF;
		}

		if(amount >= MAX)
			shouldOctoMine = true;
		if(amount <= MIN/2)
			shouldOctoMine = false;
	}