/* * Copyright (c) CovertJaguar, 2014 http://railcraft.info * * This code is the property of CovertJaguar * and may only be used with explicit written * permission unless otherwise specified on the * license page at http://railcraft.info/wiki/info:license. */ package mods.railcraft.common.blocks.aesthetics.post; import java.util.HashSet; import java.util.Set; import mods.railcraft.api.core.IPostConnection; import mods.railcraft.api.core.IPostConnection.ConnectStyle; import mods.railcraft.common.blocks.aesthetics.lantern.BlockLantern; import mods.railcraft.common.blocks.signals.ISignalTile; import mods.railcraft.common.plugins.forge.WorldPlugin; import mods.railcraft.common.util.misc.Game; import mods.railcraft.common.util.misc.MiscTools; import net.minecraft.block.Block; import net.minecraft.block.BlockSign; import net.minecraft.init.Blocks; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.IBlockAccess; import net.minecraftforge.common.util.ForgeDirection; /** * * @author CovertJaguar <http://www.railcraft.info/> */ public class PostConnectionHelper { public static final Set<Block> canConnect = new HashSet<Block>(); public static final Set<Block> noConnect = new HashSet<Block>(); static { canConnect.add(Blocks.glowstone); canConnect.add(Blocks.redstone_lamp); canConnect.add(Blocks.lit_redstone_lamp); canConnect.add(Blocks.glass); canConnect.add(Blocks.mob_spawner); canConnect.add(Blocks.piston); noConnect.add(Blocks.dirt); noConnect.add(Blocks.stone); noConnect.add(Blocks.gravel); noConnect.add(Blocks.grass); noConnect.add(Blocks.sand); noConnect.add(Blocks.bedrock); noConnect.add(Blocks.coal_ore); noConnect.add(Blocks.diamond_ore); noConnect.add(Blocks.emerald_ore); noConnect.add(Blocks.gold_ore); noConnect.add(Blocks.iron_ore); noConnect.add(Blocks.lapis_ore); noConnect.add(Blocks.redstone_ore); noConnect.add(Blocks.lit_redstone_ore); noConnect.add(Blocks.clay); noConnect.add(Blocks.snow); noConnect.add(Blocks.snow_layer); noConnect.add(Blocks.melon_block); noConnect.add(Blocks.pumpkin); noConnect.add(Blocks.tnt); noConnect.add(Blocks.soul_sand); noConnect.add(Blocks.netherrack); noConnect.add(Blocks.sponge); } public static ConnectStyle connect(IBlockAccess world, int x1, int y1, int z1, ForgeDirection side) { Block block = WorldPlugin.getBlock(world, x1, y1, z1); if (block instanceof IPostConnection && ((IPostConnection) block).connectsToPost(world, x1, y1, z1, side) == ConnectStyle.NONE) return ConnectStyle.NONE; int x2 = MiscTools.getXOnSide(x1, side); int y2 = MiscTools.getYOnSide(y1, side); int z2 = MiscTools.getZOnSide(z1, side); if (world.isAirBlock(x2, y2, z2)) return ConnectStyle.NONE; Block otherBlock = WorldPlugin.getBlock(world, x2, y2, z2); ForgeDirection oppositeSide = side.getOpposite(); try { if (otherBlock instanceof IPostConnection) return ((IPostConnection) otherBlock).connectsToPost(world, x2, y2, z2, oppositeSide); } catch (Error error) { Game.logErrorAPI("Railcraft", error, IPostConnection.class); } if (otherBlock instanceof BlockPostBase) return ConnectStyle.TWO_THIN; if (noConnect.contains(otherBlock)) return ConnectStyle.NONE; if (canConnect.contains(otherBlock)) return ConnectStyle.TWO_THIN; if (otherBlock instanceof BlockSign) { int meta = world.getBlockMetadata(x2, y2, z2); return meta == side.ordinal() ? ConnectStyle.SINGLE_THICK : ConnectStyle.NONE; } if (otherBlock instanceof BlockLantern) return ConnectStyle.SINGLE_THICK; TileEntity otherTile = world.getTileEntity(x2, y2, z2); if (otherTile instanceof ISignalTile) return ConnectStyle.TWO_THIN; if (world.isSideSolid(x2, y2, z2, oppositeSide, false)) return ConnectStyle.TWO_THIN; // RedPower 2 compat // if (Blocks.blocksList[id] != null && Blocks.blocksList[id].getClass().getSimpleName().equals("BlockShapedLamp")) { // return true; // } return ConnectStyle.NONE; } }