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; } }