Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package me.Dablakbandit.MazeGenerator;
- import java.util.Random;
- import org.bukkit.Location;
- import org.bukkit.Material;
- import org.bukkit.block.Block;
- import org.bukkit.block.BlockState;
- public class MazeGenerator
- {
- static int y1;
- static int y2;
- public static void Gen(Material material, Location center, int Width, int Passage, int Height, Material roof, Material floor)
- {
- if (Width % 2 == 1) {
- Width--;
- }
- Width *= 2;
- Passage++;
- Location l = new Location(center.getWorld(), center.getX(), center.getY(), center.getZ());
- y1 = center.getBlockY();
- y2 = center.getBlockY() + Height;
- int minX = center.getBlockX() - Width / 4;
- int minZ = center.getBlockZ() - Width / 4;
- int maxX = center.getBlockX() + Width / 4;
- int maxZ = center.getBlockZ() + Width / 4;
- int minY = center.getBlockY() - 1;
- int maxY = center.getBlockY() + Height;
- if (Height == 1) {
- maxY++;
- }
- for (int i = center.getBlockX() - Width / 4; i <= center
- .getBlockX() + Width / 4; i++) {
- for (int ii = y1; ii < y2; ii++)
- {
- l.setY(ii);
- l.setX(i);
- l.setZ(center.getBlockZ() - Width / 4);
- Block b = l.getBlock();
- b.setType(material);
- b.getState().update(true);
- }
- }
- for (int i = center.getBlockX() - Width / 4; i <= center
- .getBlockX() + Width / 4; i++) {
- for (int ii = y1; ii < y2; ii++)
- {
- l.setY(ii);
- l.setX(i);
- l.setZ(center.getBlockZ() + Width / 4);
- Block b = l.getBlock();
- b.setType(material);
- b.getState().update(true);
- }
- }
- for (int i = center.getBlockZ() - Width / 4; i <= center
- .getBlockZ() + Width / 4; i++) {
- for (int ii = y1; ii < y2; ii++)
- {
- l.setY(ii);
- l.setZ(i);
- l.setX(center.getBlockX() - Width / 4);
- Block b = l.getBlock();
- b.setType(material);
- b.getState().update(true);
- }
- }
- for (int i = center.getBlockZ() - Width / 4; i <= center
- .getBlockZ() + Width / 4; i++) {
- for (int ii = y1; ii < y2; ii++)
- {
- l.setY(ii);
- l.setZ(i);
- l.setX(center.getBlockX() + Width / 4);
- Block b = l.getBlock();
- b.setType(material);
- b.getState().update(true);
- }
- }
- if (floor != null) {
- for (int i = minX; i <= maxX; i++) {
- for (int ii = minZ; ii <= maxZ; ii++)
- {
- l.setY(minY);
- l.setZ(ii);
- l.setX(i);
- Block b = l.getBlock();
- b.setType(floor);
- b.getState().update(true);
- }
- }
- }
- if (roof != null) {
- for (int i = minX; i <= maxX; i++) {
- for (int ii = minZ; ii <= maxZ; ii++)
- {
- l.setY(maxY);
- l.setZ(ii);
- l.setX(i);
- Block b = l.getBlock();
- b.setType(roof);
- b.getState().update(true);
- }
- }
- }
- Chamber c = new Chamber(Width / 2, Width / 2, new Location(
- center.getWorld(), center.getX() - 0.25D * Width, center.getY(),
- center.getZ() - 0.25D * Width));
- createWalls(c, Passage, material);
- }
- private static void createWalls(Chamber chamber, int minWidth, Material material)
- {
- String orientation = chamber.getOrientation();
- Location l = new Location(chamber.getBL().getWorld(), chamber.getBL().getX(), chamber.getBL().getX(), chamber.getBL().getX());
- Random r = new Random();
- if ((chamber.getXDimension() > minWidth) &&
- (chamber.getZDimension() > minWidth))
- {
- String str1;
- switch ((str1 = orientation).hashCode())
- {
- case 120:
- if (str1.equals("x")) {
- break;
- }
- break;
- case 122:
- if (!str1.equals("z"))
- {
- return;
- int hole;
- int poss;
- int hole;
- if (0 + (chamber.getXDimension() / minWidth - 1) == 0)
- {
- int poss = r.nextInt(chamber.getXDimension() / minWidth) + 1;
- hole = r.nextInt(chamber.getZDimension() / minWidth) + 1;
- }
- else
- {
- poss = r.nextInt(chamber.getXDimension() / minWidth - 1) + 1;
- hole = r.nextInt(chamber.getZDimension() / minWidth) + 1;
- }
- for (int z = chamber.getDown(); z < chamber.getTop(); z++) {
- if ((z <= chamber.getDown() + (hole - 1) * minWidth) ||
- (z >= chamber.getDown() + hole * minWidth))
- {
- int random1 = r.nextInt(100);
- int random2 = r.nextInt(90) + 1;
- for (int y = y1; y < y2; y++)
- {
- l.setY(y);
- l.setZ(z);
- int removed = 0;
- l.setX(chamber.getLeft() + minWidth * poss);
- if (l.getBlock().getType() != Material.AIR) {
- l.getBlock().setType(Material.AIR);
- }
- if ((random1 > removed - 1) ||
- (removed - 1 == -1)) {
- l.getBlock().setType(material);
- } else if ((y != random2) && (y != random2 + 1)) {
- l.getBlock().setType(material);
- }
- l.getBlock().getState().update(true);
- }
- }
- }
- int mid = chamber.getLeft() + minWidth * poss;
- int right = chamber.getRight();
- int left = chamber.getLeft();
- createWalls(
- new Chamber(right - mid, chamber.getTop() -
- chamber.getDown(), new Location(l.getWorld(),
- mid, 0.0D, chamber.getDown())), minWidth, material);
- createWalls(
- new Chamber(mid - left, chamber.getTop() -
- chamber.getDown(), new Location(l.getWorld(),
- left, 0.0D, chamber.getDown())), minWidth, material);
- }
- else
- {
- int hole;
- int poss;
- int hole;
- if (0 + (chamber.getZDimension() / minWidth - 1) == 0)
- {
- int poss = r.nextInt(chamber.getZDimension() / minWidth) + 1;
- hole = r.nextInt(chamber.getXDimension() / minWidth) + 1;
- }
- else
- {
- poss = r.nextInt(chamber.getZDimension() / minWidth - 1) + 1;
- hole = r.nextInt(chamber.getXDimension() / minWidth) + 1;
- }
- for (int x = chamber.getLeft(); x < chamber.getRight(); x++) {
- if ((x <= chamber.getLeft() + (hole - 1) * minWidth) ||
- (x >= chamber.getLeft() + hole * minWidth))
- {
- int random1 = r.nextInt(100);
- int random2 = r.nextInt(90) + 1;
- for (int y = y1; y < y2; y++)
- {
- l.setY(y);
- l.setX(x);
- int removed = 0;
- l.setZ(chamber.getDown() + minWidth * poss);
- if (l.getBlock().getType() != Material.AIR) {
- l.getBlock().setType(Material.AIR);
- }
- if ((random1 > removed - 1) ||
- (removed - 1 == -1)) {
- l.getBlock().setType(material);
- } else if ((y != random2) && (y != random2 + 1)) {
- l.getBlock().setType(material);
- }
- l.getBlock().getState().update(true);
- }
- }
- }
- int mid2 = chamber.getDown() + minWidth * poss;
- int top = chamber.getTop();
- int down = chamber.getDown();
- createWalls(
- new Chamber(chamber.getRight() - chamber.getLeft(), top -
- mid2, new Location(l.getWorld(),
- chamber.getLeft(), 0.0D, mid2)), minWidth, material);
- createWalls(
- new Chamber(chamber.getRight() - chamber.getLeft(),
- mid2 - down, new Location(l.getWorld(),
- chamber.getLeft(), 0.0D, down)), minWidth, material);
- }
- break;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement