82 lines
3 KiB
Java
82 lines
3 KiB
Java
package buildcraft.builders;
|
|
|
|
import java.util.Iterator;
|
|
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.block.BlockBasePressurePlate;
|
|
import net.minecraft.block.BlockBush;
|
|
import net.minecraft.block.BlockButton;
|
|
import net.minecraft.block.BlockDynamicLiquid;
|
|
import net.minecraft.block.BlockLever;
|
|
import net.minecraft.block.BlockStairs;
|
|
import net.minecraft.block.BlockTorch;
|
|
import net.minecraft.block.IGrowable;
|
|
import net.minecraft.init.Blocks;
|
|
|
|
import net.minecraftforge.common.IPlantable;
|
|
import net.minecraftforge.fluids.FluidStack;
|
|
|
|
import buildcraft.api.blueprints.SchematicBlock;
|
|
import buildcraft.api.blueprints.SchematicFluid;
|
|
import buildcraft.builders.schematics.SchematicStairs;
|
|
import buildcraft.core.blueprints.SchematicRegistry;
|
|
import buildcraft.core.builders.schematics.SchematicBlockFloored;
|
|
import buildcraft.core.builders.schematics.SchematicIgnore;
|
|
import buildcraft.core.builders.schematics.SchematicTileCreative;
|
|
import buildcraft.core.builders.schematics.SchematicWallSide;
|
|
import buildcraft.core.lib.utils.FluidUtils;
|
|
|
|
public final class HeuristicBlockDetection {
|
|
private HeuristicBlockDetection() {
|
|
|
|
}
|
|
|
|
public static void start() {
|
|
Iterator i = Block.blockRegistry.iterator();
|
|
while (i.hasNext()) {
|
|
Block block = (Block) i.next();
|
|
if (block == null || block == Blocks.air) {
|
|
continue;
|
|
}
|
|
|
|
for (int meta = 0; meta < 16; meta++) {
|
|
if (!SchematicRegistry.INSTANCE.isSupported(block, meta)) {
|
|
try {
|
|
if (block.hasTileEntity(meta)) {
|
|
// All tiles not otherwise supported are registered
|
|
// as creative only to prevent exploitation.
|
|
SchematicRegistry.INSTANCE.registerSchematicBlock(block, meta, SchematicTileCreative.class);
|
|
continue;
|
|
}
|
|
|
|
try {
|
|
if (block instanceof BlockDynamicLiquid) {
|
|
// Fixes #3341 - not recording flowing water
|
|
SchematicRegistry.INSTANCE.registerSchematicBlock(block, meta, SchematicIgnore.class);
|
|
} else {
|
|
if (block instanceof BlockBush || block instanceof IPlantable || block instanceof IGrowable || block instanceof BlockBasePressurePlate) {
|
|
SchematicRegistry.INSTANCE.registerSchematicBlock(block, meta, SchematicBlockFloored.class);
|
|
} else if (block instanceof BlockLever || block instanceof BlockTorch || block instanceof BlockButton) {
|
|
SchematicRegistry.INSTANCE.registerSchematicBlock(block, meta, SchematicWallSide.class);
|
|
} else if (block instanceof BlockStairs) {
|
|
SchematicRegistry.INSTANCE.registerSchematicBlock(block, meta, SchematicStairs.class);
|
|
} else {
|
|
FluidStack fstack = FluidUtils.getFluidStackFromBlock(block);
|
|
if (fstack != null) {
|
|
SchematicRegistry.INSTANCE.registerSchematicBlock(block, meta, SchematicFluid.class, fstack);
|
|
} else {
|
|
SchematicRegistry.INSTANCE.registerSchematicBlock(block, meta, SchematicBlock.class);
|
|
}
|
|
}
|
|
}
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
} catch (Exception e) {
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|