diff --git a/src/main/java/refinedstorage/RSConfig.java b/src/main/java/refinedstorage/RSConfig.java index 569a1587f..b6e8ce949 100755 --- a/src/main/java/refinedstorage/RSConfig.java +++ b/src/main/java/refinedstorage/RSConfig.java @@ -71,6 +71,7 @@ public final class RSConfig { public int stackUpgradeUsage; public int interdimensionalUpgradeUsage; public int silkTouchUpgradeUsage; + public int fortuneUpgradeUsagePerFortune; //endregion //region Categories @@ -159,6 +160,7 @@ public final class RSConfig { stackUpgradeUsage = config.getInt("stack", UPGRADES, 12, 0, Integer.MAX_VALUE, "The additional energy used per Stack Upgrade"); interdimensionalUpgradeUsage = config.getInt("interdimensional", UPGRADES, 1000, 0, Integer.MAX_VALUE, "The additional energy used by the Interdimensional Upgrade"); silkTouchUpgradeUsage = config.getInt("silkTouch", UPGRADES, 15, 0, Integer.MAX_VALUE, "The additional energy used by the Silk Touch Upgrade"); + fortuneUpgradeUsagePerFortune = config.getInt("fortune", UPGRADES, 10, 0, Integer.MAX_VALUE, "The additional energy used by the Fortune Upgrade, multiplied by the level of the enchantment"); //endregion if (config.hasChanged()) { diff --git a/src/main/java/refinedstorage/apiimpl/solderer/SoldererRecipeUpgrade.java b/src/main/java/refinedstorage/apiimpl/solderer/SoldererRecipeUpgrade.java index 49da21811..a8d2ec305 100755 --- a/src/main/java/refinedstorage/apiimpl/solderer/SoldererRecipeUpgrade.java +++ b/src/main/java/refinedstorage/apiimpl/solderer/SoldererRecipeUpgrade.java @@ -16,7 +16,16 @@ public class SoldererRecipeUpgrade implements ISoldererRecipe { public SoldererRecipeUpgrade(int type) { this.result = new ItemStack(RSItems.UPGRADE, 1, type); this.rows = new ItemStack[]{ - ItemUpgrade.getRequirement(type), + ItemUpgrade.getRequirement(result), + new ItemStack(RSItems.UPGRADE, 1, 0), + new ItemStack(Items.REDSTONE) + }; + } + + public SoldererRecipeUpgrade(ItemStack result) { + this.result = result; + this.rows = new ItemStack[]{ + ItemUpgrade.getRequirement(result), new ItemStack(RSItems.UPGRADE, 1, 0), new ItemStack(Items.REDSTONE) }; diff --git a/src/main/java/refinedstorage/inventory/ItemHandlerUpgrade.java b/src/main/java/refinedstorage/inventory/ItemHandlerUpgrade.java index af1fc3d0c..ee82a3f5f 100755 --- a/src/main/java/refinedstorage/inventory/ItemHandlerUpgrade.java +++ b/src/main/java/refinedstorage/inventory/ItemHandlerUpgrade.java @@ -48,13 +48,23 @@ public class ItemHandlerUpgrade extends ItemHandlerBasic { for (int i = 0; i < getSlots(); ++i) { if (getStackInSlot(i) != null) { - usage += ItemUpgrade.getEnergyUsage(getStackInSlot(i).getItemDamage()); + usage += ItemUpgrade.getEnergyUsage(getStackInSlot(i)); } } return usage; } + public int getFortuneLevel() { + for (int i = 0; i < getSlots(); ++i) { + if (getStackInSlot(i) != null && getStackInSlot(i).getItemDamage() == ItemUpgrade.TYPE_FORTUNE) { + return ItemUpgrade.getFortuneLevel(getStackInSlot(i)); + } + } + + return 0; + } + public int getInteractStackSize() { return hasUpgrade(ItemUpgrade.TYPE_STACK) ? 64 : 1; } diff --git a/src/main/java/refinedstorage/item/ItemUpgrade.java b/src/main/java/refinedstorage/item/ItemUpgrade.java index afcd7596c..3c2d88491 100755 --- a/src/main/java/refinedstorage/item/ItemUpgrade.java +++ b/src/main/java/refinedstorage/item/ItemUpgrade.java @@ -1,13 +1,19 @@ package refinedstorage.item; +import net.minecraft.client.resources.I18n; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentData; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; import refinedstorage.RS; +import refinedstorage.RSItems; import java.util.List; @@ -18,6 +24,9 @@ public class ItemUpgrade extends ItemBase { public static final int TYPE_STACK = 4; public static final int TYPE_INTERDIMENSIONAL = 5; public static final int TYPE_SILK_TOUCH = 6; + public static final int TYPE_FORTUNE = 7; + + private static final String NBT_FORTUNE = "Fortune"; public ItemUpgrade() { super("upgrade"); @@ -27,15 +36,45 @@ public class ItemUpgrade extends ItemBase { setMaxStackSize(1); } + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer playerIn, List tooltip, boolean advanced) { + if (stack.getItemDamage() == TYPE_FORTUNE) { + tooltip.add(I18n.format("enchantment.lootBonusDigger") + " " + I18n.format("enchantment.level." + ItemUpgrade.getFortuneLevel(stack))); + } + } + @Override public void getSubItems(Item item, CreativeTabs tab, List list) { for (int i = 0; i <= 6; ++i) { list.add(new ItemStack(item, 1, i)); } + + for (int j = 1; j <= 3; ++j) { + list.add(initializeForFortune(j)); + } } - public static int getEnergyUsage(int type) { - switch (type) { + public static ItemStack initializeForFortune(int level) { + ItemStack stack = new ItemStack(RSItems.UPGRADE, 1, TYPE_FORTUNE); + stack.setTagCompound(new NBTTagCompound()); + stack.getTagCompound().setInteger(NBT_FORTUNE, level); + return stack; + } + + public static int getFortuneLevel(ItemStack stack) { + if (stack != null && stack.getItemDamage() == ItemUpgrade.TYPE_FORTUNE) { + NBTTagCompound tag = stack.getTagCompound(); + if (tag.hasKey(ItemUpgrade.NBT_FORTUNE)) { + return tag.getInteger(ItemUpgrade.NBT_FORTUNE); + } + } + + return 0; + } + + public static int getEnergyUsage(ItemStack stack) { + switch (stack.getItemDamage()) { case TYPE_RANGE: return RS.INSTANCE.config.rangeUpgradeUsage; case TYPE_SPEED: @@ -48,13 +87,15 @@ public class ItemUpgrade extends ItemBase { return RS.INSTANCE.config.interdimensionalUpgradeUsage; case TYPE_SILK_TOUCH: return RS.INSTANCE.config.silkTouchUpgradeUsage; + case TYPE_FORTUNE: + return RS.INSTANCE.config.fortuneUpgradeUsagePerFortune * ItemUpgrade.getFortuneLevel(stack); default: return 0; } } - public static ItemStack getRequirement(int type) { - switch (type) { + public static ItemStack getRequirement(ItemStack stack) { + switch (stack.getItemDamage()) { case ItemUpgrade.TYPE_RANGE: return new ItemStack(Items.ENDER_PEARL); case ItemUpgrade.TYPE_SPEED: @@ -65,6 +106,8 @@ public class ItemUpgrade extends ItemBase { return new ItemStack(Items.NETHER_STAR); case ItemUpgrade.TYPE_SILK_TOUCH: return Items.ENCHANTED_BOOK.getEnchantedItemStack(new EnchantmentData(Enchantment.getEnchantmentByLocation("silk_touch"), 1)); + case ItemUpgrade.TYPE_FORTUNE: + return Items.ENCHANTED_BOOK.getEnchantedItemStack(new EnchantmentData(Enchantment.getEnchantmentByLocation("fortune"), getFortuneLevel(stack))); default: return null; } diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 1bd7767b9..d76163bab 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -542,6 +542,9 @@ public class CommonProxy { API.instance().getSoldererRegistry().addRecipe(new SoldererRecipeUpgrade(ItemUpgrade.TYPE_INTERDIMENSIONAL)); API.instance().getSoldererRegistry().addRecipe(new SoldererRecipeUpgrade(ItemUpgrade.TYPE_SILK_TOUCH)); API.instance().getSoldererRegistry().addRecipe(new SoldererRecipeUpgrade(ItemUpgrade.TYPE_CRAFTING)); + API.instance().getSoldererRegistry().addRecipe(new SoldererRecipeUpgrade(ItemUpgrade.initializeForFortune(1))); + API.instance().getSoldererRegistry().addRecipe(new SoldererRecipeUpgrade(ItemUpgrade.initializeForFortune(2))); + API.instance().getSoldererRegistry().addRecipe(new SoldererRecipeUpgrade(ItemUpgrade.initializeForFortune(3))); GameRegistry.addShapedRecipe(new ItemStack(RSItems.UPGRADE, 1, ItemUpgrade.TYPE_STACK), "USU", diff --git a/src/main/java/refinedstorage/tile/TileDestructor.java b/src/main/java/refinedstorage/tile/TileDestructor.java index 3daa2a2c1..336646f88 100755 --- a/src/main/java/refinedstorage/tile/TileDestructor.java +++ b/src/main/java/refinedstorage/tile/TileDestructor.java @@ -69,7 +69,7 @@ public class TileDestructor extends TileMultipartNode implements IComparable, IF private ItemHandlerBasic itemFilters = new ItemHandlerBasic(9, this); private ItemHandlerFluid fluidFilters = new ItemHandlerFluid(9, this); - private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_SILK_TOUCH); + private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_SILK_TOUCH, ItemUpgrade.TYPE_FORTUNE); private int compare = IComparer.COMPARE_NBT | IComparer.COMPARE_DAMAGE; private int mode = IFilterable.WHITELIST; @@ -120,17 +120,18 @@ public class TileDestructor extends TileMultipartNode implements IComparable, IF } } else if (type == IType.ITEMS) { IBlockState frontBlockState = worldObj.getBlockState(front); + Block frontBlock = frontBlockState.getBlock(); @SuppressWarnings("deprecation") - ItemStack frontStack = frontBlockState.getBlock().getItem(worldObj, front, frontBlockState); + ItemStack frontStack = frontBlock.getItem(worldObj, front, frontBlockState); if (frontStack != null) { - if (IFilterable.canTake(itemFilters, mode, compare, frontStack)) { + if (IFilterable.canTake(itemFilters, mode, compare, frontStack) && frontBlockState.getBlockHardness(worldObj, front) != -1.0) { List drops; - if (!upgrades.hasUpgrade(ItemUpgrade.TYPE_SILK_TOUCH)) { - drops = frontBlockState.getBlock().getDrops(worldObj, front, frontBlockState, 0); - } else { + if (upgrades.hasUpgrade(ItemUpgrade.TYPE_SILK_TOUCH) && frontBlock.canSilkHarvest(worldObj, front, frontBlockState, null)) { drops = Collections.singletonList(frontStack); + } else { + drops = frontBlock.getDrops(worldObj, front, frontBlockState, upgrades.getFortuneLevel()); } for (ItemStack drop : drops) { diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index 7b8d312eb..b5dd28f27 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -213,6 +213,7 @@ item.refinedstorage:upgrade.3.name=Crafting Upgrade item.refinedstorage:upgrade.4.name=Stack Upgrade item.refinedstorage:upgrade.5.name=Interdimensional Upgrade item.refinedstorage:upgrade.6.name=Silk Touch Upgrade +item.refinedstorage:upgrade.7.name=Fortune Upgrade item.refinedstorage:storage_housing.name=Storage Housing item.refinedstorage:grid_filter.name=Grid Filter item.refinedstorage:network_card.name=Network Card \ No newline at end of file