Newer
Older
ultramine_bukkit / src / test / java / org / ultramine / libtest / WorldBuilder.java
package org.ultramine.libtest;

import net.minecraft.world.WorldServer;

import javax.annotation.Nonnull;
import java.util.HashMap;
import java.util.Map;
import java.util.NoSuchElementException;

public class WorldBuilder
{
	@Nonnull private final WorldServer world;
	@Nonnull private final BlockPos start;
	@Nonnull private final String[] lines;
	@Nonnull private final Map<Character, UBlockState> blockTypes = new HashMap<>();

	public WorldBuilder(@Nonnull WorldServer world, @Nonnull BlockPos start, @Nonnull String[] lines)
	{
		this.world = world;
		this.start = start;
		this.lines = lines;
	}

	@Nonnull
	public WorldBuilder set(char ch, Object block)
	{
		blockTypes.put(ch, UBlockState.of(block));
		return this;
	}

	@Nonnull
	public WorldBuilder set(char ch1, Object block1, char ch2, Object block2)
	{
		set(ch1, block1);
		set(ch2, block2);
		return this;
	}

	@Nonnull
	public WorldBuilder set(char ch1, Object block1, char ch2, Object block2, char ch3, Object block3)
	{
		set(ch1, block1);
		set(ch2, block2);
		set(ch3, block3);
		return this;
	}

	@Nonnull
	public WorldBuilder set(char ch1, Object block1, char ch2, Object block2, char ch3, Object block3, char ch4, Object block4)
	{
		set(ch1, block1);
		set(ch2, block2);
		set(ch3, block3);
		set(ch4, block4);
		return this;
	}

	@Nonnull
	public BlockPos posOf(char block)
	{
		for (int i = lines.length - 1; i >= 0; i--)
		{
			int y = lines.length - 1 - i;
			String line = lines[i];
			for (int x = 0; x < line.length(); x++)
			{
				char ch = line.charAt(x);
				if (ch == block) {
					return new BlockPos(start.getX() + x, start.getY() + y, start.getZ());
				}
			}
		}

		throw new NoSuchElementException();
	}

	@Nonnull
	public WorldServer build()
	{
		for (int i = lines.length - 1; i >= 0; i--)
		{
			int y = lines.length - 1 - i;
			String line = lines[i];
			for (int x = 0; x < line.length(); x++)
			{
				char ch = line.charAt(x);
				UBlockState block = blockTypes.get(ch);
				if (block != null) {
					world.setBlock(start.getX() + x, start.getY() + y, start.getZ(), block.getType(), block.getMeta(), 0);
				}
			}
		}

		return world;
	}
}