diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/BlockOreMagnet.java b/src/main/java/ellpeck/actuallyadditions/blocks/BlockOreMagnet.java index c69f62b72..419fa569b 100644 --- a/src/main/java/ellpeck/actuallyadditions/blocks/BlockOreMagnet.java +++ b/src/main/java/ellpeck/actuallyadditions/blocks/BlockOreMagnet.java @@ -5,9 +5,7 @@ import cpw.mods.fml.relauncher.SideOnly; import ellpeck.actuallyadditions.ActuallyAdditions; import ellpeck.actuallyadditions.inventory.GuiHandler; import ellpeck.actuallyadditions.tile.TileEntityOreMagnet; -import ellpeck.actuallyadditions.util.BlockUtil; -import ellpeck.actuallyadditions.util.INameableItem; -import ellpeck.actuallyadditions.util.ModUtil; +import ellpeck.actuallyadditions.util.*; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; @@ -44,14 +42,15 @@ public class BlockOreMagnet extends BlockContainerBase implements INameableItem{ @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister iconReg){ - this.blockIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER + ":" + this.getName()); + this.blockIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER+":"+this.getName()); } @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, float par8, float par9){ if(!world.isRemote){ TileEntityOreMagnet magnet = (TileEntityOreMagnet)world.getTileEntity(x, y, z); - if (magnet != null) player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.ORE_MAGNET.ordinal(), world, x, y, z); + if(magnet != null) + player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.ORE_MAGNET.ordinal(), world, x, y, z); return true; } return true; @@ -92,9 +91,12 @@ public class BlockOreMagnet extends BlockContainerBase implements INameableItem{ @Override @SuppressWarnings("unchecked") @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld) { + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld){ BlockUtil.addInformation(theBlock, list, 1, ""); - //TODO Energy stuffs + BlockUtil.addPowerUsageInfo(list, TileEntityOreMagnet.energyUsePerTick); + if(KeyUtil.isShiftPressed()){ + list.add(StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".uses.desc")+" "+TileEntityOreMagnet.oilUsePerTick+" mB/t"); + } } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/config/values/ConfigCrafting.java b/src/main/java/ellpeck/actuallyadditions/config/values/ConfigCrafting.java index 574f74759..b46e31a26 100644 --- a/src/main/java/ellpeck/actuallyadditions/config/values/ConfigCrafting.java +++ b/src/main/java/ellpeck/actuallyadditions/config/values/ConfigCrafting.java @@ -128,7 +128,8 @@ public enum ConfigCrafting{ NICKEL("Nickel Ore -> Nickel Dust + Platinum Dust", ConfigCategories.CRUSHER_RECIPES, "Crusher"), IRON("Iron Ore -> Iron Dust + Gold Dust", ConfigCategories.CRUSHER_RECIPES, "Crusher"), - TELE_STAFF("Tele Staff", ConfigCategories.ITEMS_CRAFTING); + TELE_STAFF("Tele Staff", ConfigCategories.ITEMS_CRAFTING), + CASING("Casing", ConfigCategories.BLOCKS_CRAFTING); public final String name; public final String category; diff --git a/src/main/java/ellpeck/actuallyadditions/crafting/BlockCrafting.java b/src/main/java/ellpeck/actuallyadditions/crafting/BlockCrafting.java index 35fe3649f..f55abc6fb 100644 --- a/src/main/java/ellpeck/actuallyadditions/crafting/BlockCrafting.java +++ b/src/main/java/ellpeck/actuallyadditions/crafting/BlockCrafting.java @@ -90,7 +90,7 @@ public class BlockCrafting{ 'A', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.STONE_CASING.ordinal()))); //Lava Factory - if(ConfigCrafting.LAVA_FACTORY.isEnabled()){ + if(ConfigCrafting.LAVA_FACTORY.isEnabled()) GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockLavaFactoryController), " C ", "ISI", " L ", 'C', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.STONE_CASING.ordinal()), @@ -98,11 +98,12 @@ public class BlockCrafting{ 'I', "blockIron", 'L', Items.lava_bucket)); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockMisc, 4, TheMiscBlocks.LAVA_FACTORY_CASE.ordinal()), + //Casing + if(ConfigCrafting.CASING.isEnabled()) + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockMisc, 16, TheMiscBlocks.LAVA_FACTORY_CASE.ordinal()), "ICI", 'C', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.STONE_CASING.ordinal()), 'I', "blockIron")); - } //Canola Press if(ConfigCrafting.CANOLA_PRESS.isEnabled()) diff --git a/src/main/java/ellpeck/actuallyadditions/event/TooltipEvent.java b/src/main/java/ellpeck/actuallyadditions/event/TooltipEvent.java index 9d514bc7b..1d0551545 100644 --- a/src/main/java/ellpeck/actuallyadditions/event/TooltipEvent.java +++ b/src/main/java/ellpeck/actuallyadditions/event/TooltipEvent.java @@ -1,6 +1,5 @@ package ellpeck.actuallyadditions.event; -import cpw.mods.fml.common.eventhandler.EventPriority; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import ellpeck.actuallyadditions.config.values.ConfigBoolValues; import ellpeck.actuallyadditions.util.KeyUtil; @@ -15,7 +14,7 @@ public class TooltipEvent{ private static final String TEXT_PRE = StringUtil.GRAY+" "; private static final String HEADER_PRE = StringUtil.LIGHT_GRAY+" -"; - @SubscribeEvent(priority = EventPriority.LOW) + @SubscribeEvent public void onTooltipEvent(ItemTooltipEvent event){ if(event.itemStack.getItem() != null){ if(KeyUtil.isControlPressed()){ diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/ContainerEnergizer.java b/src/main/java/ellpeck/actuallyadditions/inventory/ContainerEnergizer.java index c8414fa3d..efe287df6 100644 --- a/src/main/java/ellpeck/actuallyadditions/inventory/ContainerEnergizer.java +++ b/src/main/java/ellpeck/actuallyadditions/inventory/ContainerEnergizer.java @@ -61,7 +61,6 @@ public class ContainerEnergizer extends Container{ return this.energizer.isUseableByPlayer(player); } - //TODO Armor Shift-Clicking @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ final int inventoryStart = 2; diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityOreMagnet.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityOreMagnet.java index e2b7089d1..27d8fb655 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityOreMagnet.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityOreMagnet.java @@ -5,8 +5,10 @@ import cofh.api.energy.IEnergyReceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import ellpeck.actuallyadditions.blocks.InitBlocks; +import ellpeck.actuallyadditions.blocks.metalists.TheMiscBlocks; import ellpeck.actuallyadditions.network.sync.IPacketSyncerToClient; import ellpeck.actuallyadditions.network.sync.PacketSyncerToClient; +import ellpeck.actuallyadditions.util.WorldPos; import ellpeck.actuallyadditions.util.WorldUtil; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; @@ -16,6 +18,8 @@ import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.*; import net.minecraftforge.oredict.OreDictionary; +import java.util.ArrayList; + public class TileEntityOreMagnet extends TileEntityInventoryBase implements IEnergyReceiver, IFluidHandler, IPacketSyncerToClient{ public static final int SLOT_OIL_INPUT = 0; @@ -33,8 +37,8 @@ public class TileEntityOreMagnet extends TileEntityInventoryBase implements IEne private int maxWorkTimer = 15; private int range = 10; - private int oilUsePerTick = 50; - private int energyUsePerTick = 400; + public static int oilUsePerTick = 50; + public static int energyUsePerTick = 400; public TileEntityOreMagnet(){ super(3, "oreMagnet"); @@ -45,48 +49,69 @@ public class TileEntityOreMagnet extends TileEntityInventoryBase implements IEne public void updateEntity(){ if(!worldObj.isRemote){ - if(this.storage.getEnergyStored() >= this.energyUsePerTick && this.tank.getFluid() != null && this.tank.getFluid().getFluid() == InitBlocks.fluidOil && this.tank.getFluidAmount() >= this.oilUsePerTick && !worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)){ + if(this.storage.getEnergyStored() >= energyUsePerTick && this.tank.getFluid() != null && this.tank.getFluid().getFluid() == InitBlocks.fluidOil && this.tank.getFluidAmount() >= oilUsePerTick && !worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)){ if(this.currentWorkTimer > 0){ currentWorkTimer--; if(currentWorkTimer <= 0){ - int x = MathHelper.getRandomIntegerInRange(worldObj.rand, -range, range); - int z = MathHelper.getRandomIntegerInRange(worldObj.rand, -range, range); - //Can the block at the top be replaced? - for(int toPlaceY = 0; toPlaceY < 5; toPlaceY++){ - if(worldObj.isAirBlock(xCoord+x, yCoord+toPlaceY, zCoord+z) || worldObj.getBlock(xCoord+x, yCoord+toPlaceY, zCoord+z).isReplaceable(worldObj, xCoord+x, yCoord+toPlaceY, zCoord+z)){ - //Find the first available block - for(int y = this.yCoord-1; y > 0; y--){ - Block block = worldObj.getBlock(xCoord+x, y, zCoord+z); - int meta = worldObj.getBlockMetadata(xCoord+x, y, zCoord+z); + //The possible positions where ores can be mined up in RELATIVE COORDINATES!! + ArrayList possiblePlacingPositions = new ArrayList(); - int[] oreIDs = OreDictionary.getOreIDs(new ItemStack(block, 1, meta)); - for(int ID : oreIDs){ - String oreName = OreDictionary.getOreName(ID); - //Is the block an ore according to the OreDictionary? - if(oreName.substring(0, 3).equals("ore")){ - //Remove the Block - worldObj.setBlockToAir(xCoord+x, y, zCoord+z); - worldObj.playAuxSFX(2001, xCoord+x, y, zCoord+z, Block.getIdFromBlock(block)+(meta << 12)); - - //Set the Block at the Top again - worldObj.setBlock(xCoord+x, yCoord+toPlaceY, zCoord+z, block, meta, 2); - worldObj.playSoundEffect((double)xCoord+x+0.5D, (double)yCoord+toPlaceY+0.5D, (double)zCoord+z+0.5D, block.stepSound.func_150496_b(), (block.stepSound.getVolume()+1.0F)/2.0F, block.stepSound.getPitch()*0.8F); - - //Extract oil - this.tank.drain(this.oilUsePerTick, true); - return; + for(int x = -range; x <= range; x++){ + for(int z = -range; z <= range; z++){ + //Check if there is a casing below the Block to mine + if(WorldUtil.hasBlocksInPlacesGiven(new int[][]{{x, -1, z}}, InitBlocks.blockMisc, TheMiscBlocks.LAVA_FACTORY_CASE.ordinal(), worldObj, xCoord, yCoord, zCoord)){ + //Can the block at the top be replaced? + for(int toPlaceY = 0; toPlaceY < 5; toPlaceY++){ + Block block = worldObj.getBlock(xCoord+x, yCoord+toPlaceY, zCoord+z); + //Check if the Block is okay to be replaced + if(block.isAir(worldObj, xCoord+x, yCoord+toPlaceY, zCoord+z) || block.isReplaceable(worldObj, xCoord+x, yCoord+toPlaceY, zCoord+z)){ + //Add it to the possible positions + possiblePlacingPositions.add(new WorldPos(worldObj, x, toPlaceY, z)); + //Only add the lowest Block, you don't want to make random floating towers, duh! + break; } } } } } + + if(!possiblePlacingPositions.isEmpty()){ + //Get a random placing Position + WorldPos randomPlacingPos = possiblePlacingPositions.get(worldObj.rand.nextInt(possiblePlacingPositions.size())); + int x = randomPlacingPos.getX(); + int z = randomPlacingPos.getZ(); + int toPlaceY = randomPlacingPos.getY(); + //Find the first available block + for(int y = this.yCoord-1; y > 0; y--){ + Block block = worldObj.getBlock(xCoord+x, y, zCoord+z); + int meta = worldObj.getBlockMetadata(xCoord+x, y, zCoord+z); + int[] oreIDs = OreDictionary.getOreIDs(new ItemStack(block, 1, meta)); + for(int ID : oreIDs){ + String oreName = OreDictionary.getOreName(ID); + //Is the block an ore according to the OreDictionary? + if(oreName.substring(0, 3).equals("ore")){ + //Remove the Block + worldObj.setBlockToAir(xCoord+x, y, zCoord+z); + worldObj.playAuxSFX(2001, xCoord+x, y, zCoord+z, Block.getIdFromBlock(block)+(meta << 12)); + + //Set the Block at the Top again + worldObj.setBlock(xCoord+x, yCoord+toPlaceY, zCoord+z, block, meta, 2); + worldObj.playSoundEffect((double)xCoord+x+0.5D, (double)yCoord+toPlaceY+0.5D, (double)zCoord+z+0.5D, block.stepSound.func_150496_b(), (block.stepSound.getVolume()+1.0F)/2.0F, block.stepSound.getPitch()*0.8F); + + //Extract oil + this.tank.drain(oilUsePerTick, true); + return; + } + } + } + } } } else this.currentWorkTimer = maxWorkTimer+MathHelper.getRandomIntegerInRange(worldObj.rand, 0, maxWorkTimer); //Extract energy - this.storage.extractEnergy(this.energyUsePerTick, false); + this.storage.extractEnergy(energyUsePerTick, false); } //Update Clients diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 2dc6bdbb5..7a033fc4f 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -118,12 +118,12 @@ tooltip.actuallyadditions.blockPhantomBreaker.desc.1=Breaks Blocks from a distan tooltip.actuallyadditions.blockPhantomBreaker.desc.2=Sneak-Right-Click with an empty hand to see its Connections! tile.actuallyadditions.blockLavaFactoryController.name=Lava Factory Controller -tooltip.actuallyadditions.blockLavaFactoryController.desc.1=Place Lava Factory Casings around in the right way to produce Lava: +tooltip.actuallyadditions.blockLavaFactoryController.desc.1=Place Casings around in the right way to produce Lava: tooltip.actuallyadditions.blockLavaFactoryController.desc.2=Go one block up above the Controller, that's where Lava is going to land tooltip.actuallyadditions.blockLavaFactoryController.desc.3=Place 4 Casings around that empty space so that it is encased -tile.actuallyadditions.blockMiscLavaFactoryCase.name=Lava Factory Casing -tooltip.actuallyadditions.blockMiscLavaFactoryCase.desc=Helps the Lava Factory Controller generate Lava +tile.actuallyadditions.blockMiscLavaFactoryCase.name=Casing +tooltip.actuallyadditions.blockMiscLavaFactoryCase.desc=A Casing for the Lava Factory and more. tile.actuallyadditions.blockFluidPlacer.name=Fluid Placer tooltip.actuallyadditions.blockFluidPlacer.desc=Places Fluids stored inside it