From 90f330fd97f44e44dc0662c2ea7a413ac8013e47 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 14 Aug 2015 19:25:01 +0200 Subject: [PATCH] Added an extra Whitelist for the Ore Magnet. For stuff which isn't OreDictionaried. People know what I'm talking about. --- .../config/ConfigValues.java | 3 ++ .../tile/TileEntityOreMagnet.java | 40 ++++++++++++++----- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/src/main/java/ellpeck/actuallyadditions/config/ConfigValues.java b/src/main/java/ellpeck/actuallyadditions/config/ConfigValues.java index a0d1caac1..13816054e 100644 --- a/src/main/java/ellpeck/actuallyadditions/config/ConfigValues.java +++ b/src/main/java/ellpeck/actuallyadditions/config/ConfigValues.java @@ -15,7 +15,9 @@ public class ConfigValues{ public static String[] crusherRecipeExceptions; public static String[] mashedFoodCraftingExceptions; + public static String[] oreMagnetExceptions; + public static String[] oreMagnetExtraWhitelist; public static void defineConfigValues(Configuration config){ @@ -35,5 +37,6 @@ public class ConfigValues{ crusherRecipeExceptions = config.getStringList("Crusher Recipe Exceptions", ConfigCategories.CRUSHER_RECIPES.name, new String[]{"ingotBrick", "ingotBrickNether"}, "The Ingots, Dusts and Ores blacklisted from being auto-registered to be crushed by the Crusher. This list uses OreDictionary Names of the Inputs only."); mashedFoodCraftingExceptions = config.getStringList("Mashed Food Crafting Exceptions", ConfigCategories.ITEMS_CRAFTING.name, new String[]{"ActuallyAdditions:itemCoffee"}, "The ItemFood, IGrowable and IPlantable Items that can not be used to craft Mashed Food. These are the actual registered Item Names, the ones you use, for example, when using the /give Command."); oreMagnetExceptions = config.getStringList("Ore Magnet Exceptions", ConfigCategories.MACHINE_VALUES.name, new String[0], "By default, the Ore Magnet pulls up everything that is registered in the OreDictionary as a String that starts with 'ore'. If you want any Ore not to be pulled up by the Magnet, put its ORE DICTIONARY name here."); + oreMagnetExtraWhitelist = config.getStringList("Ore Magnet Extra Whitelist", ConfigCategories.MACHINE_VALUES.name, new String[0], "By default, the Ore Magnet pulls up everything that is registered in the OreDictionary as a String that starts with 'ore'. If you want anything else to be pulled up by the Magnet, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command."); } } diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityOreMagnet.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityOreMagnet.java index 0166e121c..e189fc3f7 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityOreMagnet.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityOreMagnet.java @@ -89,21 +89,18 @@ public class TileEntityOreMagnet extends TileEntityInventoryBase implements IEne Block block = worldObj.getBlock(xCoord+x, y, zCoord+z); int meta = worldObj.getBlockMetadata(xCoord+x, y, zCoord+z); if(block != null && !block.isAir(worldObj, xCoord+x, y, zCoord+z) && !block.hasTileEntity(meta) && block.getBlockHardness(worldObj, xCoord+x, y, zCoord+z) >= 0.0F && ((block.getMaterial() != null && block.getMaterial().isToolNotRequired()) || (block.getHarvestTool(meta) == null || (block.getHarvestTool(meta).equals("pickaxe") && block.getHarvestLevel(meta) <= 3)))){ + //Check Whitelist + if(this.hasExtraWhitelist(block)){ + this.removeBlock(x, y, z, block, meta, toPlaceY); + return; + } + //Check Ores 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") && !this.hasException(oreName)){ - //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); + this.removeBlock(x, y, z, block, meta, toPlaceY); return; } } @@ -130,6 +127,19 @@ public class TileEntityOreMagnet extends TileEntityInventoryBase implements IEne } } + private void removeBlock(int x, int y, int z, Block block, int meta, int toPlaceY){ + //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); + } + private boolean hasException(String name){ for(String except : ConfigValues.oreMagnetExceptions){ if(except.equals(name)) return true; @@ -137,6 +147,16 @@ public class TileEntityOreMagnet extends TileEntityInventoryBase implements IEne return false; } + private boolean hasExtraWhitelist(Block block){ + String name = Block.blockRegistry.getNameForObject(block); + if(name != null){ + for(String list : ConfigValues.oreMagnetExtraWhitelist){ + if(list.equals(name)) return true; + } + } + return false; + } + @SideOnly(Side.CLIENT) public int getEnergyScaled(int i){ return this.storage.getEnergyStored() * i / this.storage.getMaxEnergyStored();