buildcraft/common/buildcraft/builders/HeuristicBlockDetection.java
2017-02-07 12:34:18 +01:00

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) {
}
}
}
}
}
}