Search in sources :

Example 1 with RarityRandomSelector

use of mcjty.rftoolsdim.varia.RarityRandomSelector in project RFToolsDimensions by McJty.

the class GenericWorldGenerator method generateDungeon.

private void generateDungeon(World world, Random random, int midx, int starty, int midz) {
    boolean doSmallAntenna = random.nextInt(4) == 0;
    boolean doExtraFeature = random.nextInt(4) == 0;
    Block cornerBlock;
    switch(random.nextInt(3)) {
        case 0:
            cornerBlock = ModBlocks.dimensionalCrossBlock;
            break;
        case 1:
            cornerBlock = ModBlocks.dimensionalPattern1Block;
            break;
        case 2:
            cornerBlock = ModBlocks.dimensionalPattern2Block;
            break;
        default:
            cornerBlock = ModBlocks.dimensionalCross2Block;
    }
    Block buildingBlock = Blocks.STAINED_HARDENED_CLAY;
    int color = random.nextInt(5);
    if (color == 0) {
        color = 3;
    } else if (color == 1) {
        color = 9;
    } else if (color == 2) {
        color = 11;
    } else {
        color = 0;
        buildingBlock = ModBlocks.dimensionalBlankBlock;
    }
    // Spawn the building
    for (int x = midx - 3; x <= midx + 3; x++) {
        for (int z = midz - 3; z <= midz + 3; z++) {
            boolean corner = (x == midx - 3 || x == midx + 3) && (z == midz - 3 || z == midz + 3);
            boolean xside = x == midx - 3 || x == midx + 3;
            boolean zside = z == midz - 3 || z == midz + 3;
            boolean antenna = (x == midx - 2 && z == midz - 2);
            boolean smallAntenna = doSmallAntenna && (x == midx + 2 && z == midz + 2);
            world.setBlockState(new BlockPos(x, starty, z), Blocks.DOUBLE_STONE_SLAB.getDefaultState(), 2);
            if (corner) {
                world.setBlockState(new BlockPos(x, starty + 1, z), cornerBlock.getStateFromMeta(1), 2);
                world.setBlockState(new BlockPos(x, starty + 2, z), cornerBlock.getStateFromMeta(1), 2);
                world.setBlockState(new BlockPos(x, starty + 3, z), cornerBlock.getStateFromMeta(1), 2);
            } else if (xside) {
                world.setBlockState(new BlockPos(x, starty + 1, z), buildingBlock.getStateFromMeta(color), 2);
                if (z >= midz - 1 && z <= midz + 1) {
                    world.setBlockState(new BlockPos(x, starty + 2, z), Blocks.GLASS_PANE.getStateFromMeta(0), 2);
                } else {
                    world.setBlockState(new BlockPos(x, starty + 2, z), buildingBlock.getStateFromMeta(color), 2);
                }
                world.setBlockState(new BlockPos(x, starty + 3, z), buildingBlock.getStateFromMeta(color), 2);
            } else if (zside) {
                world.setBlockState(new BlockPos(x, starty + 1, z), buildingBlock.getStateFromMeta(color), 2);
                world.setBlockState(new BlockPos(x, starty + 2, z), buildingBlock.getStateFromMeta(color), 2);
                world.setBlockState(new BlockPos(x, starty + 3, z), buildingBlock.getStateFromMeta(color), 2);
            } else {
                world.setBlockToAir(new BlockPos(x, starty + 1, z));
                world.setBlockToAir(new BlockPos(x, starty + 2, z));
                world.setBlockToAir(new BlockPos(x, starty + 3, z));
            }
            if (antenna) {
                world.setBlockState(new BlockPos(x, starty + 4, z), Blocks.DOUBLE_STONE_SLAB.getDefaultState(), 2);
                world.setBlockState(new BlockPos(x, starty + 5, z), Blocks.IRON_BARS.getDefaultState(), 2);
                world.setBlockState(new BlockPos(x, starty + 6, z), Blocks.IRON_BARS.getDefaultState(), 2);
                world.setBlockState(new BlockPos(x, starty + 7, z), Blocks.IRON_BARS.getDefaultState(), 2);
                world.setBlockState(new BlockPos(x, starty + 8, z), Blocks.GLOWSTONE.getDefaultState(), 3);
            } else if (smallAntenna) {
                world.setBlockState(new BlockPos(x, starty + 4, z), Blocks.DOUBLE_STONE_SLAB.getDefaultState(), 2);
                world.setBlockState(new BlockPos(x, starty + 5, z), Blocks.IRON_BARS.getDefaultState(), 2);
                world.setBlockToAir(new BlockPos(x, starty + 6, z));
                world.setBlockToAir(new BlockPos(x, starty + 7, z));
                world.setBlockToAir(new BlockPos(x, starty + 8, z));
            } else {
                world.setBlockState(new BlockPos(x, starty + 4, z), Blocks.STONE_SLAB.getDefaultState(), 2);
                world.setBlockToAir(new BlockPos(x, starty + 5, z));
                world.setBlockToAir(new BlockPos(x, starty + 6, z));
                world.setBlockToAir(new BlockPos(x, starty + 7, z));
                world.setBlockToAir(new BlockPos(x, starty + 8, z));
            }
            // Spawn stone under the building for as long as it is air.
            WorldGenerationTools.fillEmptyWithStone(world, x, starty - 1, z);
        }
    }
    if (doExtraFeature) {
        if (!WorldGenerationTools.isSolid(world, midx + 4, starty, midz - 3)) {
            world.setBlockState(new BlockPos(midx + 4, starty, midz - 3), Blocks.IRON_BARS.getDefaultState(), 2);
        }
        world.setBlockState(new BlockPos(midx + 4, starty + 1, midz - 3), Blocks.IRON_BARS.getDefaultState(), 2);
        world.setBlockState(new BlockPos(midx + 4, starty + 2, midz - 3), Blocks.IRON_BARS.getDefaultState(), 2);
        if (!WorldGenerationTools.isSolid(world, midx + 5, starty, midz - 3)) {
            world.setBlockState(new BlockPos(midx + 5, starty, midz - 3), buildingBlock.getStateFromMeta(color), 2);
        }
        world.setBlockState(new BlockPos(midx + 5, starty + 1, midz - 3), buildingBlock.getStateFromMeta(color), 2);
        world.setBlockState(new BlockPos(midx + 5, starty + 2, midz - 3), buildingBlock.getStateFromMeta(color), 2);
        WorldGenerationTools.fillEmptyWithStone(world, midx + 4, starty - 1, midz - 3);
        WorldGenerationTools.fillEmptyWithStone(world, midx + 5, starty - 1, midz - 3);
    }
    // Clear the space before the door.
    for (int x = midx - 3; x <= midx + 3; x++) {
        for (int y = starty + 1; y <= starty + 3; y++) {
            world.setBlockToAir(new BlockPos(x, y, midz - 4));
        }
    }
    // Small platform before the door
    world.setBlockState(new BlockPos(midx - 1, starty, midz - 4), Blocks.DOUBLE_STONE_SLAB.getDefaultState(), 2);
    world.setBlockState(new BlockPos(midx, starty, midz - 4), Blocks.DOUBLE_STONE_SLAB.getDefaultState(), 2);
    world.setBlockState(new BlockPos(midx + 1, starty, midz - 4), Blocks.DOUBLE_STONE_SLAB.getDefaultState(), 2);
    world.setBlockState(new BlockPos(midx, starty + 1, midz - 3), Blocks.IRON_DOOR.getStateFromMeta(1), 2);
    world.setBlockState(new BlockPos(midx, starty + 2, midz - 3), Blocks.IRON_DOOR.getStateFromMeta(8), 2);
    world.setBlockState(new BlockPos(midx - 1, starty + 2, midz - 4), Blocks.STONE_BUTTON.getStateFromMeta(4), 2);
    world.setBlockState(new BlockPos(midx + 1, starty + 2, midz - 2), Blocks.STONE_BUTTON.getStateFromMeta(3), 2);
    world.setBlockState(new BlockPos(midx, starty + 3, midz + 3), Blocks.REDSTONE_LAMP.getDefaultState(), 2);
    world.setBlockState(new BlockPos(midx, starty + 3, midz + 2), Blocks.LEVER.getStateFromMeta(4), 2);
    world.setBlockState(new BlockPos(midx + 2, starty + 1, midz - 2), Blocks.CHEST.getDefaultState(), 2);
    RarityRandomSelector.Distribution<Integer> bestDistribution = DimletRandomizer.getRandomDimlets().createDistribution(0.2f);
    TileEntityChest chest = (TileEntityChest) world.getTileEntity(new BlockPos(midx + 2, starty + 1, midz - 2));
    for (int i = 0; i < random.nextInt(4) + 3; i++) {
        ItemStack stack = DimletRandomizer.getRandomPart(random);
        chest.setInventorySlotContents(random.nextInt(chest.getSizeInventory()), stack);
    }
    if (WorldgenConfiguration.enableDimletsInRFToolsDungeons > 0) {
        for (int i = 0; i < random.nextInt(WorldgenConfiguration.enableDimletsInRFToolsDungeons); i++) {
            DimletKey key = DimletRandomizer.getRandomDimlets().select(bestDistribution, random);
            if (key != null) {
                ItemStack stack = KnownDimletConfiguration.getDimletStack(key);
                chest.setInventorySlotContents(random.nextInt(chest.getSizeInventory()), stack);
            }
        }
    }
    // Always generate a few cosmetic dimlets
    for (int i = 0; i < WorldgenConfiguration.uncraftableDimletsInRFToolsDungeons; i++) {
        RarityRandomSelector<Integer, DimletKey> dimlets = DimletRandomizer.getRandomUncraftableDimlets();
        DimletKey key = dimlets.select(bestDistribution, random);
        if (key != null) {
            ItemStack stack = KnownDimletConfiguration.getDimletStack(key);
            chest.setInventorySlotContents(random.nextInt(chest.getSizeInventory()), stack);
        }
    }
    for (int i = 0; i < random.nextInt(2); i++) {
        chest.setInventorySlotContents(random.nextInt(chest.getSizeInventory()), new ItemStack(ModItems.dimletParcelItem));
    }
    EntityItemFrame frame1 = spawnItemFrame(world, midx - 1, starty + 2, midz + 2);
    EntityItemFrame frame2 = spawnItemFrame(world, midx, starty + 2, midz + 2);
    EntityItemFrame frame3 = spawnItemFrame(world, midx + 1, starty + 2, midz + 2);
    if (WorldgenConfiguration.enableDimletsInRFToolsFrames) {
        DimletKey rd1 = DimletRandomizer.getRandomDimlets().select(bestDistribution, random);
        if (rd1 != null) {
            frame1.setDisplayedItem(KnownDimletConfiguration.getDimletStack(rd1));
        }
        DimletKey rd2 = DimletRandomizer.getRandomDimlets().select(bestDistribution, random);
        if (rd2 != null) {
            frame2.setDisplayedItem(KnownDimletConfiguration.getDimletStack(rd2));
        }
        DimletKey rd3 = DimletRandomizer.getRandomDimlets().select(bestDistribution, random);
        if (rd3 != null) {
            frame3.setDisplayedItem(KnownDimletConfiguration.getDimletStack(rd3));
        }
    } else {
        frame1.setDisplayedItem(DimletRandomizer.getRandomPart(random));
        frame2.setDisplayedItem(DimletRandomizer.getRandomPart(random));
        frame3.setDisplayedItem(DimletRandomizer.getRandomPart(random));
    }
}
Also used : RarityRandomSelector(mcjty.rftoolsdim.varia.RarityRandomSelector) TileEntityChest(net.minecraft.tileentity.TileEntityChest) EntityItemFrame(net.minecraft.entity.item.EntityItemFrame) GenericBlock(mcjty.lib.container.GenericBlock) Block(net.minecraft.block.Block) BlockPos(net.minecraft.util.math.BlockPos) ItemStack(net.minecraft.item.ItemStack) DimletKey(mcjty.rftoolsdim.dimensions.dimlets.DimletKey)

Example 2 with RarityRandomSelector

use of mcjty.rftoolsdim.varia.RarityRandomSelector in project RFToolsDimensions by McJty.

the class DimletRandomizer method setupWeightedRandomList.

private static void setupWeightedRandomList() {
    if (randomDimlets != null) {
        return;
    }
    Map<DimletKey, Settings> knownDimlets = KnownDimletConfiguration.getKnownDimlets();
    float rarity0 = DimletConfiguration.rarity0;
    float rarity1 = DimletConfiguration.rarity1;
    float rarity2 = DimletConfiguration.rarity2;
    float rarity3 = DimletConfiguration.rarity3;
    float rarity4 = DimletConfiguration.rarity4;
    float rarity5 = DimletConfiguration.rarity5;
    float rarity6 = DimletConfiguration.rarity6;
    randomDimlets = new RarityRandomSelector<>();
    setupRarity(randomDimlets, rarity0, rarity1, rarity2, rarity3, rarity4, rarity5, rarity6);
    randomUncraftableDimlets = new RarityRandomSelector<>();
    setupRarity(randomUncraftableDimlets, rarity0, rarity1, rarity2, rarity3, rarity4, rarity5, rarity6);
    for (Map.Entry<DimletKey, Settings> entry : knownDimlets.entrySet()) {
        DimletKey key = entry.getKey();
        Settings settings = KnownDimletConfiguration.getSettings(key);
        if (settings == null) {
            continue;
        }
        if (!settings.isWorldgen()) {
            continue;
        }
        randomDimlets.addItem(entry.getValue().getRarity(), key);
        if (key.getType() == DimletType.DIMLET_MATERIAL) {
            if (randomMaterialDimlets == null) {
                randomMaterialDimlets = new RarityRandomSelector<>();
                setupRarity(randomMaterialDimlets, rarity0, rarity1, rarity2, rarity3, rarity4, rarity5, rarity6);
            }
            randomMaterialDimlets.addItem(entry.getValue().getRarity(), key);
        } else if (key.getType() == DimletType.DIMLET_LIQUID) {
            if (randomLiquidDimlets == null) {
                randomLiquidDimlets = new RarityRandomSelector<>();
                setupRarity(randomLiquidDimlets, rarity0, rarity1, rarity2, rarity3, rarity4, rarity5, rarity6);
            }
            randomLiquidDimlets.addItem(entry.getValue().getRarity(), key);
        } else if (key.getType() == DimletType.DIMLET_MOB) {
            if (randomMobDimlets == null) {
                randomMobDimlets = new RarityRandomSelector<>();
                setupRarity(randomMobDimlets, rarity0, rarity1, rarity2, rarity3, rarity4, rarity5, rarity6);
            }
            randomMobDimlets.addItem(entry.getValue().getRarity(), key);
        } else if (key.getType() == DimletType.DIMLET_EFFECT) {
            if (randomEffectDimlets == null) {
                randomEffectDimlets = new RarityRandomSelector<>();
                setupRarity(randomEffectDimlets, rarity0, rarity1, rarity2, rarity3, rarity4, rarity5, rarity6);
            }
            randomEffectDimlets.addItem(entry.getValue().getRarity(), key);
            randomUncraftableDimlets.addItem(entry.getValue().getRarity(), key);
        } else if (key.getType() == DimletType.DIMLET_FEATURE) {
            if (randomFeatureDimlets == null) {
                randomFeatureDimlets = new RarityRandomSelector<>();
                setupRarity(randomFeatureDimlets, rarity0, rarity1, rarity2, rarity3, rarity4, rarity5, rarity6);
            }
            randomFeatureDimlets.addItem(entry.getValue().getRarity(), key);
            randomUncraftableDimlets.addItem(entry.getValue().getRarity(), key);
        } else if (key.getType() == DimletType.DIMLET_STRUCTURE) {
            if (randomStructureDimlets == null) {
                randomStructureDimlets = new RarityRandomSelector<>();
                setupRarity(randomStructureDimlets, rarity0, rarity1, rarity2, rarity3, rarity4, rarity5, rarity6);
            }
            randomStructureDimlets.addItem(entry.getValue().getRarity(), key);
            randomUncraftableDimlets.addItem(entry.getValue().getRarity(), key);
        } else if (key.getType() == DimletType.DIMLET_TERRAIN) {
            if (randomTerrainDimlets == null) {
                randomTerrainDimlets = new RarityRandomSelector<>();
                setupRarity(randomTerrainDimlets, rarity0, rarity1, rarity2, rarity3, rarity4, rarity5, rarity6);
            }
            randomTerrainDimlets.addItem(entry.getValue().getRarity(), key);
            randomUncraftableDimlets.addItem(entry.getValue().getRarity(), key);
        } else if (key.getType() == DimletType.DIMLET_WEATHER) {
            if (randomWeatherDimlets == null) {
                randomWeatherDimlets = new RarityRandomSelector<>();
                setupRarity(randomWeatherDimlets, rarity0, rarity1, rarity2, rarity3, rarity4, rarity5, rarity6);
            }
            randomWeatherDimlets.addItem(entry.getValue().getRarity(), key);
            randomUncraftableDimlets.addItem(entry.getValue().getRarity(), key);
        } else if (key.getType() == DimletType.DIMLET_CONTROLLER) {
            randomUncraftableDimlets.addItem(entry.getValue().getRarity(), key);
        } else if (key.getType() == DimletType.DIMLET_SKY) {
            if (randomSkyDimlets == null) {
                randomSkyDimlets = new RarityRandomSelector<>();
                setupRarity(randomSkyDimlets, rarity0, rarity1, rarity2, rarity3, rarity4, rarity5, rarity6);
            }
            randomSkyDimlets.addItem(entry.getValue().getRarity(), key);
            if (SkyRegistry.isSkyBody(key)) {
                if (randomSkyBodyDimlets == null) {
                    randomSkyBodyDimlets = new RarityRandomSelector<>();
                    setupRarity(randomSkyBodyDimlets, rarity0, rarity1, rarity2, rarity3, rarity4, rarity5, rarity6);
                }
                randomSkyBodyDimlets.addItem(entry.getValue().getRarity(), key);
            }
            randomUncraftableDimlets.addItem(entry.getValue().getRarity(), key);
        }
    }
}
Also used : RarityRandomSelector(mcjty.rftoolsdim.varia.RarityRandomSelector) Map(java.util.Map) Settings(mcjty.rftoolsdim.config.Settings)

Aggregations

RarityRandomSelector (mcjty.rftoolsdim.varia.RarityRandomSelector)2 Map (java.util.Map)1 GenericBlock (mcjty.lib.container.GenericBlock)1 Settings (mcjty.rftoolsdim.config.Settings)1 DimletKey (mcjty.rftoolsdim.dimensions.dimlets.DimletKey)1 Block (net.minecraft.block.Block)1 EntityItemFrame (net.minecraft.entity.item.EntityItemFrame)1 ItemStack (net.minecraft.item.ItemStack)1 TileEntityChest (net.minecraft.tileentity.TileEntityChest)1 BlockPos (net.minecraft.util.math.BlockPos)1