Vinyl Tiles, Refactoring to allow for proper subclasses

This commit is contained in:
Vaern 2022-10-16 20:28:07 -07:00
parent decce7723c
commit 7e8611bebc
11 changed files with 236 additions and 175 deletions

View File

@ -13,4 +13,9 @@ public class BlockEnums {
SULFUR, SULFUR,
ASBESTOS ASBESTOS
} }
public static enum TileType {
LARGE,
SMALL
}
} }

View File

@ -3,6 +3,7 @@ package com.hbm.blocks;
import com.hbm.blocks.generic.*; import com.hbm.blocks.generic.*;
import com.hbm.blocks.generic.BlockHazard.ExtDisplayEffect; import com.hbm.blocks.generic.BlockHazard.ExtDisplayEffect;
import com.hbm.blocks.generic.BlockMotherOfAllOres.ItemRandomOreBlock; import com.hbm.blocks.generic.BlockMotherOfAllOres.ItemRandomOreBlock;
import com.hbm.blocks.BlockEnums.TileType;
import com.hbm.blocks.bomb.*; import com.hbm.blocks.bomb.*;
import com.hbm.blocks.fluid.*; import com.hbm.blocks.fluid.*;
import com.hbm.blocks.gas.*; import com.hbm.blocks.gas.*;
@ -366,7 +367,9 @@ public class ModBlocks {
public static Block cmb_brick; public static Block cmb_brick;
public static Block cmb_brick_reinforced; public static Block cmb_brick_reinforced;
public static Block vinyl_tile;
public static Block tile_lab; public static Block tile_lab;
public static Block tile_lab_cracked; public static Block tile_lab_cracked;
public static Block tile_lab_broken; public static Block tile_lab_broken;
@ -1581,7 +1584,7 @@ public class ModBlocks {
lamp_uv_off = new UVLamp(false).setBlockName("lamp_uv_off").setCreativeTab(MainRegistry.blockTab); lamp_uv_off = new UVLamp(false).setBlockName("lamp_uv_off").setCreativeTab(MainRegistry.blockTab);
lamp_uv_on = new UVLamp(true).setBlockName("lamp_uv_on").setCreativeTab(null); lamp_uv_on = new UVLamp(true).setBlockName("lamp_uv_on").setCreativeTab(null);
lamp_demon = new DemonLamp().setBlockName("lamp_demon").setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setLightLevel(1F).setHardness(3.0F).setBlockTextureName(RefStrings.MODID + ":lamp_demon"); lamp_demon = new DemonLamp().setBlockName("lamp_demon").setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setLightLevel(1F).setHardness(3.0F).setBlockTextureName(RefStrings.MODID + ":lamp_demon");
reinforced_stone = new BlockGeneric(Material.rock).setBlockName("reinforced_stone").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(3000.0F).setBlockTextureName(RefStrings.MODID + ":reinforced_stone"); reinforced_stone = new BlockGeneric(Material.rock).setBlockName("reinforced_stone").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(3000.0F).setBlockTextureName(RefStrings.MODID + ":reinforced_stone");
concrete_smooth = new BlockRadResistant(Material.rock).setBlockName("concrete_smooth").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(4000.0F).setBlockTextureName(RefStrings.MODID + ":concrete"); concrete_smooth = new BlockRadResistant(Material.rock).setBlockName("concrete_smooth").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(4000.0F).setBlockTextureName(RefStrings.MODID + ":concrete");
concrete_colored = new BlockConcreteColored(Material.rock).setBlockName("concrete_colored").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(4000.0F).setBlockTextureName(RefStrings.MODID + ":concrete"); concrete_colored = new BlockConcreteColored(Material.rock).setBlockName("concrete_colored").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(4000.0F).setBlockTextureName(RefStrings.MODID + ":concrete");
@ -1632,7 +1635,8 @@ public class ModBlocks {
brick_compound_stairs = new BlockGenericStairs(brick_compound, 0).setBlockName("brick_compound_stairs").setCreativeTab(MainRegistry.blockTab); brick_compound_stairs = new BlockGenericStairs(brick_compound, 0).setBlockName("brick_compound_stairs").setCreativeTab(MainRegistry.blockTab);
brick_asbestos_stairs = new BlockGenericStairs(brick_asbestos, 0).setBlockName("brick_asbestos_stairs").setCreativeTab(MainRegistry.blockTab); brick_asbestos_stairs = new BlockGenericStairs(brick_asbestos, 0).setBlockName("brick_asbestos_stairs").setCreativeTab(MainRegistry.blockTab);
brick_fire_stairs = new BlockGenericStairs(brick_fire, 0).setBlockName("brick_fire_stairs").setCreativeTab(MainRegistry.blockTab); brick_fire_stairs = new BlockGenericStairs(brick_fire, 0).setBlockName("brick_fire_stairs").setCreativeTab(MainRegistry.blockTab);
vinyl_tile = new BlockEnumMulti(Material.rock, TileType.class, true, true).setBlockName("vinyl_tile").setStepSound(Block.soundTypeGlass).setCreativeTab(MainRegistry.blockTab).setHardness(10.0F).setResistance(120.0F).setBlockTextureName(RefStrings.MODID + ":vinyl_tile");
tile_lab = new BlockOutgas(Material.rock, false, 5, true).setBlockName("tile_lab").setStepSound(Block.soundTypeGlass).setCreativeTab(MainRegistry.blockTab).setHardness(1.0F).setResistance(20.0F).setBlockTextureName(RefStrings.MODID + ":tile_lab"); tile_lab = new BlockOutgas(Material.rock, false, 5, true).setBlockName("tile_lab").setStepSound(Block.soundTypeGlass).setCreativeTab(MainRegistry.blockTab).setHardness(1.0F).setResistance(20.0F).setBlockTextureName(RefStrings.MODID + ":tile_lab");
tile_lab_cracked = new BlockOutgas(Material.rock, false, 5, true).setBlockName("tile_lab_cracked").setStepSound(Block.soundTypeGlass).setCreativeTab(MainRegistry.blockTab).setHardness(1.0F).setResistance(20.0F).setBlockTextureName(RefStrings.MODID + ":tile_lab_cracked"); tile_lab_cracked = new BlockOutgas(Material.rock, false, 5, true).setBlockName("tile_lab_cracked").setStepSound(Block.soundTypeGlass).setCreativeTab(MainRegistry.blockTab).setHardness(1.0F).setResistance(20.0F).setBlockTextureName(RefStrings.MODID + ":tile_lab_cracked");
@ -2740,6 +2744,8 @@ public class ModBlocks {
GameRegistry.registerBlock(cmb_brick_reinforced, ItemBlockBlastInfo.class, cmb_brick_reinforced.getUnlocalizedName()); GameRegistry.registerBlock(cmb_brick_reinforced, ItemBlockBlastInfo.class, cmb_brick_reinforced.getUnlocalizedName());
//Tiles //Tiles
GameRegistry.registerBlock(vinyl_tile, ItemBlockBlastInfo.class, vinyl_tile.getUnlocalizedName()); //i would rather die than dip into fucking blocks with subtypes again
GameRegistry.registerBlock(tile_lab, tile_lab.getUnlocalizedName()); GameRegistry.registerBlock(tile_lab, tile_lab.getUnlocalizedName());
GameRegistry.registerBlock(tile_lab_cracked, tile_lab_cracked.getUnlocalizedName()); GameRegistry.registerBlock(tile_lab_cracked, tile_lab_cracked.getUnlocalizedName());
GameRegistry.registerBlock(tile_lab_broken, tile_lab_broken.getUnlocalizedName()); GameRegistry.registerBlock(tile_lab_broken, tile_lab_broken.getUnlocalizedName());

View File

@ -39,7 +39,7 @@ public class ItemWandD extends Item {
int l = ((pos.blockZ >> 4) << 4) + 8; int l = ((pos.blockZ >> 4) << 4) + 8;
Start start = new Start(world, world.rand, pos.blockX >> 4, pos.blockZ >> 4); Start start = new Start(world, world.rand, pos.blockX >> 4, pos.blockZ >> 4);
start.generateStructure(world, world.rand, new StructureBoundingBox(k - 112, l - 112, k + 15 + 112, l + 15 + 112)); start.generateStructure(world, world.rand, new StructureBoundingBox(k - 124, l - 124, k + 15 + 124, l + 15 + 124));
/*OilSpot.generateOilSpot(world, pos.blockX, pos.blockZ, 20, 500);*/ /*OilSpot.generateOilSpot(world, pos.blockX, pos.blockZ, 20, 500);*/

View File

@ -59,5 +59,7 @@ public class HbmWorld {
MapGenStructureIO.func_143031_a(WideIntersection.class, "NTMBWideIntersection"); MapGenStructureIO.func_143031_a(WideIntersection.class, "NTMBWideIntersection");
MapGenStructureIO.func_143031_a(UtilityCloset.class, "NTMBUtilityCloset"); MapGenStructureIO.func_143031_a(UtilityCloset.class, "NTMBUtilityCloset");
MapGenStructureIO.func_143031_a(SupplyRoom.class, "NTMBSupplyRoom"); MapGenStructureIO.func_143031_a(SupplyRoom.class, "NTMBSupplyRoom");
MapGenStructureIO.func_143031_a(WasteDisposal.class, "NTMBWasteDisposal");
MapGenStructureIO.func_143031_a(Bedroom.class, "NTMBBedroom");
} }
} }

View File

@ -38,18 +38,21 @@ public class MapGenBunker extends MapGenStructure {
public Start(World world, Random rand, int chunkX, int chunkZ) { public Start(World world, Random rand, int chunkX, int chunkZ) {
super(chunkX, chunkZ); super(chunkX, chunkZ);
BunkerComponents.prepareComponents();
BunkerComponents bunker = new BunkerComponents(); //oop is confusing sometimes
bunker.prepareComponents();
Atrium atrium = new Atrium(0, rand, (chunkX << 4) + 8, (chunkZ << 4) + 8); Atrium atrium = new Atrium(0, rand, (chunkX << 4) + 8, (chunkZ << 4) + 8);
this.components.add(atrium); this.components.add(atrium);
atrium.buildComponent(atrium, components, rand); atrium.buildComponent(bunker, atrium, components, rand);
atrium.underwater = true;//rand.nextInt(2) == 0; atrium.underwater = false;//rand.nextInt(2) == 0;
List list = atrium.queuedComponents; List list = atrium.queuedComponents;
while(!list.isEmpty()) { while(!list.isEmpty()) {
int k = rand.nextInt(list.size()); int k = rand.nextInt(list.size());
ProceduralComponent component = (ProceduralComponent)list.remove(k); ProceduralComponent component = (ProceduralComponent)list.remove(k);
atrium.lastComponent = component; atrium.lastComponent = component;
component.buildComponent(atrium, this.components, rand); component.buildComponent(bunker, atrium, this.components, rand);
} }
if(GeneralConfig.enableDebugMode) { if(GeneralConfig.enableDebugMode) {

View File

@ -22,44 +22,46 @@ import net.minecraftforge.common.util.ForgeDirection;
public class BunkerComponents extends ProceduralComponents { public class BunkerComponents extends ProceduralComponents {
protected static final Weight[] weightArray = new Weight[] { public BunkerComponents() {
new Weight(8, -1, (list, rand, x, y, z, mode, type) -> { StructureBoundingBox box = ProceduralComponent.getComponentToAddBoundingBox(x, y, z, -3, -1, 0, 9, 6, 15, mode); //Corridor and Wide version weightArray = new Weight[] {
new Weight(30, -1, (list, rand, x, y, z, mode, type) -> { StructureBoundingBox box = getComponentToAddBoundingBox(x, y, z, -3, -1, 0, 9, 6, 15, mode); //Corridor and Wide version
if(box.minY > 10 && StructureComponent.findIntersecting(list, box) == null) return new WideCorridor(type, rand, box, mode); if(box.minY > 10 && StructureComponent.findIntersecting(list, box) == null) return new WideCorridor(type, rand, box, mode);
box = ProceduralComponent.getComponentToAddBoundingBox(x, y, z, -1, -1, 0, 5, 6, 15, mode); box = getComponentToAddBoundingBox(x, y, z, -1, -1, 0, 5, 6, 15, mode);
return box.minY > 10 && StructureComponent.findIntersecting(list, box) == null ? new Corridor(type, rand, box, mode) : null; }), return box.minY > 10 && StructureComponent.findIntersecting(list, box) == null ? new Corridor(type, rand, box, mode) : null; }),
new Weight(2, -1, (list, rand, x, y, z, mode, type) -> { StructureBoundingBox box = ProceduralComponent.getComponentToAddBoundingBox(x, y, z, -3, -1, 0, 9, 6, 9, mode); //Intersection and wide ver. new Weight(10, -1, (list, rand, x, y, z, mode, type) -> { StructureBoundingBox box = getComponentToAddBoundingBox(x, y, z, -3, -1, 0, 9, 6, 9, mode); //Intersection and wide ver.
if(box.minY > 10 && StructureComponent.findIntersecting(list, box) == null) return new WideIntersection(type, rand, box, mode); if(box.minY > 10 && StructureComponent.findIntersecting(list, box) == null) return new WideIntersection(type, rand, box, mode);
box = ProceduralComponent.getComponentToAddBoundingBox(x, y, z, -1, -1, 0, 5, 6, 5, mode); box = getComponentToAddBoundingBox(x, y, z, -1, -1, 0, 5, 6, 5, mode);
return box.minY > 10 && StructureComponent.findIntersecting(list, box) == null ? new Intersection(type, rand, box, mode) : null; }), return box.minY > 10 && StructureComponent.findIntersecting(list, box) == null ? new Intersection(type, rand, box, mode) : null; }),
new Weight(3, 5, (list, rand, x, y, z, mode, type) -> { StructureBoundingBox box = ProceduralComponent.getComponentToAddBoundingBox(x, y, z, -1, -1, 0, 5, 5, 4, mode); new Weight(3, 5, (list, rand, x, y, z, mode, type) -> { StructureBoundingBox box = getComponentToAddBoundingBox(x, y, z, -1, -1, 0, 5, 5, 4, mode);
return box.minY > 10 && StructureComponent.findIntersecting(list, box) == null ? new UtilityCloset(type, rand, box, mode) : null; }) { return box.minY > 10 && StructureComponent.findIntersecting(list, box) == null ? new UtilityCloset(type, rand, box, mode) : null; }) {
public boolean canSpawnStructure(int componentAmount, int coordMode, ProceduralComponent component) { public boolean canSpawnStructure(int componentAmount, int coordMode, ProceduralComponent component) {
return (this.instanceLimit < 0 || this.instancesSpawned < this.instanceLimit) && componentAmount > 6; //prevent the gimping of necessary corridors return (this.instanceLimit < 0 || this.instancesSpawned < this.instanceLimit) && componentAmount > 6; //prevent the gimping of necessary corridors
} }
}, },
new Weight(8, 4, (list, rand, x, y, z, mode, type) -> { StructureBoundingBox box = ProceduralComponent.getComponentToAddBoundingBox(x, y, z, -5, -1, 0, 13, 6, 13, mode); new Weight(8, 4, (list, rand, x, y, z, mode, type) -> { StructureBoundingBox box = getComponentToAddBoundingBox(x, y, z, -5, -1, 0, 13, 6, 13, mode);
return box.minY > 10 && StructureComponent.findIntersecting(list, box) == null ? new SupplyRoom(type, rand, box, mode) : null; }) { return box.minY > 10 && StructureComponent.findIntersecting(list, box) == null ? new SupplyRoom(type, rand, box, mode) : null; }) {
public boolean canSpawnStructure(int componentAmount, int coordMode, ProceduralComponent component) { public boolean canSpawnStructure(int componentAmount, int coordMode, ProceduralComponent component) {
return (this.instanceLimit < 0 || this.instancesSpawned < this.instanceLimit) && componentAmount > 6; //prevent the gimping of necessary corridors return (this.instanceLimit < 0 || this.instancesSpawned < this.instanceLimit) && componentAmount > 6; //prevent the gimping of necessary corridors
} }
}, },
new Weight(6, 3, (list, rand, x, y, z, mode, type) -> { StructureBoundingBox box = ProceduralComponent.getComponentToAddBoundingBox(x, y, z, -3, -1, 0, 9, 6, 9, mode); new Weight(5, 3, (list, rand, x, y, z, mode, type) -> { StructureBoundingBox box = getComponentToAddBoundingBox(x, y, z, -3, -1, 0, 9, 6, 9, mode);
return box.minY > 10 && StructureComponent.findIntersecting(list, box) == null ? new WasteDisposal(type, rand, box, mode) : null; }) { return box.minY > 10 && StructureComponent.findIntersecting(list, box) == null ? new WasteDisposal(type, rand, box, mode) : null; }) {
public boolean canSpawnStructure(int componentAmount, int coordMode, ProceduralComponent component) { public boolean canSpawnStructure(int componentAmount, int coordMode, ProceduralComponent component) {
return (this.instanceLimit < 0 || this.instancesSpawned < this.instanceLimit) && componentAmount > 6; //prevent the gimping of necessary corridors return (this.instanceLimit < 0 || this.instancesSpawned < this.instanceLimit) && componentAmount > 6; //prevent the gimping of necessary corridors
} }
}, },
}; new Weight(10, 15, (list, rand, x, y, z, mode, type) -> { StructureBoundingBox box = getComponentToAddBoundingBox(x, y, z, -1, -1, 0, 8, 6, 10, mode);
return box.minY > 10 && StructureComponent.findIntersecting(list, box) == null ? new Bedroom(type, rand, box, mode) : null; }) {
public static void prepareComponents() { public boolean canSpawnStructure(int componentAmount, int coordMode, ProceduralComponent component) {
componentWeightList = new ArrayList(); return (this.instanceLimit < 0 || this.instancesSpawned < this.instanceLimit) && componentAmount > 6; //prevent the gimping of necessary corridors
}
},
};
for(int i = 0; i < weightArray.length; i++) { sizeLimit = 100;
weightArray[i].instancesSpawned = 0; distanceLimit = 100;
componentWeightList.add(weightArray[i]);
}
} }
public static abstract class Bunker extends ProceduralComponent { public static abstract class Bunker extends ProceduralComponent {
@ -72,7 +74,7 @@ public class BunkerComponents extends ProceduralComponents {
super(componentType); super(componentType);
} }
public void buildComponent(ControlComponent original, List components, Random rand) { public void buildComponent(ProceduralComponents instance, ControlComponent original, List components, Random rand) {
checkModifiers(original); checkModifiers(original);
} }
@ -207,8 +209,8 @@ public class BunkerComponents extends ProceduralComponents {
fillWithAir(world, box, 1, 1, 1, 3, 3, 2); fillWithAir(world, box, 1, 1, 1, 3, 3, 2);
//Floor //Floor
placeBlockAtCurrentPosition(world, ModBlocks.deco_titanium, 0, 2, 0, 0, box); placeBlockAtCurrentPosition(world, ModBlocks.vinyl_tile, 0, 2, 0, 0, box);
fillWithBlocks(world, box, 1, 0, 1, 3, 0, 2, ModBlocks.deco_titanium); fillWithBlocks(world, box, 1, 0, 1, 3, 0, 2, ModBlocks.vinyl_tile);
//Wall //Wall
fillWithBlocks(world, box, 0, 1, 1, 0, 1, 2, ModBlocks.reinforced_brick); fillWithBlocks(world, box, 0, 1, 1, 0, 1, 2, ModBlocks.reinforced_brick);
fillWithBlocks(world, box, 0, 2, 1, 0, 2, 2, ModBlocks.reinforced_stone); fillWithBlocks(world, box, 0, 2, 1, 0, 2, 2, ModBlocks.reinforced_stone);
@ -329,14 +331,14 @@ public class BunkerComponents extends ProceduralComponents {
fillWithAir(world, box, 1, 1, 1, 11, 3, 11); fillWithAir(world, box, 1, 1, 1, 11, 3, 11);
//Floor //Floor
fillWithBlocks(world, box, 1, 0, 2, 1, 0, 10, ModBlocks.tile_lab); fillWithMetadataBlocks(world, box, 1, 0, 2, 1, 0, 10, ModBlocks.vinyl_tile, 1);
fillWithBlocks(world, box, 2, 0, 1, 3, 0, 11, ModBlocks.deco_titanium); fillWithBlocks(world, box, 2, 0, 1, 3, 0, 11, ModBlocks.vinyl_tile);
fillWithBlocks(world, box, 4, 0, 1, 4, 0, 11, ModBlocks.tile_lab); fillWithMetadataBlocks(world, box, 4, 0, 1, 4, 0, 11, ModBlocks.vinyl_tile, 1);
fillWithBlocks(world, box, 5, 0, 0, 7, 0, 10, ModBlocks.deco_titanium); fillWithBlocks(world, box, 5, 0, 0, 7, 0, 10, ModBlocks.vinyl_tile);
fillWithBlocks(world, box, 5, 0, 11, 7, 0, 11, ModBlocks.tile_lab); fillWithMetadataBlocks(world, box, 5, 0, 11, 7, 0, 11, ModBlocks.vinyl_tile, 1);
fillWithBlocks(world, box, 8, 0, 1, 8, 0, 11, ModBlocks.tile_lab); fillWithMetadataBlocks(world, box, 8, 0, 1, 8, 0, 11, ModBlocks.vinyl_tile, 1);
fillWithBlocks(world, box, 9, 0, 1, 10, 0, 11, ModBlocks.deco_titanium); fillWithBlocks(world, box, 9, 0, 1, 10, 0, 11, ModBlocks.vinyl_tile);
fillWithBlocks(world, box, 11, 0, 2, 11, 0, 10, ModBlocks.tile_lab); fillWithMetadataBlocks(world, box, 11, 0, 2, 11, 0, 10, ModBlocks.vinyl_tile, 1);
//Walls //Walls
fillWithBlocks(world, box, 2, 1, 0, 4, 1, 0, ModBlocks.reinforced_brick); fillWithBlocks(world, box, 2, 1, 0, 4, 1, 0, ModBlocks.reinforced_brick);
fillWithBlocks(world, box, 2, 2, 0, 4, 2, 0, ModBlocks.reinforced_stone); fillWithBlocks(world, box, 2, 2, 0, 4, 2, 0, ModBlocks.reinforced_stone);
@ -449,16 +451,16 @@ public class BunkerComponents extends ProceduralComponents {
return false; return false;
} else { } else {
//Floor //Floor
placeBlockAtCurrentPosition(world, ModBlocks.tile_lab, 0, 4, 0, 0, box); placeBlockAtCurrentPosition(world, ModBlocks.vinyl_tile, 1, 4, 0, 0, box);
fillWithBlocks(world, box, 1, 0, 1, 1, 0, 2, ModBlocks.concrete_brick_slab); fillWithBlocks(world, box, 1, 0, 1, 1, 0, 2, ModBlocks.concrete_brick_slab);
fillWithBlocks(world, box, 1, 0, 3, 1, 0, 7, ModBlocks.deco_titanium); fillWithBlocks(world, box, 1, 0, 3, 1, 0, 7, ModBlocks.vinyl_tile);
fillWithBlocks(world, box, 2, 0, 1, 2, 0, 7, ModBlocks.tile_lab); fillWithMetadataBlocks(world, box, 2, 0, 1, 2, 0, 7, ModBlocks.vinyl_tile, 1);
fillWithBlocks(world, box, 3, 0, 1, 5, 0, 3, ModBlocks.deco_titanium); fillWithBlocks(world, box, 3, 0, 1, 5, 0, 3, ModBlocks.vinyl_tile);
fillWithBlocks(world, box, 3, 0, 4, 5, 0, 4, ModBlocks.tile_lab); fillWithMetadataBlocks(world, box, 3, 0, 4, 5, 0, 4, ModBlocks.vinyl_tile, 1);
fillWithBlocks(world, box, 3, 0, 5, 5, 0, 7, ModBlocks.deco_titanium); fillWithBlocks(world, box, 3, 0, 5, 5, 0, 7, ModBlocks.vinyl_tile);
fillWithBlocks(world, box, 6, 0, 1, 6, 0, 7, ModBlocks.tile_lab); fillWithMetadataBlocks(world, box, 6, 0, 1, 6, 0, 7, ModBlocks.vinyl_tile, 1);
fillWithBlocks(world, box, 7, 0, 1, 7, 0, 2, ModBlocks.concrete_brick_slab); fillWithBlocks(world, box, 7, 0, 1, 7, 0, 2, ModBlocks.concrete_brick_slab);
fillWithBlocks(world, box, 7, 0, 3, 7, 0, 7, ModBlocks.deco_titanium); fillWithBlocks(world, box, 7, 0, 3, 7, 0, 7, ModBlocks.vinyl_tile);
//Wall //Wall
fillWithBlocks(world, box, 1, 0, 0, 1, 1, 0, ModBlocks.reinforced_brick); fillWithBlocks(world, box, 1, 0, 0, 1, 1, 0, ModBlocks.reinforced_brick);
fillWithBlocks(world, box, 2, 1, 0, 3, 1, 0, ModBlocks.reinforced_brick); fillWithBlocks(world, box, 2, 1, 0, 3, 1, 0, ModBlocks.reinforced_brick);
@ -545,8 +547,8 @@ public class BunkerComponents extends ProceduralComponents {
return false; return false;
} else { } else {
//Floor //Floor
placeBlockAtCurrentPosition(world, ModBlocks.tile_lab, 0, 2, 0, 0, box); placeBlockAtCurrentPosition(world, ModBlocks.vinyl_tile, 1, 2, 0, 0, box);
fillWithBlocks(world, box, 1, 0, 1, 6, 0, 8, ModBlocks.tile_lab); fillWithMetadataBlocks(world, box, 1, 0, 1, 6, 0, 8, ModBlocks.vinyl_tile, 1);
//Wall //Wall
fillWithBlocks(world, box, 3, 1, 0, 6, 1, 0, ModBlocks.reinforced_brick); fillWithBlocks(world, box, 3, 1, 0, 6, 1, 0, ModBlocks.reinforced_brick);
placeBlockAtCurrentPosition(world, ModBlocks.reinforced_brick, 0, 1, 1, 0, box); placeBlockAtCurrentPosition(world, ModBlocks.reinforced_brick, 0, 1, 1, 0, box);
@ -589,16 +591,16 @@ public class BunkerComponents extends ProceduralComponents {
placeBlockAtCurrentPosition(world, ModBlocks.reinforced_brick, 0, 6, 4, 8, box); placeBlockAtCurrentPosition(world, ModBlocks.reinforced_brick, 0, 6, 4, 8, box);
//Decorations //Decorations
//Bathroom TODO: figure out meta for this shit //Bathroom
placeDoor(world, box, ModBlocks.door_metal, 4, 4, 1, 8); placeDoor(world, box, ModBlocks.door_metal, 4, 4, 1, 8);
placeBlockAtCurrentPosition(world, ModBlocks.concrete_slab, 9, 5, 1, 6, box); placeBlockAtCurrentPosition(world, ModBlocks.concrete_slab, 9, 5, 1, 6, box);
placeBlockAtCurrentPosition(world, Blocks.cauldron, 0, 6, 1, 6, box); placeBlockAtCurrentPosition(world, Blocks.cauldron, 0, 6, 1, 6, box);
placeBlockAtCurrentPosition(world, Blocks.tripwire_hook, 0, 6, 2, 6, box); placeBlockAtCurrentPosition(world, Blocks.tripwire_hook, getTripwireMeta(0), 6, 2, 6, box);
placeBlockAtCurrentPosition(world, Blocks.hopper, 3, 6, 1, 8, box); placeBlockAtCurrentPosition(world, Blocks.hopper, getDecoMeta(3), 6, 1, 8, box);
placeBlockAtCurrentPosition(world, Blocks.trapdoor, 0, 6, 2, 8, box); placeBlockAtCurrentPosition(world, Blocks.trapdoor, getDecoModelMeta(0), 6, 2, 8, box);
//Furnishing TODO: figure out beds //Furnishing
//placeBlockAtCurrentPosition(world, ModBlocks.bed, 2, 4, 1, 2, box); placeBed(world, box, 2, 4, 1, 2);
//placeBlockAtCurrentPosition(world, ModBlocks.bed, 2, 5, 1, 2, box); placeBed(world, box, 2, 5, 1, 2);
fillWithMetadataBlocks(world, box, 6, 1, 1, 6, 1, 4, ModBlocks.concrete_slab, 9); fillWithMetadataBlocks(world, box, 6, 1, 1, 6, 1, 4, ModBlocks.concrete_slab, 9);
placeBlockAtCurrentPosition(world, Blocks.spruce_stairs, getStairMeta(1), 5, 1, 4, box); placeBlockAtCurrentPosition(world, Blocks.spruce_stairs, getStairMeta(1), 5, 1, 4, box);
placeBlockAtCurrentPosition(world, ModBlocks.radiorec, getDecoMeta(5), 6, 2, 1, box); placeBlockAtCurrentPosition(world, ModBlocks.radiorec, getDecoMeta(5), 6, 2, 1, box);
@ -642,15 +644,15 @@ public class BunkerComponents extends ProceduralComponents {
} }
@Override @Override
public void buildComponent(ControlComponent original, List components, Random rand) { public void buildComponent(ProceduralComponents instance, ControlComponent original, List components, Random rand) {
StructureComponent component = getNextComponentNormal(original, components, rand, 3, 1); StructureComponent component = getNextComponentNormal(instance, original, components, rand, 3, 1);
System.out.println("ComponentPZ:" + component); System.out.println("ComponentPZ:" + component);
StructureComponent componentN = getNextComponentNX(original, components, rand, 3, 1); StructureComponent componentN = getNextComponentNX(instance, original, components, rand, 3, 1);
System.out.println("ComponentNX:" + componentN); System.out.println("ComponentNX:" + componentN);
StructureComponent componentP = getNextComponentPX(original, components, rand, 3, 1); StructureComponent componentP = getNextComponentPX(instance, original, components, rand, 3, 1);
System.out.println("ComponentPX:" + componentP); System.out.println("ComponentPX:" + componentP);
} }
@ -690,19 +692,19 @@ public class BunkerComponents extends ProceduralComponents {
} }
@Override @Override
public void buildComponent(ControlComponent original, List components, Random rand) { public void buildComponent(ProceduralComponents instance, ControlComponent original, List components, Random rand) {
checkModifiers(original); checkModifiers(original);
StructureComponent component = getNextComponentNormal(original, components, rand, 1, 1); StructureComponent component = getNextComponentNormal(instance, original, components, rand, 1, 1);
extendsPZ = component != null; extendsPZ = component != null;
if(rand.nextInt(3) > 0) { if(rand.nextInt(3) > 0) {
StructureComponent componentN = getNextComponentNX(original, components, rand, 6, 1); StructureComponent componentN = getNextComponentNX(instance, original, components, rand, 6, 1);
expandsNX = componentN != null; expandsNX = componentN != null;
} }
if(rand.nextInt(3) > 0) { if(rand.nextInt(3) > 0) {
StructureComponent componentP = getNextComponentPX(original, components, rand, 6, 1); StructureComponent componentP = getNextComponentPX(instance, original, components, rand, 6, 1);
expandsPX = componentP != null; expandsPX = componentP != null;
} }
} }
@ -716,7 +718,7 @@ public class BunkerComponents extends ProceduralComponents {
int end = extendsPZ ? 14 : 13; int end = extendsPZ ? 14 : 13;
fillWithAir(world, box, 1, 1, 0, 3, 3, end); fillWithAir(world, box, 1, 1, 0, 3, 3, end);
fillWithBlocks(world, box, 1, 0, 0, 3, 0, end, ModBlocks.deco_titanium); fillWithBlocks(world, box, 1, 0, 0, 3, 0, end, ModBlocks.vinyl_tile);
//Walls //Walls
for(int x = 0; x <= 4; x += 4) { for(int x = 0; x <= 4; x += 4) {
@ -736,7 +738,7 @@ public class BunkerComponents extends ProceduralComponents {
//ExpandsNX //ExpandsNX
if(expandsNX) { if(expandsNX) {
fillWithBlocks(world, box, 0, 0, 6, 0, 0, 8, ModBlocks.deco_titanium); //Floor fillWithBlocks(world, box, 0, 0, 6, 0, 0, 8, ModBlocks.vinyl_tile); //Floor
fillWithBlocks(world, box, 0, 1, 5, 0, 3, 5, ModBlocks.concrete_pillar); //Walls fillWithBlocks(world, box, 0, 1, 5, 0, 3, 5, ModBlocks.concrete_pillar); //Walls
fillWithBlocks(world, box, 0, 1, 9, 0, 3, 9, ModBlocks.concrete_pillar); fillWithBlocks(world, box, 0, 1, 9, 0, 3, 9, ModBlocks.concrete_pillar);
fillWithAir(world, box, 0, 1, 6, 0, 3, 8); fillWithAir(world, box, 0, 1, 6, 0, 3, 8);
@ -749,7 +751,7 @@ public class BunkerComponents extends ProceduralComponents {
//ExpandsPX //ExpandsPX
if(expandsPX) { if(expandsPX) {
fillWithBlocks(world, box, 4, 0, 6, 4, 0, 8, ModBlocks.deco_titanium); fillWithBlocks(world, box, 4, 0, 6, 4, 0, 8, ModBlocks.vinyl_tile);
fillWithBlocks(world, box, 4, 1, 5, 4, 3, 5, ModBlocks.concrete_pillar); fillWithBlocks(world, box, 4, 1, 5, 4, 3, 5, ModBlocks.concrete_pillar);
fillWithBlocks(world, box, 4, 1, 9, 4, 3, 9, ModBlocks.concrete_pillar); fillWithBlocks(world, box, 4, 1, 9, 4, 3, 9, ModBlocks.concrete_pillar);
fillWithAir(world, box, 4, 1, 6, 4, 3, 8); fillWithAir(world, box, 4, 1, 6, 4, 3, 8);
@ -788,7 +790,7 @@ public class BunkerComponents extends ProceduralComponents {
private interface Wide { } //now you may ask yourself - where is that beautiful house? you may ask yourself - where does that highway go to? private interface Wide { } //now you may ask yourself - where is that beautiful house? you may ask yourself - where does that highway go to?
//you may ask yourself - am i right, am i wrong? you may say to yourself - my god, no multiple inheritance to be done! //you may ask yourself - am i right, am i wrong? you may say to yourself - my god, no multiple inheritance to be done!
private interface Bulkhead { public void setBulkheadNZ(boolean bool); private interface Bulkhead { public void setBulkheadNZ(boolean bool);
public default void flipConstitutentBulkhead(StructureComponent component, Random rand) { public default void flipConstituentBulkhead(StructureComponent component, Random rand) {
if(component instanceof Bulkhead) { if(component instanceof Bulkhead) {
Bulkhead head = (Bulkhead) component; Bulkhead head = (Bulkhead) component;
head.setBulkheadNZ(rand.nextInt(4) == 0); head.setBulkheadNZ(rand.nextInt(4) == 0);
@ -822,24 +824,24 @@ public class BunkerComponents extends ProceduralComponents {
} }
@Override @Override
public void buildComponent(ControlComponent original, List components, Random rand) { public void buildComponent(ProceduralComponents instance, ControlComponent original, List components, Random rand) {
checkModifiers(original); checkModifiers(original);
StructureComponent component = getNextComponentNormal(original, components, rand, 3, 1); StructureComponent component = getNextComponentNormal(instance, original, components, rand, 3, 1);
extendsPZ = component != null; extendsPZ = component != null;
if(component instanceof Wide) { if(component instanceof Wide) {
bulkheadPZ = false; bulkheadPZ = false;
flipConstitutentBulkhead(component, rand); flipConstituentBulkhead(component, rand);
} }
if(rand.nextInt(3) > 0) { if(rand.nextInt(3) > 0) {
StructureComponent componentN = getNextComponentNX(original, components, rand, 6, 1); StructureComponent componentN = getNextComponentNX(instance, original, components, rand, 6, 1);
expandsNX = componentN != null; expandsNX = componentN != null;
} }
if(rand.nextInt(3) > 0) { if(rand.nextInt(3) > 0) {
StructureComponent componentP = getNextComponentPX(original, components, rand, 6, 1); StructureComponent componentP = getNextComponentPX(instance, original, components, rand, 6, 1);
expandsPX = componentP != null; expandsPX = componentP != null;
} }
} }
@ -857,11 +859,11 @@ public class BunkerComponents extends ProceduralComponents {
fillWithAir(world, box, 1, 1, begin, 7, 3, end); fillWithAir(world, box, 1, 1, begin, 7, 3, end);
//Floor //Floor
fillWithBlocks(world, box, 1, 0, begin, 1, 0, end, ModBlocks.deco_titanium); fillWithBlocks(world, box, 1, 0, begin, 1, 0, end, ModBlocks.vinyl_tile);
fillWithBlocks(world, box, 2, 0, begin, 2, 0, end, ModBlocks.tile_lab); fillWithMetadataBlocks(world, box, 2, 0, begin, 2, 0, end, ModBlocks.vinyl_tile, 1);
fillWithBlocks(world, box, 3, 0, 0, 5, 0, endExtend, ModBlocks.deco_titanium); fillWithBlocks(world, box, 3, 0, 0, 5, 0, endExtend, ModBlocks.vinyl_tile);
fillWithBlocks(world, box, 6, 0, begin, 6, 0, end, ModBlocks.tile_lab); fillWithMetadataBlocks(world, box, 6, 0, begin, 6, 0, end, ModBlocks.vinyl_tile, 1);
fillWithBlocks(world, box, 7, 0, begin, 7, 0, end, ModBlocks.deco_titanium); fillWithBlocks(world, box, 7, 0, begin, 7, 0, end, ModBlocks.vinyl_tile);
int pillarMeta = getPillarMeta(8); int pillarMeta = getPillarMeta(8);
//Walls //Walls
@ -873,7 +875,7 @@ public class BunkerComponents extends ProceduralComponents {
fillWithBlocks(world, box, 0, 2, 10, 0, 2, end, ModBlocks.reinforced_stone); fillWithBlocks(world, box, 0, 2, 10, 0, 2, end, ModBlocks.reinforced_stone);
fillWithBlocks(world, box, 0, 3, 10, 0, 3, end, ModBlocks.reinforced_brick); fillWithBlocks(world, box, 0, 3, 10, 0, 3, end, ModBlocks.reinforced_brick);
fillWithBlocks(world, box, 0, 0, 6, 0, 0, 8, ModBlocks.deco_titanium); fillWithBlocks(world, box, 0, 0, 6, 0, 0, 8, ModBlocks.vinyl_tile);
fillWithBlocks(world, box, 0, 1, 5, 0, 3, 5, ModBlocks.concrete_pillar); fillWithBlocks(world, box, 0, 1, 5, 0, 3, 5, ModBlocks.concrete_pillar);
fillWithBlocks(world, box, 0, 1, 9, 0, 3, 9, ModBlocks.concrete_pillar); fillWithBlocks(world, box, 0, 1, 9, 0, 3, 9, ModBlocks.concrete_pillar);
fillWithMetadataBlocks(world, box, 0, 4, 6, 0, 4, 8, ModBlocks.concrete_pillar, pillarMeta); fillWithMetadataBlocks(world, box, 0, 4, 6, 0, 4, 8, ModBlocks.concrete_pillar, pillarMeta);
@ -893,7 +895,7 @@ public class BunkerComponents extends ProceduralComponents {
fillWithBlocks(world, box, 8, 2, 10, 8, 2, end, ModBlocks.reinforced_stone); fillWithBlocks(world, box, 8, 2, 10, 8, 2, end, ModBlocks.reinforced_stone);
fillWithBlocks(world, box, 8, 3, 10, 8, 3, end, ModBlocks.reinforced_brick); fillWithBlocks(world, box, 8, 3, 10, 8, 3, end, ModBlocks.reinforced_brick);
fillWithBlocks(world, box, 8, 0, 6, 8, 0, 8, ModBlocks.deco_titanium); fillWithBlocks(world, box, 8, 0, 6, 8, 0, 8, ModBlocks.vinyl_tile);
fillWithBlocks(world, box, 8, 1, 5, 8, 3, 5, ModBlocks.concrete_pillar); fillWithBlocks(world, box, 8, 1, 5, 8, 3, 5, ModBlocks.concrete_pillar);
fillWithBlocks(world, box, 8, 1, 9, 8, 3, 9, ModBlocks.concrete_pillar); fillWithBlocks(world, box, 8, 1, 9, 8, 3, 9, ModBlocks.concrete_pillar);
fillWithMetadataBlocks(world, box, 8, 4, 6, 8, 4, 8, ModBlocks.concrete_pillar, pillarMeta); fillWithMetadataBlocks(world, box, 8, 4, 6, 8, 4, 8, ModBlocks.concrete_pillar, pillarMeta);
@ -1006,16 +1008,16 @@ public class BunkerComponents extends ProceduralComponents {
} }
@Override @Override
public void buildComponent(ControlComponent original, List components, Random rand) { public void buildComponent(ProceduralComponents instance, ControlComponent original, List components, Random rand) {
checkModifiers(original); checkModifiers(original);
StructureComponent component = getNextComponentNormal(original, components, rand, 1, 1); StructureComponent component = getNextComponentNormal(instance, original, components, rand, 1, 1);
opensPZ = component != null; opensPZ = component != null;
StructureComponent componentN = getNextComponentNX(original, components, rand, 1, 1); StructureComponent componentN = getNextComponentNX(instance, original, components, rand, 1, 1);
opensNX = componentN != null; opensNX = componentN != null;
StructureComponent componentP = getNextComponentPX(original, components, rand, 1, 1); StructureComponent componentP = getNextComponentPX(instance, original, components, rand, 1, 1);
opensPX = componentP != null; opensPX = componentP != null;
} }
@ -1041,7 +1043,7 @@ public class BunkerComponents extends ProceduralComponents {
fillWithAir(world, box, 1, 1, 0, 3, 3, 3); fillWithAir(world, box, 1, 1, 0, 3, 3, 3);
//Floor //Floor
fillWithBlocks(world, box, 1, 0, 0, 3, 0, 3, ModBlocks.deco_titanium); fillWithBlocks(world, box, 1, 0, 0, 3, 0, 3, ModBlocks.vinyl_tile);
//Ceiling //Ceiling
int pillarMetaWE = getPillarMeta(4); int pillarMetaWE = getPillarMeta(4);
int pillarMetaNS = getPillarMeta(8); int pillarMetaNS = getPillarMeta(8);
@ -1053,7 +1055,7 @@ public class BunkerComponents extends ProceduralComponents {
placeLamp(world, box, rand, 2, 4, 2); placeLamp(world, box, rand, 2, 4, 2);
if(opensPZ) { if(opensPZ) {
fillWithBlocks(world, box, 1, 0, 4, 3, 0, 4, ModBlocks.deco_titanium); //Floor fillWithBlocks(world, box, 1, 0, 4, 3, 0, 4, ModBlocks.vinyl_tile); //Floor
fillWithBlocks(world, box, 1, 4, 3, 1, 4, 4, ModBlocks.reinforced_brick); //Ceiling fillWithBlocks(world, box, 1, 4, 3, 1, 4, 4, ModBlocks.reinforced_brick); //Ceiling
fillWithMetadataBlocks(world, box, 2, 4, 3, 2, 4, 4, ModBlocks.concrete_pillar, pillarMetaNS); fillWithMetadataBlocks(world, box, 2, 4, 3, 2, 4, 4, ModBlocks.concrete_pillar, pillarMetaNS);
fillWithBlocks(world, box, 3, 4, 3, 3, 4, 4, ModBlocks.reinforced_brick); fillWithBlocks(world, box, 3, 4, 3, 3, 4, 4, ModBlocks.reinforced_brick);
@ -1066,7 +1068,7 @@ public class BunkerComponents extends ProceduralComponents {
} }
if(opensNX) { if(opensNX) {
fillWithBlocks(world, box, 0, 0, 1, 0, 0, 3, ModBlocks.deco_titanium); //Floor fillWithBlocks(world, box, 0, 0, 1, 0, 0, 3, ModBlocks.vinyl_tile); //Floor
placeBlockAtCurrentPosition(world, ModBlocks.reinforced_brick, 0, 0, 4, 1, box); //Ceiling placeBlockAtCurrentPosition(world, ModBlocks.reinforced_brick, 0, 0, 4, 1, box); //Ceiling
fillWithMetadataBlocks(world, box, 0, 4, 2, 1, 4, 2, ModBlocks.concrete_pillar, pillarMetaWE); fillWithMetadataBlocks(world, box, 0, 4, 2, 1, 4, 2, ModBlocks.concrete_pillar, pillarMetaWE);
placeBlockAtCurrentPosition(world, ModBlocks.reinforced_brick, 0, 0, 4, 3, box); placeBlockAtCurrentPosition(world, ModBlocks.reinforced_brick, 0, 0, 4, 3, box);
@ -1079,7 +1081,7 @@ public class BunkerComponents extends ProceduralComponents {
} }
if(opensPX) { if(opensPX) {
fillWithBlocks(world, box, 4, 0, 1, 4, 0, 3, ModBlocks.deco_titanium); //Floor fillWithBlocks(world, box, 4, 0, 1, 4, 0, 3, ModBlocks.vinyl_tile); //Floor
placeBlockAtCurrentPosition(world, ModBlocks.reinforced_brick, 0, 4, 4, 1, box); //Ceiling placeBlockAtCurrentPosition(world, ModBlocks.reinforced_brick, 0, 4, 4, 1, box); //Ceiling
fillWithMetadataBlocks(world, box, 3, 4, 2, 4, 4, 2, ModBlocks.concrete_pillar, pillarMetaWE); fillWithMetadataBlocks(world, box, 3, 4, 2, 4, 4, 2, ModBlocks.concrete_pillar, pillarMetaWE);
placeBlockAtCurrentPosition(world, ModBlocks.reinforced_brick, 0, 4, 4, 3, box); placeBlockAtCurrentPosition(world, ModBlocks.reinforced_brick, 0, 4, 4, 3, box);
@ -1168,31 +1170,31 @@ public class BunkerComponents extends ProceduralComponents {
} }
@Override @Override
public void buildComponent(ControlComponent original, List components, Random rand) { public void buildComponent(ProceduralComponents instance, ControlComponent original, List components, Random rand) {
checkModifiers(original); checkModifiers(original);
StructureComponent component = getNextComponentNormal(original, components, rand, 3, 1); StructureComponent component = getNextComponentNormal(instance, original, components, rand, 3, 1);
opensPZ = component != null; opensPZ = component != null;
if(component instanceof Wide) { if(component instanceof Wide) {
bulkheadPZ = false; bulkheadPZ = false;
flipConstitutentBulkhead(component, rand); flipConstituentBulkhead(component, rand);
} }
StructureComponent componentN = getNextComponentNX(original, components, rand, 3, 1); StructureComponent componentN = getNextComponentNX(instance, original, components, rand, 3, 1);
opensNX = componentN != null; opensNX = componentN != null;
if(componentN instanceof Wide) { if(componentN instanceof Wide) {
bulkheadNX = false; bulkheadNX = false;
flipConstitutentBulkhead(component, rand); flipConstituentBulkhead(component, rand);
} }
StructureComponent componentP = getNextComponentPX(original, components, rand, 3, 1); StructureComponent componentP = getNextComponentPX(instance, original, components, rand, 3, 1);
opensPX = componentP != null; opensPX = componentP != null;
if(componentP instanceof Wide) { if(componentP instanceof Wide) {
bulkheadPX = false; bulkheadPX = false;
flipConstitutentBulkhead(component, rand); flipConstituentBulkhead(component, rand);
} }
} }
@ -1212,12 +1214,12 @@ public class BunkerComponents extends ProceduralComponents {
fillWithAir(world, box, 1, 1, 0, 7, 3, end); fillWithAir(world, box, 1, 1, 0, 7, 3, end);
//Floor //Floor
fillWithBlocks(world, box, 3, 0, 0, 5, 0, 1, ModBlocks.deco_titanium); fillWithBlocks(world, box, 3, 0, 0, 5, 0, 1, ModBlocks.vinyl_tile);
fillWithBlocks(world, box, 2, 0, start, 2, 0, 6, ModBlocks.tile_lab); fillWithMetadataBlocks(world, box, 2, 0, start, 2, 0, 6, ModBlocks.vinyl_tile, 1);
fillWithBlocks(world, box, 3, 0, 2, 5, 0, 2, ModBlocks.tile_lab); fillWithMetadataBlocks(world, box, 3, 0, 2, 5, 0, 2, ModBlocks.vinyl_tile, 1);
fillWithBlocks(world, box, 3, 0, 6, 5, 0, 6, ModBlocks.tile_lab); fillWithMetadataBlocks(world, box, 3, 0, 6, 5, 0, 6, ModBlocks.vinyl_tile, 1);
fillWithBlocks(world, box, 6, 0, start, 6, 0, 6, ModBlocks.tile_lab); fillWithMetadataBlocks(world, box, 6, 0, start, 6, 0, 6, ModBlocks.vinyl_tile, 1);
fillWithBlocks(world, box, 3, 0, 3, 5, 0, 5, ModBlocks.deco_titanium); fillWithBlocks(world, box, 3, 0, 3, 5, 0, 5, ModBlocks.vinyl_tile);
//Wall //Wall
if(!bulkheadNZ || (opensNX && !bulkheadNX)) { if(!bulkheadNZ || (opensNX && !bulkheadNX)) {
placeBlockAtCurrentPosition(world, ModBlocks.reinforced_brick, 0, 0, 1, 0, box); placeBlockAtCurrentPosition(world, ModBlocks.reinforced_brick, 0, 0, 1, 0, box);
@ -1256,11 +1258,11 @@ public class BunkerComponents extends ProceduralComponents {
fillWithAir(world, box, 1, 1, 0, 7, 3, 0); fillWithAir(world, box, 1, 1, 0, 7, 3, 0);
if(opensPZ) { if(opensPZ) {
fillWithBlocks(world, box, 1, 0, 7, 1, 0, end, ModBlocks.deco_titanium); //Floor fillWithBlocks(world, box, 1, 0, 7, 1, 0, end, ModBlocks.vinyl_tile); //Floor
fillWithBlocks(world, box, 2, 0, 7, 2, 0, end, ModBlocks.tile_lab); fillWithMetadataBlocks(world, box, 2, 0, 7, 2, 0, end, ModBlocks.vinyl_tile, 1);
fillWithBlocks(world, box, 3, 0, 7, 5, 0, 8, ModBlocks.deco_titanium); fillWithBlocks(world, box, 3, 0, 7, 5, 0, 8, ModBlocks.vinyl_tile);
fillWithBlocks(world, box, 6, 0, 7, 6, 0, end, ModBlocks.tile_lab); fillWithMetadataBlocks(world, box, 6, 0, 7, 6, 0, end, ModBlocks.vinyl_tile, 1);
fillWithBlocks(world, box, 7, 0, 7, 7, 0, end, ModBlocks.deco_titanium); fillWithBlocks(world, box, 7, 0, 7, 7, 0, end, ModBlocks.vinyl_tile);
fillWithBlocks(world, box, 1, 4, 7, 1, 4, end, ModBlocks.reinforced_brick); //Ceiling fillWithBlocks(world, box, 1, 4, 7, 1, 4, end, ModBlocks.reinforced_brick); //Ceiling
fillWithMetadataBlocks(world, box, 2, 4, 7, 2, 4, end, ModBlocks.concrete_pillar, pillarMetaNS); fillWithMetadataBlocks(world, box, 2, 4, 7, 2, 4, end, ModBlocks.concrete_pillar, pillarMetaNS);
fillWithBlocks(world, box, 3, 4, 5, 3, 4, 8, ModBlocks.reinforced_brick); fillWithBlocks(world, box, 3, 4, 5, 3, 4, 8, ModBlocks.reinforced_brick);
@ -1280,7 +1282,7 @@ public class BunkerComponents extends ProceduralComponents {
} else } else
fillWithAir(world, box, 1, 1, 8, 7, 3, 8); fillWithAir(world, box, 1, 1, 8, 7, 3, 8);
} else { } else {
fillWithBlocks(world, box, 1, 0, 7, 7, 0, 7, ModBlocks.deco_titanium); //Floor fillWithBlocks(world, box, 1, 0, 7, 7, 0, 7, ModBlocks.vinyl_tile); //Floor
fillWithBlocks(world, box, 1, 1, 8, 7, 1, 8, ModBlocks.reinforced_brick); //Wall fillWithBlocks(world, box, 1, 1, 8, 7, 1, 8, ModBlocks.reinforced_brick); //Wall
fillWithBlocks(world, box, 1, 2, 8, 7, 2, 8, ModBlocks.reinforced_stone); fillWithBlocks(world, box, 1, 2, 8, 7, 2, 8, ModBlocks.reinforced_stone);
fillWithBlocks(world, box, 1, 3, 8, 7, 3, 8, ModBlocks.reinforced_brick); fillWithBlocks(world, box, 1, 3, 8, 7, 3, 8, ModBlocks.reinforced_brick);
@ -1290,11 +1292,11 @@ public class BunkerComponents extends ProceduralComponents {
} }
if(opensNX) { if(opensNX) {
fillWithBlocks(world, box, 1, 0, start, 1, 0, 1, ModBlocks.deco_titanium); //Floor fillWithBlocks(world, box, 1, 0, start, 1, 0, 1, ModBlocks.vinyl_tile); //Floor
fillWithBlocks(world, box, right, 0, 2, 1, 0, 2, ModBlocks.tile_lab); fillWithMetadataBlocks(world, box, right, 0, 2, 1, 0, 2, ModBlocks.vinyl_tile, 1);
fillWithBlocks(world, box, 0, 0, 3, 1, 0, 5, ModBlocks.deco_titanium); fillWithBlocks(world, box, 0, 0, 3, 1, 0, 5, ModBlocks.vinyl_tile);
fillWithBlocks(world, box, right, 0, 6, 1, 0, 6, ModBlocks.tile_lab); fillWithMetadataBlocks(world, box, right, 0, 6, 1, 0, 6, ModBlocks.vinyl_tile, 1);
//Ceiling //Ceiling
fillWithMetadataBlocks(world, box, right, 4, 2, 1, 4, 2, ModBlocks.concrete_pillar, pillarMetaWE); fillWithMetadataBlocks(world, box, right, 4, 2, 1, 4, 2, ModBlocks.concrete_pillar, pillarMetaWE);
@ -1313,13 +1315,13 @@ public class BunkerComponents extends ProceduralComponents {
fillWithAir(world, box, 0, 1, 3, 0, 3, 5); fillWithAir(world, box, 0, 1, 3, 0, 3, 5);
} else { } else {
fillWithAir(world, box, 0, 1, 1, 0, 3, 7); fillWithAir(world, box, 0, 1, 1, 0, 3, 7);
placeBlockAtCurrentPosition(world, ModBlocks.deco_titanium, 0, 0, 0, 1, box); //outlier single-block placing operations placeBlockAtCurrentPosition(world, ModBlocks.vinyl_tile, 0, 0, 0, 1, box); //outlier single-block placing operations
placeBlockAtCurrentPosition(world, ModBlocks.deco_titanium, 0, 0, 0, 7, box); placeBlockAtCurrentPosition(world, ModBlocks.vinyl_tile, 0, 0, 0, 7, box);
placeBlockAtCurrentPosition(world, ModBlocks.reinforced_brick, 0, 0, 4, 1, box); placeBlockAtCurrentPosition(world, ModBlocks.reinforced_brick, 0, 0, 4, 1, box);
placeBlockAtCurrentPosition(world, ModBlocks.reinforced_brick, 0, 0, 4, 7, box); placeBlockAtCurrentPosition(world, ModBlocks.reinforced_brick, 0, 0, 4, 7, box);
} }
} else { } else {
fillWithBlocks(world, box, 1, 0, start, 1, 0, 6, ModBlocks.deco_titanium); //Floor fillWithBlocks(world, box, 1, 0, start, 1, 0, 6, ModBlocks.vinyl_tile); //Floor
fillWithBlocks(world, box, 0, 1, 1, 0, 1, 7, ModBlocks.reinforced_brick); //Wall fillWithBlocks(world, box, 0, 1, 1, 0, 1, 7, ModBlocks.reinforced_brick); //Wall
fillWithBlocks(world, box, 0, 2, 1, 0, 2, 7, ModBlocks.reinforced_stone); fillWithBlocks(world, box, 0, 2, 1, 0, 2, 7, ModBlocks.reinforced_stone);
fillWithBlocks(world, box, 0, 3, 1, 0, 3, 7, ModBlocks.reinforced_brick); fillWithBlocks(world, box, 0, 3, 1, 0, 3, 7, ModBlocks.reinforced_brick);
@ -1330,10 +1332,10 @@ public class BunkerComponents extends ProceduralComponents {
if(opensPX) { if(opensPX) {
//Floor //Floor
fillWithBlocks(world, box, 7, 0, start, 7, 0, 1, ModBlocks.deco_titanium); fillWithBlocks(world, box, 7, 0, start, 7, 0, 1, ModBlocks.vinyl_tile);
fillWithBlocks(world, box, 7, 0, 2, left, 0, 2, ModBlocks.tile_lab); fillWithMetadataBlocks(world, box, 7, 0, 2, left, 0, 2, ModBlocks.vinyl_tile, 1);
fillWithBlocks(world, box, 7, 0, 3, 8, 0, 5, ModBlocks.deco_titanium); fillWithBlocks(world, box, 7, 0, 3, 8, 0, 5, ModBlocks.vinyl_tile);
fillWithBlocks(world, box, 7, 0, 6, left, 0, 6, ModBlocks.tile_lab); fillWithMetadataBlocks(world, box, 7, 0, 6, left, 0, 6, ModBlocks.vinyl_tile, 1);
//Ceiling //Ceiling
fillWithMetadataBlocks(world, box, 7, 4, 2, left, 4, 2, ModBlocks.concrete_pillar, pillarMetaWE); fillWithMetadataBlocks(world, box, 7, 4, 2, left, 4, 2, ModBlocks.concrete_pillar, pillarMetaWE);
fillWithBlocks(world, box, 6, 4, 3, 8, 4, 3, ModBlocks.reinforced_brick); fillWithBlocks(world, box, 6, 4, 3, 8, 4, 3, ModBlocks.reinforced_brick);
@ -1351,13 +1353,13 @@ public class BunkerComponents extends ProceduralComponents {
fillWithAir(world, box, 8, 1, 3, 8, 3, 5); fillWithAir(world, box, 8, 1, 3, 8, 3, 5);
} else { } else {
fillWithAir(world, box, 8, 1, 1, 8, 3, 7); fillWithAir(world, box, 8, 1, 1, 8, 3, 7);
placeBlockAtCurrentPosition(world, ModBlocks.deco_titanium, 0, 8, 0, 1, box); placeBlockAtCurrentPosition(world, ModBlocks.vinyl_tile, 0, 8, 0, 1, box);
placeBlockAtCurrentPosition(world, ModBlocks.deco_titanium, 0, 8, 0, 7, box); placeBlockAtCurrentPosition(world, ModBlocks.vinyl_tile, 0, 8, 0, 7, box);
placeBlockAtCurrentPosition(world, ModBlocks.reinforced_brick, 0, 8, 4, 1, box); placeBlockAtCurrentPosition(world, ModBlocks.reinforced_brick, 0, 8, 4, 1, box);
placeBlockAtCurrentPosition(world, ModBlocks.reinforced_brick, 0, 8, 4, 7, box); placeBlockAtCurrentPosition(world, ModBlocks.reinforced_brick, 0, 8, 4, 7, box);
} }
} else { } else {
fillWithBlocks(world, box, 7, 0, start, 7, 0, 6, ModBlocks.deco_titanium); //Floor fillWithBlocks(world, box, 7, 0, start, 7, 0, 6, ModBlocks.vinyl_tile); //Floor
fillWithBlocks(world, box, 8, 1, 1, 8, 1, 7, ModBlocks.reinforced_brick); //Wall fillWithBlocks(world, box, 8, 1, 1, 8, 1, 7, ModBlocks.reinforced_brick); //Wall
fillWithBlocks(world, box, 8, 2, 1, 8, 2, 7, ModBlocks.reinforced_stone); fillWithBlocks(world, box, 8, 2, 1, 8, 2, 7, ModBlocks.reinforced_stone);
fillWithBlocks(world, box, 8, 3, 1, 8, 3, 7, ModBlocks.reinforced_brick); fillWithBlocks(world, box, 8, 3, 1, 8, 3, 7, ModBlocks.reinforced_brick);

View File

@ -166,7 +166,7 @@ abstract public class Component extends StructureComponent {
} }
/** /**
* Get orientation-offset metadata for BlockDecoModel * Get orientation-offset metadata for BlockDecoModel; also suitable for trapdoors
* @param metadata (0 for facing North, 1 for facing South, 2 for facing West, 3 for facing East) * @param metadata (0 for facing North, 1 for facing South, 2 for facing West, 3 for facing East)
*/ */
protected int getDecoModelMeta(int metadata) { protected int getDecoModelMeta(int metadata) {
@ -254,6 +254,52 @@ abstract public class Component extends StructureComponent {
ItemDoor.placeDoorBlock(world, posX, posY, posZ, meta, door); ItemDoor.placeDoorBlock(world, posX, posY, posZ, meta, door);
} }
//N:0 W:1 S:2 E:3
protected void placeBed(World world, StructureBoundingBox box, int meta, int featureX, int featureY, int featureZ) {
int xOffset = 0;
int zOffset = 0;
switch(meta & 3) {
default:
zOffset = 1; break;
case 1:
xOffset = -1; break;
case 2:
zOffset = -1; break;
case 3:
xOffset = 1; break;
}
switch(this.coordBaseMode) {
default: //S
break;
case 1: //W
meta = (meta + 1) % 4; break;
case 2: //N
meta ^= 2; break;
case 3: //E
meta = (meta - 1) % 4; break;
}
placeBlockAtCurrentPosition(world, Blocks.bed, meta, featureX, featureY, featureZ, box);
placeBlockAtCurrentPosition(world, Blocks.bed, meta + 8, featureX + xOffset, featureY, featureZ + zOffset, box);
}
/**Tripwire Hook: S:0 W:1 N:2 E:3 */
protected int getTripwireMeta(int metadata) {
switch(this.coordBaseMode) {
default:
return metadata;
case 1:
return (metadata + 1) % 4;
case 2:
return metadata ^ 2;
case 3:
return (metadata - 1) % 4;
}
}
/** Loot Methods **/ /** Loot Methods **/
/** /**

View File

@ -12,30 +12,22 @@ import net.minecraft.world.gen.structure.StructureComponent;
public abstract class ProceduralComponents { public abstract class ProceduralComponents {
protected static List componentWeightList; protected List componentWeightList;
static int totalWeight;
/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! IMPORTANT !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! protected static Weight[] weightArray = new Weight[] { };
* The two methods/fields below *must* be recreated in the subclasses.
* Due to poor language design, Java does not allow the overriding/creation of static abstract methods;
* due to reasonable language design, Java does not allow overriding abstract fields.
* getWeightArray() should contain an array with Weight(s) for your components.
*/
//protected static final Weight[] weightArray = new Weight[] { }; public void prepareComponents() {
/*public static void prepareComponents() {
componentWeightList = new ArrayList(); componentWeightList = new ArrayList();
for(int i = 0; i < weightArray.length; i++) { for(int i = 0; i < weightArray.length; i++) {
weightArray[i].instancesSpawned = 0; weightArray[i].instancesSpawned = 0;
componentWeightList.add(weightArray[i]); componentWeightList.add(weightArray[i]);
} }
}*/ }
protected static boolean canAddStructurePieces() { protected int getTotalWeight() {
boolean flag = false; boolean flag = false;
totalWeight = 0; int totalWeight = 0;
Weight weight; Weight weight;
for(Iterator iterator = componentWeightList.iterator(); iterator.hasNext(); totalWeight += weight.weight) { //Iterates over the entire list to find the total weight for(Iterator iterator = componentWeightList.iterator(); iterator.hasNext(); totalWeight += weight.weight) { //Iterates over the entire list to find the total weight
@ -45,12 +37,13 @@ public abstract class ProceduralComponents {
flag = true; flag = true;
} }
return flag; return flag ? totalWeight : -1;
} }
protected static ProceduralComponent getWeightedComponent(ControlComponent original, List components, Random rand, int minX, int minY, int minZ, int coordMode, int componentType) { protected ProceduralComponent getWeightedComponent(ControlComponent original, List components, Random rand, int minX, int minY, int minZ, int coordMode, int componentType) {
int totalWeight = getTotalWeight();
if(!canAddStructurePieces()) if(totalWeight < 0)
return null; return null;
for(int i = 0; i < 5; i++) { for(int i = 0; i < 5; i++) {
@ -83,12 +76,15 @@ public abstract class ProceduralComponents {
return null; return null;
} }
protected static ProceduralComponent getNextValidComponent(ControlComponent original, List components, Random rand, int minX, int minY, int minZ, int coordMode, int componentType) { protected int sizeLimit = 50;
protected int distanceLimit = 64;
protected ProceduralComponent getNextValidComponent(ControlComponent original, List components, Random rand, int minX, int minY, int minZ, int coordMode, int componentType) {
if(components.size() > 50) //Hard limit on amount of components if(components.size() > sizeLimit) //Hard limit on amount of components
return null; return null;
if(Math.abs(minX - original.getBoundingBox().minX) <= 64 && Math.abs(minZ - original.getBoundingBox().minZ) <= 64) { //Hard limit on spread of structure if(Math.abs(minX - original.getBoundingBox().minX) <= distanceLimit && Math.abs(minZ - original.getBoundingBox().minZ) <= distanceLimit) { //Hard limit on spread of structure
ProceduralComponent structure = getWeightedComponent(original, components, rand, minX, minY, minZ, coordMode, componentType + 1); //Returns null if all checks fail ProceduralComponent structure = getWeightedComponent(original, components, rand, minX, minY, minZ, coordMode, componentType + 1); //Returns null if all checks fail
@ -103,6 +99,21 @@ public abstract class ProceduralComponents {
return null; return null;
} }
public static StructureBoundingBox getComponentToAddBoundingBox(int posX, int posY, int posZ, int offsetX, int offsetY, int offsetZ, int maxX, int maxY, int maxZ, int coordMode) {
switch(coordMode) {
case 0: //South
return new StructureBoundingBox(posX + offsetX, posY + offsetY, posZ + offsetZ, posX + maxX - 1 + offsetX, posY + maxY - 1 + offsetY, posZ + maxZ - 1 + offsetZ);
case 1: //West
return new StructureBoundingBox(posX - maxZ + 1 - offsetZ, posY + offsetY, posZ + offsetX, posX - offsetZ, posY + maxY - 1 + offsetY, posZ + maxX - 1 + offsetX);
case 2: //North
return new StructureBoundingBox(posX - maxX + 1 - offsetX, posY + offsetY, posZ - maxZ + 1 - offsetZ, posX - offsetX, posY + maxY - 1 + offsetY, posZ + offsetZ);
case 3: //East
return new StructureBoundingBox(posX + offsetZ, posY + offsetY, posZ - maxX + 1 - offsetX, posX + maxZ - 1 + offsetZ, posY + maxY - 1 + offsetY, posZ - offsetX);
default:
return new StructureBoundingBox(posX + offsetX, posY + offsetY, posZ + offsetZ, posX + maxX - 1 + offsetX, posY + maxY - 1 + offsetY, posZ + maxZ - 1 + offsetZ);
}
}
/** StructureComponent that supports procedural generation */ /** StructureComponent that supports procedural generation */
public abstract static class ProceduralComponent extends Component { public abstract static class ProceduralComponent extends Component {
@ -112,19 +123,19 @@ public abstract class ProceduralComponents {
super(componentType); //Important to carry over. super(componentType); //Important to carry over.
} }
public void buildComponent(ControlComponent original, List components, Random rand) { } public void buildComponent(ProceduralComponents instance, ControlComponent original, List components, Random rand) { }
/** Gets next component in the direction this component is facing.<br>'original' refers to the initial starting component (hard distance limits), 'components' refers to the StructureStart list. */ /** Gets next component in the direction this component is facing.<br>'original' refers to the initial starting component (hard distance limits), 'components' refers to the StructureStart list. */
protected ProceduralComponent getNextComponentNormal(ControlComponent original, List components, Random rand, int offset, int offsetY) { protected ProceduralComponent getNextComponentNormal(ProceduralComponents instance, ControlComponent original, List components, Random rand, int offset, int offsetY) {
switch(this.coordBaseMode) { switch(this.coordBaseMode) {
case 0: //South case 0: //South
return getNextValidComponent(original, components, rand, this.boundingBox.minX + offset, this.boundingBox.minY + offsetY, this.boundingBox.maxZ + 1, this.coordBaseMode, this.getComponentType()); return instance.getNextValidComponent(original, components, rand, this.boundingBox.minX + offset, this.boundingBox.minY + offsetY, this.boundingBox.maxZ + 1, this.coordBaseMode, this.getComponentType());
case 1: //West case 1: //West
return getNextValidComponent(original, components, rand, this.boundingBox.minX - 1, this.boundingBox.minY + offsetY, this.boundingBox.minZ + offset, this.coordBaseMode, this.getComponentType()); return instance.getNextValidComponent(original, components, rand, this.boundingBox.minX - 1, this.boundingBox.minY + offsetY, this.boundingBox.minZ + offset, this.coordBaseMode, this.getComponentType());
case 2: //North case 2: //North
return getNextValidComponent(original, components, rand, this.boundingBox.maxX - offset, this.boundingBox.minY + offsetY, this.boundingBox.minZ - 1, this.coordBaseMode, this.getComponentType()); return instance.getNextValidComponent(original, components, rand, this.boundingBox.maxX - offset, this.boundingBox.minY + offsetY, this.boundingBox.minZ - 1, this.coordBaseMode, this.getComponentType());
case 3: //East case 3: //East
return getNextValidComponent(original, components, rand, this.boundingBox.maxX + 1, this.boundingBox.minY + offsetY, this.boundingBox.maxZ - offset, this.coordBaseMode, this.getComponentType()); return instance.getNextValidComponent(original, components, rand, this.boundingBox.maxX + 1, this.boundingBox.minY + offsetY, this.boundingBox.maxZ - offset, this.coordBaseMode, this.getComponentType());
default: default:
return null; return null;
} }
@ -132,51 +143,36 @@ public abstract class ProceduralComponents {
//Keep in mind for these methods: a given room would have its *actual entrance* opposite the side it is facing. //Keep in mind for these methods: a given room would have its *actual entrance* opposite the side it is facing.
/** Gets next component, to the West (-X) <i>relative to this component. */ /** Gets next component, to the West (-X) <i>relative to this component. */
protected ProceduralComponent getNextComponentNX(ControlComponent original, List components, Random rand, int offset, int offsetY) { protected ProceduralComponent getNextComponentNX(ProceduralComponents instance, ControlComponent original, List components, Random rand, int offset, int offsetY) {
switch(this.coordBaseMode) { switch(this.coordBaseMode) {
case 0: //South case 0: //South
return getNextValidComponent(original, components, rand, this.boundingBox.minX - 1, this.boundingBox.minY + offsetY, this.boundingBox.minZ + offset, 1, this.getComponentType()); return instance.getNextValidComponent(original, components, rand, this.boundingBox.minX - 1, this.boundingBox.minY + offsetY, this.boundingBox.minZ + offset, 1, this.getComponentType());
case 1: //West case 1: //West
return getNextValidComponent(original, components, rand, this.boundingBox.maxX - offset, this.boundingBox.minY + offsetY, this.boundingBox.minZ - 1, 2, this.getComponentType()); return instance.getNextValidComponent(original, components, rand, this.boundingBox.maxX - offset, this.boundingBox.minY + offsetY, this.boundingBox.minZ - 1, 2, this.getComponentType());
case 2: //North case 2: //North
return getNextValidComponent(original, components, rand, this.boundingBox.maxX + 1, this.boundingBox.minY + offsetY, this.boundingBox.maxZ - offset, 3, this.getComponentType()); return instance.getNextValidComponent(original, components, rand, this.boundingBox.maxX + 1, this.boundingBox.minY + offsetY, this.boundingBox.maxZ - offset, 3, this.getComponentType());
case 3: //East case 3: //East
return getNextValidComponent(original, components, rand, this.boundingBox.minX + offset, this.boundingBox.minY + offsetY, this.boundingBox.maxZ + 1, 0, this.getComponentType()); return instance.getNextValidComponent(original, components, rand, this.boundingBox.minX + offset, this.boundingBox.minY + offsetY, this.boundingBox.maxZ + 1, 0, this.getComponentType());
default: default:
return null; return null;
} }
} }
/** Gets next component, to the East (+X) <i>relative to this component. */ /** Gets next component, to the East (+X) <i>relative to this component. */
protected ProceduralComponent getNextComponentPX(ControlComponent original, List components, Random rand, int offset, int offsetY) { protected ProceduralComponent getNextComponentPX(ProceduralComponents instance, ControlComponent original, List components, Random rand, int offset, int offsetY) {
switch(this.coordBaseMode) { switch(this.coordBaseMode) {
case 0: //South case 0: //South
return getNextValidComponent(original, components, rand, this.boundingBox.maxX + 1, this.boundingBox.minY + offsetY, this.boundingBox.maxZ - offset, 1, this.getComponentType() + 1); return instance.getNextValidComponent(original, components, rand, this.boundingBox.maxX + 1, this.boundingBox.minY + offsetY, this.boundingBox.maxZ - offset, 1, this.getComponentType() + 1);
case 1: //West case 1: //West
return getNextValidComponent(original, components, rand, this.boundingBox.minZ + offset, this.boundingBox.minY + offsetY, this.boundingBox.maxZ + 1, 2, this.getComponentType() + 1); return instance.getNextValidComponent(original, components, rand, this.boundingBox.minZ + offset, this.boundingBox.minY + offsetY, this.boundingBox.maxZ + 1, 2, this.getComponentType() + 1);
case 2: //North case 2: //North
return getNextValidComponent(original, components, rand, this.boundingBox.minX - 1, this.boundingBox.minY + offsetY, this.boundingBox.minZ + offset, 3, this.getComponentType() + 1); return instance.getNextValidComponent(original, components, rand, this.boundingBox.minX - 1, this.boundingBox.minY + offsetY, this.boundingBox.minZ + offset, 3, this.getComponentType() + 1);
case 3: //East case 3: //East
return getNextValidComponent(original, components, rand, this.boundingBox.maxX - offset, this.boundingBox.minY + offsetY, this.boundingBox.minZ - 1, 0, this.getComponentType() + 1); return instance.getNextValidComponent(original, components, rand, this.boundingBox.maxX - offset, this.boundingBox.minY + offsetY, this.boundingBox.minZ - 1, 0, this.getComponentType() + 1);
default: default:
return null; return null;
} }
} }
public static StructureBoundingBox getComponentToAddBoundingBox(int posX, int posY, int posZ, int offsetX, int offsetY, int offsetZ, int maxX, int maxY, int maxZ, int coordMode) {
switch(coordMode) {
case 0: //South
return new StructureBoundingBox(posX + offsetX, posY + offsetY, posZ + offsetZ, posX + maxX - 1 + offsetX, posY + maxY - 1 + offsetY, posZ + maxZ - 1 + offsetZ);
case 1: //West
return new StructureBoundingBox(posX - maxZ + 1 - offsetZ, posY + offsetY, posZ + offsetX, posX - offsetZ, posY + maxY - 1 + offsetY, posZ + maxX - 1 + offsetX);
case 2: //North
return new StructureBoundingBox(posX - maxX + 1 - offsetX, posY + offsetY, posZ - maxZ + 1 - offsetZ, posX - offsetX, posY + maxY - 1 + offsetY, posZ + offsetZ);
case 3: //East
return new StructureBoundingBox(posX + offsetZ, posY + offsetY, posZ - maxX + 1 - offsetX, posX + maxZ - 1 + offsetZ, posY + maxY - 1 + offsetY, posZ - offsetX);
default:
return new StructureBoundingBox(posX + offsetX, posY + offsetY, posZ + offsetZ, posX + maxX - 1 + offsetX, posY + maxY - 1 + offsetY, posZ + maxZ - 1 + offsetZ);
}
}
} }
/** ProceduralComponent that can serve as a master "control component" for procedural generation and building of components. */ /** ProceduralComponent that can serve as a master "control component" for procedural generation and building of components. */
@ -198,7 +194,6 @@ public abstract class ProceduralComponents {
ProceduralComponent findValidPlacement(List components, Random rand, int minX, int minY, int minZ, int coordMode, int componentType); ProceduralComponent findValidPlacement(List components, Random rand, int minX, int minY, int minZ, int coordMode, int componentType);
} }
protected static class Weight { protected static class Weight {
public final instantiateStructure lambda; //Read above public final instantiateStructure lambda; //Read above

View File

@ -4434,6 +4434,8 @@ tile.vent_chlorine.name=Chlorine Vent
tile.vent_chlorine_seal.name=Chlorine Seal tile.vent_chlorine_seal.name=Chlorine Seal
tile.vent_cloud.name=Cloud Vent tile.vent_cloud.name=Cloud Vent
tile.vent_pink_cloud.name=Pink Cloud Vent tile.vent_pink_cloud.name=Pink Cloud Vent
tile.vinyl_tile.large.name=Large Vinyl Tile
tile.vinyl_tile.small.name=Small Vinyl Tiles
tile.vitrified_barrel.name=Vitrified Nuclear Waste Drum tile.vitrified_barrel.name=Vitrified Nuclear Waste Drum
tile.volcanic_lava_block.name=Volcanic Lava tile.volcanic_lava_block.name=Volcanic Lava
tile.volcano_core.name=Volcano Core tile.volcano_core.name=Volcano Core

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB