From 9ac63779933e84db125e42f7c2d5231ef6e548d6 Mon Sep 17 00:00:00 2001 From: ljfa-ag Date: Sun, 21 Jun 2015 15:32:13 +0200 Subject: [PATCH] Cache values of isBlockOre for Magnetism ritual --- .../common/rituals/RitualEffectMagnetic.java | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectMagnetic.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectMagnetic.java index 07fa0389..dd099f52 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectMagnetic.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectMagnetic.java @@ -1,11 +1,14 @@ package WayofTime.alchemicalWizardry.common.rituals; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import net.minecraft.block.Block; import net.minecraft.block.BlockOre; import net.minecraft.block.BlockRedstoneOre; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; @@ -16,6 +19,7 @@ import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; +import WayofTime.alchemicalWizardry.common.ItemType; import WayofTime.alchemicalWizardry.common.block.BlockTeleposer; public class RitualEffectMagnetic extends RitualEffect @@ -24,15 +28,29 @@ public class RitualEffectMagnetic extends RitualEffect private static final int terraeDrain = 10; private static final int orbisTerraeDrain = 10; + private static final Map oreBlockCache = new HashMap(); + public static boolean isBlockOre(Block block, int meta) { - if (block == null) + if (block == null || Item.getItemFromBlock(block) == null) return false; if (block instanceof BlockOre || block instanceof BlockRedstoneOre) return true; - ItemStack itemStack = new ItemStack(block, 1, meta); + ItemType type = new ItemType(block, meta); + Boolean result = oreBlockCache.get(type); + if (result == null) + { + result = computeIsItemOre(type); + oreBlockCache.put(type, result); + } + return result; + } + + private static boolean computeIsItemOre(ItemType type) + { + ItemStack itemStack = type.createStack(1); for (int id : OreDictionary.getOreIDs(itemStack)) { String oreName = OreDictionary.getOreName(id); @@ -75,6 +93,7 @@ public class RitualEffectMagnetic extends RitualEffect int zRep = 0; boolean replace = false; + outer: for (int j = 1; j <= 3; j++) { for (int i = -1; i <= 1; i++) @@ -87,7 +106,7 @@ public class RitualEffectMagnetic extends RitualEffect yRep = y + j; zRep = z + k; replace = true; - break; + break outer; } } }