package sourcecoded.quantum.util; import net.minecraft.block.Block; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import sourcecoded.core.util.RandomUtils; import sourcecoded.quantum.api.block.Colourizer; import sourcecoded.quantum.api.block.IRiftMultiplier; import sourcecoded.quantum.registry.QABlocks; import sourcecoded.quantum.tile.TileRiftNode; import java.util.ArrayList; import java.util.List; @SuppressWarnings("unchecked") public strictfp class WorldUtils { public static List searchForBlock(World world, int xOrigin, int yOrigin, int zOrigin, int xRadius, int yRadius, int zRadius, Class type) { ArrayList list = new ArrayList(); for (int x = -xRadius; x <= xRadius; x++) { for (int y = -yRadius; y <= yRadius; y++) { for (int z = -zRadius; z <= zRadius; z++) { if (x == xOrigin && y == yOrigin && z == zOrigin) continue; Block block = world.getBlock(xOrigin - x, yOrigin - y, zOrigin - z); if (block != null && type.isAssignableFrom(block.getClass())) list.add(block); } } } return list; } public static List searchForTile(World world, int xOrigin, int yOrigin, int zOrigin, int xRadius, int yRadius, int zRadius, Class type) { ArrayList list = new ArrayList(); for (int x = -xRadius; x <= xRadius; x++) { for (int y = -yRadius; y <= yRadius; y++) { for (int z = -zRadius; z <= zRadius; z++) { if ((xOrigin - x) == xOrigin && (yOrigin - y) == yOrigin && (zOrigin - z) == zOrigin) continue; TileEntity tile = world.getTileEntity(xOrigin - x, yOrigin - y, zOrigin - z); if (tile != null && type.isAssignableFrom(tile.getClass())) list.add(tile); } } } return list; } public static void generateRiftNode(World world, int x, int y, int z) { world.setBlock(x, y, z, QABlocks.RIFT_NODE.getBlock()); TileRiftNode node = (TileRiftNode) world.getTileEntity(x, y, z); node.riftStorage.giveRiftEnergy(RandomUtils.nextInt(650000, 1000000)); Colourizer color = Colourizer.values()[RandomUtils.nextInt(0, Colourizer.values().length)]; node.dye(color); } public static float getMultiplication(World world, int xOrigin, int yOrigin, int zOrigin, int xRadius, int yRadius, int zRadius, IRiftMultiplier.RiftMultiplierTypes type) { List<IRiftMultiplier> multipliers = searchForBlock(world, xOrigin, yOrigin, zOrigin, xRadius, yRadius, zRadius, IRiftMultiplier.class); float total = 1F; for (IRiftMultiplier current : multipliers) { total *= current.getRiftMultiplication(type); } return total; } }