This commit is contained in:
Adrian Siekierka 2017-02-07 12:28:12 +01:00
parent cc9df443f7
commit 50f983bda3
3 changed files with 33 additions and 31 deletions

View file

@ -14,6 +14,7 @@ import java.io.InputStreamReader;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.List; import java.util.List;
import buildcraft.api.blueprints.*;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import net.minecraft.block.Block; import net.minecraft.block.Block;
@ -54,14 +55,6 @@ import net.minecraftforge.common.ForgeChunkManager;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.config.Property; import net.minecraftforge.common.config.Property;
import buildcraft.api.blueprints.BlueprintDeployer;
import buildcraft.api.blueprints.BuilderAPI;
import buildcraft.api.blueprints.ISchematicRegistry;
import buildcraft.api.blueprints.SchematicBlock;
import buildcraft.api.blueprints.SchematicEntity;
import buildcraft.api.blueprints.SchematicFactory;
import buildcraft.api.blueprints.SchematicMask;
import buildcraft.api.blueprints.SchematicTile;
import buildcraft.api.core.JavaTools; import buildcraft.api.core.JavaTools;
import buildcraft.api.library.LibraryAPI; import buildcraft.api.library.LibraryAPI;
import buildcraft.api.statements.StatementManager; import buildcraft.api.statements.StatementManager;
@ -141,6 +134,8 @@ import buildcraft.core.builders.schematics.SchematicRotateMeta;
import buildcraft.core.builders.schematics.SchematicRotateMetaSupported; import buildcraft.core.builders.schematics.SchematicRotateMetaSupported;
import buildcraft.core.builders.schematics.SchematicTileCreative; import buildcraft.core.builders.schematics.SchematicTileCreative;
import buildcraft.core.config.ConfigManager; import buildcraft.core.config.ConfigManager;
import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.fluids.FluidStack;
@Mod(name = "BuildCraft Builders", version = Version.VERSION, useMetadata = false, modid = "BuildCraft|Builders", dependencies = DefaultProps.DEPENDENCY_CORE) @Mod(name = "BuildCraft Builders", version = Version.VERSION, useMetadata = false, modid = "BuildCraft|Builders", dependencies = DefaultProps.DEPENDENCY_CORE)
public class BuildCraftBuilders extends BuildCraftMod { public class BuildCraftBuilders extends BuildCraftMod {

View file

@ -2,14 +2,10 @@ package buildcraft.builders;
import java.util.Iterator; import java.util.Iterator;
import net.minecraft.block.Block; import buildcraft.api.blueprints.Schematic;
import net.minecraft.block.BlockBasePressurePlate; import buildcraft.core.builders.schematics.SchematicIgnore;
import net.minecraft.block.BlockBush; import buildcraft.core.lib.utils.FluidUtils;
import net.minecraft.block.BlockButton; import net.minecraft.block.*;
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.minecraft.init.Blocks;
import net.minecraftforge.common.IPlantable; import net.minecraftforge.common.IPlantable;
@ -41,18 +37,16 @@ public final class HeuristicBlockDetection {
if (!SchematicRegistry.INSTANCE.isSupported(block, meta)) { if (!SchematicRegistry.INSTANCE.isSupported(block, meta)) {
try { try {
if (block.hasTileEntity(meta)) { if (block.hasTileEntity(meta)) {
// All tiles are registered as creative only. // All tiles not otherwise supported are registered
// This is helpful for example for server admins. // as creative only to prevent exploitation.
SchematicRegistry.INSTANCE.registerSchematicBlock(block, meta, SchematicTileCreative.class); SchematicRegistry.INSTANCE.registerSchematicBlock(block, meta, SchematicTileCreative.class);
continue; continue;
} }
try { try {
if (block instanceof IFluidBlock) { if (block instanceof BlockDynamicLiquid) {
IFluidBlock fblock = (IFluidBlock) block; // Fixes #3341 - not recording flowing water
if (fblock.getFluid() != null) { SchematicRegistry.INSTANCE.registerSchematicBlock(block, meta, SchematicIgnore.class);
SchematicRegistry.INSTANCE.registerSchematicBlock(block, meta, SchematicFluid.class, new FluidStack(fblock.getFluid(), 1000));
}
} else { } else {
if (block instanceof BlockBush || block instanceof IPlantable || block instanceof IGrowable || block instanceof BlockBasePressurePlate) { if (block instanceof BlockBush || block instanceof IPlantable || block instanceof IGrowable || block instanceof BlockBasePressurePlate) {
SchematicRegistry.INSTANCE.registerSchematicBlock(block, meta, SchematicBlockFloored.class); SchematicRegistry.INSTANCE.registerSchematicBlock(block, meta, SchematicBlockFloored.class);
@ -61,7 +55,12 @@ public final class HeuristicBlockDetection {
} else if (block instanceof BlockStairs) { } else if (block instanceof BlockStairs) {
SchematicRegistry.INSTANCE.registerSchematicBlock(block, meta, SchematicStairs.class); SchematicRegistry.INSTANCE.registerSchematicBlock(block, meta, SchematicStairs.class);
} else { } else {
SchematicRegistry.INSTANCE.registerSchematicBlock(block, meta, SchematicBlock.class); 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) { } catch (Exception e) {

View file

@ -16,6 +16,20 @@ public final class FluidUtils {
} }
public static FluidStack getFluidStackFromBlock(Block b) {
if (b != null) {
if (b instanceof IFluidBlock && ((IFluidBlock) b).getFluid() != null) {
return new FluidStack(((IFluidBlock) b).getFluid(), 1000);
} else if (b == Blocks.lava) {
return new FluidStack(FluidRegistry.getFluid("lava"), 1000);
} else if (b == Blocks.water) {
return new FluidStack(FluidRegistry.getFluid("water"), 1000);
}
}
return null;
}
public static FluidStack getFluidStackFromItemStack(ItemStack stack) { public static FluidStack getFluidStackFromItemStack(ItemStack stack) {
if (stack != null) { if (stack != null) {
if (stack.getItem() instanceof IFluidContainerItem) { if (stack.getItem() instanceof IFluidContainerItem) {
@ -26,13 +40,7 @@ public final class FluidUtils {
} else if (stack.getItem() instanceof ItemBlock) { } else if (stack.getItem() instanceof ItemBlock) {
Block b = Block.getBlockFromItem(stack.getItem()); Block b = Block.getBlockFromItem(stack.getItem());
if (b != null) { if (b != null) {
if (b instanceof IFluidBlock && ((IFluidBlock) b).getFluid() != null) { return getFluidStackFromBlock(b);
return new FluidStack(((IFluidBlock) b).getFluid(), 1000);
} else if (b == Blocks.lava) {
return new FluidStack(FluidRegistry.getFluid("lava"), 1000);
} else if (b == Blocks.water) {
return new FluidStack(FluidRegistry.getFluid("water"), 1000);
}
} }
} }
} }