Newer
Older
ultramine_bukkit / src / main / java / org / bukkit / craftbukkit / util / StructureGrowDelegate.java
@vlad20012 vlad20012 on 24 Feb 2017 1 KB initial
package org.bukkit.craftbukkit.util;

import org.bukkit.BlockChangeDelegate;
import org.bukkit.block.BlockState;
import org.bukkit.craftbukkit.CraftWorld;
import org.bukkit.material.MaterialData;
import org.ultramine.mods.bukkit.interfaces.world.IMixinWorld;

import java.util.ArrayList;
import java.util.List;

public class StructureGrowDelegate implements BlockChangeDelegate
{
	private final CraftWorld world;
	private final List<BlockState> blocks = new ArrayList<BlockState>();

	public StructureGrowDelegate(net.minecraft.world.World world)
	{
		this.world = ((IMixinWorld) world).getWorld();
	}

	public boolean setRawTypeId(int x, int y, int z, int type)
	{
		return setRawTypeIdAndData(x, y, z, type, 0);
	}

	public boolean setRawTypeIdAndData(int x, int y, int z, int type, int data)
	{
		BlockState state = world.getBlockAt(x, y, z).getState();
		state.setTypeId(type);
		state.setData(new MaterialData(type, (byte) data));
		blocks.add(state);
		return true;
	}

	public boolean setTypeId(int x, int y, int z, int typeId)
	{
		return setRawTypeId(x, y, z, typeId);
	}

	public boolean setTypeIdAndData(int x, int y, int z, int typeId, int data)
	{
		return setRawTypeIdAndData(x, y, z, typeId, data);
	}

	public int getTypeId(int x, int y, int z)
	{
		for(BlockState state : blocks)
		{
			if(state.getX() == x && state.getY() == y && state.getZ() == z)
			{
				return state.getTypeId();
			}
		}

		return world.getBlockTypeIdAt(x, y, z);
	}

	public int getHeight()
	{
		return world.getMaxHeight();
	}

	public List<BlockState> getBlocks()
	{
		return blocks;
	}

	public boolean isEmpty(int x, int y, int z)
	{
		for(BlockState state : blocks)
		{
			if(state.getX() == x && state.getY() == y && state.getZ() == z)
			{
				return net.minecraft.block.Block.getBlockById(state.getTypeId()) == net.minecraft.init.Blocks.air;
			}
		}

		return world.getBlockAt(x, y, z).isEmpty();
	}
}