package net.glowstone.generator.structures;
import net.glowstone.generator.structures.util.StructureBoundingBox;
import net.glowstone.generator.structures.util.StructureBuilder;
import net.glowstone.util.BlockStateDelegate;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.BlockFace;
import org.bukkit.material.Stairs;
import org.bukkit.util.Vector;
import java.util.Random;
public class GlowWitchHut extends GlowTemplePiece {
private boolean hasWitch;
public GlowWitchHut() {
super();
}
public GlowWitchHut(Random random, Location location) {
super(random, location, new Vector(7, 5, 9));
}
public void setHasWitch(boolean hasWitch) {
this.hasWitch = hasWitch;
}
public boolean getHasWitch() {
return hasWitch;
}
@Override
public boolean generate(World world, Random random, StructureBoundingBox genBoundingBox, BlockStateDelegate delegate) {
if (!super.generate(world, random, boundingBox, delegate)) {
return false;
}
adjustHPos(world);
final StructureBuilder builder = new StructureBuilder(world, this, genBoundingBox, delegate);
builder.fill(new Vector(1, 1, 2), new Vector(5, 4, 7), Material.WOOD, 1, Material.AIR); // hut body
builder.fill(new Vector(1, 1, 1), new Vector(5, 1, 1), Material.WOOD, 1); // hut steps
builder.fill(new Vector(2, 1, 0), new Vector(4, 1, 0), Material.WOOD, 1); // hut steps
builder.fill(new Vector(4, 2, 2), new Vector(4, 3, 2), Material.AIR); // hut door
builder.fill(new Vector(5, 3, 4), new Vector(5, 3, 5), Material.AIR); // left window
builder.setBlock(new Vector(1, 3, 4), Material.AIR);
builder.setBlock(new Vector(1, 3, 5), Material.FLOWER_POT, 7);
builder.setBlock(new Vector(2, 3, 2), Material.FENCE);
builder.setBlock(new Vector(3, 3, 7), Material.FENCE);
final Stairs stairsN = new Stairs(Material.SPRUCE_WOOD_STAIRS);
stairsN.setFacingDirection(getRelativeFacing(BlockFace.SOUTH));
builder.fill(new Vector(0, 4, 1), new Vector(6, 4, 1), stairsN.getItemType(), stairsN);
final Stairs stairsE = new Stairs(Material.SPRUCE_WOOD_STAIRS);
stairsE.setFacingDirection(getRelativeFacing(BlockFace.WEST));
builder.fill(new Vector(6, 4, 2), new Vector(6, 4, 7), stairsE.getItemType(), stairsE);
final Stairs stairsS = new Stairs(Material.SPRUCE_WOOD_STAIRS);
stairsS.setFacingDirection(getRelativeFacing(BlockFace.NORTH));
builder.fill(new Vector(0, 4, 8), new Vector(6, 4, 8), stairsS.getItemType(), stairsS);
final Stairs stairsW = new Stairs(Material.SPRUCE_WOOD_STAIRS);
stairsW.setFacingDirection(getRelativeFacing(BlockFace.EAST));
builder.fill(new Vector(0, 4, 2), new Vector(0, 4, 7), stairsW.getItemType(), stairsW);
builder.fill(new Vector(1, 0, 2), new Vector(1, 3, 2), Material.LOG);
builder.fill(new Vector(5, 0, 2), new Vector(5, 3, 2), Material.LOG);
builder.fill(new Vector(1, 0, 7), new Vector(1, 3, 7), Material.LOG);
builder.fill(new Vector(5, 0, 7), new Vector(5, 3, 7), Material.LOG);
builder.setBlock(new Vector(1, 2, 1), Material.FENCE);
builder.setBlock(new Vector(5, 2, 1), Material.FENCE);
builder.setBlock(new Vector(4, 2, 6), Material.CAULDRON);
builder.setBlock(new Vector(3, 2, 6), Material.WORKBENCH);
builder.setBlockDownward(new Vector(1, -1, 2), Material.LOG);
builder.setBlockDownward(new Vector(5, -1, 2), Material.LOG);
builder.setBlockDownward(new Vector(1, -1, 7), Material.LOG);
builder.setBlockDownward(new Vector(5, -1, 7), Material.LOG);
if (!hasWitch) {
// TODO: uncomment this later
// hasWitch = builder.spawnMob(new Vector(2, 2, 5), EntityType.WITCH);
// I believe vanilla 1.8 tries to spawn the witch on different floor levels
}
return true;
}
}