Skip to content
15 changes: 15 additions & 0 deletions src/main/java/net/fuzzycraft/botanichorizons/addons/BHBlocks.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,18 @@
import cpw.mods.fml.common.registry.GameRegistry;
import net.fuzzycraft.botanichorizons.addons.block.BlockAdvancedAlchemyPool;
import net.fuzzycraft.botanichorizons.addons.block.BlockAdvancedAlfPortal;
import net.fuzzycraft.botanichorizons.addons.block.BlockAdvancedAltar;
import net.fuzzycraft.botanichorizons.addons.block.BlockAdvancedApothecary;
import net.fuzzycraft.botanichorizons.addons.block.BlockAdvancedConjurationPool;
import net.fuzzycraft.botanichorizons.addons.block.BlockAdvancedCraftingPool;
import net.fuzzycraft.botanichorizons.addons.block.BlockAdvancedTerraPlate;
import net.fuzzycraft.botanichorizons.addons.tileentity.TileAdvancedAlchemyPool;
import net.fuzzycraft.botanichorizons.addons.tileentity.TileAdvancedAlfPortal;
import net.fuzzycraft.botanichorizons.addons.tileentity.TileAdvancedAltar;
import net.fuzzycraft.botanichorizons.addons.tileentity.TileAdvancedApothecary;
import net.fuzzycraft.botanichorizons.addons.tileentity.TileAdvancedConjurationPool;
import net.fuzzycraft.botanichorizons.addons.tileentity.TileAdvancedCraftingPool;
import net.fuzzycraft.botanichorizons.addons.tileentity.TileAdvancedTerraPlate;
import net.fuzzycraft.botanichorizons.mod.ForgeMod;
import net.minecraft.tileentity.TileEntity;

Expand All @@ -17,20 +23,29 @@ public final class BHBlocks {
public static BlockAdvancedAlchemyPool autoPoolAlchemy;
public static BlockAdvancedConjurationPool autoPoolConjuration;
public static BlockAdvancedAlfPortal autoPortal;
public static BlockAdvancedAltar autoAltar;
public static BlockAdvancedTerraPlate autoPlate;
public static BlockAdvancedApothecary autoApothecary;

public static void initBlocks() {
autoApothecary = new BlockAdvancedApothecary();
autoPoolInfusion = new BlockAdvancedCraftingPool();
autoPoolAlchemy = new BlockAdvancedAlchemyPool();
autoPoolConjuration = new BlockAdvancedConjurationPool();
autoAltar = new BlockAdvancedAltar();
autoPlate = new BlockAdvancedTerraPlate();
autoPortal = new BlockAdvancedAlfPortal();

registerTileEntities();
}

public static void registerTileEntities() {
registerTile(TileAdvancedApothecary.class, BlockAdvancedApothecary.NAME);
registerTile(TileAdvancedCraftingPool.class, BlockAdvancedCraftingPool.NAME);
registerTile(TileAdvancedAlchemyPool.class, BlockAdvancedAlchemyPool.NAME);
registerTile(TileAdvancedConjurationPool.class, BlockAdvancedConjurationPool.NAME);
registerTile(TileAdvancedAltar.class, BlockAdvancedAltar.NAME);
registerTile(TileAdvancedTerraPlate.class, BlockAdvancedTerraPlate.NAME);
registerTile(TileAdvancedAlfPortal.class, BlockAdvancedAlfPortal.NAME);
}

Expand Down
104 changes: 104 additions & 0 deletions src/main/java/net/fuzzycraft/botanichorizons/addons/Multiblocks.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,11 @@
import gregtech.api.enums.Mods;
import net.fuzzycraft.botanichorizons.addons.tileentity.TileAdvancedAlchemyPool;
import net.fuzzycraft.botanichorizons.addons.tileentity.TileAdvancedAlfPortal;
import net.fuzzycraft.botanichorizons.addons.tileentity.TileAdvancedAltar;
import net.fuzzycraft.botanichorizons.addons.tileentity.TileAdvancedApothecary;
import net.fuzzycraft.botanichorizons.addons.tileentity.TileAdvancedConjurationPool;
import net.fuzzycraft.botanichorizons.addons.tileentity.TileAdvancedCraftingPool;
import net.fuzzycraft.botanichorizons.addons.tileentity.TileAdvancedTerraPlate;
import net.fuzzycraft.botanichorizons.util.Constants;
import net.fuzzycraft.botanichorizons.util.multiblock.BasicBlockCheck;
import net.fuzzycraft.botanichorizons.util.multiblock.MetaBlockCheck;
Expand All @@ -22,17 +25,31 @@
public final class Multiblocks {

public static MultiblockHelper alfPortal;
public static MultiblockHelper altar;
public static MultiblockHelper apothecary;
public static MultiblockHelper poolConjuration;
public static MultiblockHelper poolAlchemy;
public static MultiblockHelper poolInfusion;
public static MultiblockHelper terraPlate;

public static MultiblockHelper placeholder;

public static void init() {
MultiblockCheck air = new BasicBlockCheck(Blocks.air);
MultiblockCheck livingWood = new MetaBlockCheck(ModBlocks.livingwood, Constants.LIVINGWOOD_META_BLOCK);
MultiblockCheck livingRock = new MetaBlockCheck(ModBlocks.livingrock, Constants.LIVINGSTONE_META_BLOCK);
MultiblockCheck livingRockSlab = new MetaBlockCheck(ModFluffBlocks.livingrockSlab, 0);
MultiblockCheck glimmerWood = new MetaBlockCheck(ModBlocks.livingwood, Constants.LIVINGWOOD_META_GLIMMERING);
MultiblockCheck manaPylon = new MetaBlockCheck(ModBlocks.pylon, Constants.PYLON_META_MANA);
MultiblockCheck naturaPylon = new MetaBlockCheck(ModBlocks.pylon, Constants.PYLON_META_NATURA);
MultiblockCheck manaPool = new BasicBlockCheck(ModBlocks.pool);
MultiblockCheck lapisBlock = new BasicBlockCheck(Blocks.lapis_block);
MultiblockCheck manaBlock = new MetaBlockCheck(ModBlocks.storage, Constants.STORAGE_META_MANASTEELBLOCK);
MultiblockCheck terraBlock = new MetaBlockCheck(ModBlocks.storage, Constants.STORAGE_META_ELEMENTIUMBLOCK);
MultiblockCheck dirt = new MetaBlockCheck(Blocks.dirt, 0);
MultiblockCheck melon = new BasicBlockCheck(Blocks.melon_block);
MultiblockCheck pumpkin = new BasicBlockCheck(Blocks.lit_pumpkin);
MultiblockCheck water = new BasicBlockCheck(Blocks.water);

// Mana pool

Expand Down Expand Up @@ -98,6 +115,89 @@ public static void init() {
" ", " lllll ", " llgll ", " lglgl ", " llgll ", " lllll ", " "
}
);

// Terrestrial Agglomeration plate

MultiblockBuilder terraBuilder = new MultiblockBuilder();
terraBuilder.setRootCharacter("x");
terraBuilder.addCheck(".", air);
terraBuilder.addCheck("b", lapisBlock);
terraBuilder.addCheck("w", livingRock);
terraBuilder.addCheck("g", terraBlock);
terraBuilder.addCheck("p", manaPylon);

terraPlate = terraBuilder.buildForMap(
new String[]{
" ", " ", " ", " ... ", " ... ", " ... ", " ", " ", " "
},
new String[]{
" ", " p p ", " ", " bbb ", " bgb ", " bbb ", " ", " p p ", " "
},
new String[]{
"bbbwwwbbb", "bbbwwwbbb", "bbbwwwbbb", "wwwbbbwww", "wwwbbbwww", "wwwbbbwww", "bbbwwwbbb", "bbbwwwbbb", "bbbwxwbbb"
}
);

// Petal apothecary

MultiblockBuilder apothecaryBuilder = new MultiblockBuilder();
apothecaryBuilder.setRootCharacter("x");
apothecaryBuilder.addCheck(".", air);
apothecaryBuilder.addCheck("w", livingWood);
apothecaryBuilder.addCheck("r", livingRock);
apothecaryBuilder.addCheck("W", water);
apothecaryBuilder.addCheck("d", dirt);
apothecaryBuilder.addCheck("P", pumpkin);
apothecaryBuilder.addCheck("M", melon);

apothecary = apothecaryBuilder.buildForMap(
new String[]{
"wrrrwrrrw", " ", " ", " ", " "
},
new String[]{
"wrrrwrrrw", " ", " P M ... ", " ... ", " "
},
new String[]{
"wrrrwrrrw", "rdddrWWWr", "rdddrWWWr", "rdddrWWWr", "rrrrxrrrr"
},
new String[]{
"wrrrwrrrw", " rrr rrr ", " rrr rrr ", " rrr rrr ", " "
}
);

// Altar

MultiblockBuilder altarBuilder = new MultiblockBuilder();
altarBuilder.setRootCharacter("x");
altarBuilder.addCheck("r", livingRock);
altarBuilder.addCheck("s", livingRockSlab);
altarBuilder.addCheck("m", manaBlock);

altar = altarBuilder.buildForMap(
new String[]{
" ", " ", " ", " x ", " ", " ", " "
},
new String[]{
" ", " sssss ", " smrms ", " sr rs ", " smrms ", " sssss ", " "
},
new String[]{
"mrrrrrm", "r r", "r r", "r r", "r r", "r r", "mrrrrrm"
}
);


// For new multiblocks

MultiblockBuilder tempBuilder = new MultiblockBuilder();
tempBuilder.setRootCharacter("x");
tempBuilder.addCheck("w", livingWood);
tempBuilder.addCheck("r", livingRock);
placeholder = tempBuilder.buildForMap(
new String[] {
"rwr", "w w", "rxr"
}
);

}

public static void postInit() {
Expand All @@ -106,6 +206,10 @@ public static void postInit() {
HoloProjectorSupport.registerOrientedWithStructureLib(poolAlchemy, BHBlocks.autoPoolAlchemy, TileAdvancedAlchemyPool.class);
HoloProjectorSupport.registerOrientedWithStructureLib(poolConjuration, BHBlocks.autoPoolConjuration, TileAdvancedConjurationPool.class);
HoloProjectorSupport.registerOrientedWithStructureLib(alfPortal, BHBlocks.autoPortal, TileAdvancedAlfPortal.class);

HoloProjectorSupport.registerOrientedWithStructureLib(apothecary, BHBlocks.autoApothecary, TileAdvancedApothecary.class);
HoloProjectorSupport.registerOrientedWithStructureLib(altar, BHBlocks.autoAltar, TileAdvancedAltar.class);
HoloProjectorSupport.registerOrientedWithStructureLib(terraPlate, BHBlocks.autoPlate, TileAdvancedTerraPlate.class);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
package net.fuzzycraft.botanichorizons.addons.block;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.fuzzycraft.botanichorizons.addons.Multiblocks;
import net.fuzzycraft.botanichorizons.addons.tileentity.TileAdvancedAltar;
import net.fuzzycraft.botanichorizons.lexicon.BHLexicon;
import net.fuzzycraft.botanichorizons.util.Facing2D;
import net.fuzzycraft.botanichorizons.util.IBlockTooltip;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.wand.IWandHUD;
import vazkii.botania.api.wand.IWandable;

import java.util.List;

import static net.fuzzycraft.botanichorizons.util.Constants.BH_ICON_PREFIX;

public class BlockAdvancedAltar extends BlockModContainer<TileAdvancedAltar> implements IWandHUD, IWandable, ILexiconable, IBlockTooltip {
public static final String NAME = "automatedAltar";

// META: bit 0 = online, bit 1..2 = 2D facing

public BlockAdvancedAltar() {
super(Material.rock);
setHardness(10.0F);
setStepSound(soundTypeStone);
setBlockName(NAME);
}

@Override
public TileAdvancedAltar createNewTileEntity(World world, int meta) {
return new TileAdvancedAltar();
}

IIcon iconPrimary;
IIcon iconSecondary;

@SideOnly(Side.CLIENT) @Override
public void registerBlockIcons(IIconRegister register) {
this.iconPrimary = register.registerIcon(BH_ICON_PREFIX + "quartzYellowTop");
this.iconSecondary = register.registerIcon(BH_ICON_PREFIX + "quartzYellowSide");
}

@SideOnly(Side.CLIENT) @Override
public IIcon getIcon(int side, int meta) {
return (side == 1 || Facing2D.fromIC2(side) == Facing2D.fromIndex(meta >> 1)) ? this.iconPrimary : this.iconSecondary;
}

@SideOnly(Side.CLIENT) @Override
public void renderHUD(Minecraft mc, ScaledResolution res, World world, int x, int y, int z) {
((TileAdvancedAltar) world.getTileEntity(x, y, z)).renderHUD(mc, res);
}

@Override
public LexiconEntry getEntry(World world, int x, int y, int z, EntityPlayer player, ItemStack lexicon) {
return BHLexicon.automatedManaPool;
}

@Override
public void onBlockPlacedBy(World worldIn, int x, int y, int z, EntityLivingBase placer, ItemStack itemIn) {
Facing2D facing = Facing2D.facingPlayer(placer);
worldIn.setBlockMetadataWithNotify(x, y, z, facing.index << 1, 3);
}

@Override
public void breakBlock(World world, int x, int y, int z, Block blockBroken, int meta) {
TileAdvancedAltar tileEntity = (TileAdvancedAltar)world.getTileEntity(x, y, z);
if (tileEntity != null) {
tileEntity.dropItems(world, x, y, z);
}
super.breakBlock(world, x, y, z, blockBroken, meta);
}

@Override
public boolean onUsedByWand(EntityPlayer player, ItemStack stack, World world, int x, int y, int z, int side) {
return ((TileAdvancedAltar)world.getTileEntity(x, y, z)).onWanded(player);
}

@Override
public int getLightValue(IBlockAccess world, int x, int y, int z) {
return (world.getBlockMetadata(x, y, z) & 1) == 0 ? 0 : 10;
}

@SideOnly(Side.CLIENT)
@Override
public void addTooltipInformation(ItemStack itemStack, List<String> tooltipStrings) {
// every rune beyond the first gets a ??% mana discount
tooltipStrings.add(I18n.format("botanichorizons.tooltip.parallels", TileAdvancedAltar.MAX_PARALLELS));
Multiblocks.poolAlchemy.addBuildInfoToTooltip(tooltipStrings);
tooltipStrings.add(I18n.format("botanichorizons.author.combuster"));
}
}
Loading