package com.jaquadro.minecraft.storagedrawers.config; import com.jaquadro.minecraft.chameleon.util.ItemResourceLocation; import com.jaquadro.minecraft.storagedrawers.StorageDrawers; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.Loader; import net.minecraftforge.oredict.OreDictionary; import java.util.ArrayList; import java.util.List; public class CompTierRegistry { public class Record { public ItemStack upper; public ItemStack lower; public int convRate; } private List<Record> records = new ArrayList<Record>(); public CompTierRegistry () { if (StorageDrawers.config.cache.registerExtraCompRules) { register(new ItemStack(Blocks.CLAY), new ItemStack(Items.CLAY_BALL), 4); register(new ItemStack(Blocks.SNOW), new ItemStack(Items.SNOWBALL), 4); register(new ItemStack(Blocks.GLOWSTONE), new ItemStack(Items.GLOWSTONE_DUST), 4); register(new ItemStack(Blocks.BRICK_BLOCK), new ItemStack(Items.BRICK), 4); register(new ItemStack(Blocks.NETHER_BRICK), new ItemStack(Items.NETHERBRICK), 4); register(new ItemStack(Blocks.NETHER_WART_BLOCK), new ItemStack(Items.NETHER_WART), 9); register(new ItemStack(Blocks.QUARTZ_BLOCK), new ItemStack(Items.QUARTZ), 4); register(new ItemStack(Blocks.MELON_BLOCK), new ItemStack(Items.MELON), 9); if (!Loader.isModLoaded("ExtraUtilities")) { register(new ItemStack(Blocks.SANDSTONE), new ItemStack(Blocks.SAND), 4); register(new ItemStack(Blocks.RED_SANDSTONE), new ItemStack(Blocks.SAND, 1, 1), 4); } } if (StorageDrawers.config.cache.compRules != null) { for (String rule : StorageDrawers.config.cache.compRules) register(rule); } } public boolean register (ItemStack upper, ItemStack lower, int convRate) { if (upper == null || lower == null) return false; unregisterUpperTarget(upper); unregisterLowerTarget(lower); Record r = new Record(); r.upper = upper.copy(); r.lower = lower.copy(); r.convRate = convRate; r.upper.stackSize = 1; r.lower.stackSize = 1; records.add(r); return true; } public boolean register (String rule) { String[] parts = rule.split("\\s*,\\s*"); if (parts.length != 3) return false; ItemResourceLocation upperResource = new ItemResourceLocation(parts[0]); ItemStack upperItem = upperResource.getItemStack(); ItemResourceLocation lowerResource = new ItemResourceLocation(parts[1]); ItemStack lowerItem = lowerResource.getItemStack(); if (upperItem == null || lowerItem == null) return false; if (upperItem.getMetadata() == OreDictionary.WILDCARD_VALUE) upperItem = new ItemStack(upperItem.getItem(), 1, 0); if (lowerItem.getMetadata() == OreDictionary.WILDCARD_VALUE) lowerItem = new ItemStack(lowerItem.getItem(), 1, 0); try { int conv = Integer.parseInt(parts[2]); return register(upperItem, lowerItem, conv); } catch (NumberFormatException e) { return false; } } public boolean unregisterUpperTarget (ItemStack stack) { for (Record r : records) { if (ItemStack.areItemStacksEqual(stack, r.upper)) { records.remove(r); return true; } } return false; } public boolean unregisterLowerTarget (ItemStack stack) { for (Record r : records) { if (ItemStack.areItemStacksEqual(stack, r.lower)) { records.remove(r); return true; } } return false; } public Record findHigherTier (ItemStack stack) { if (stack == null || stack.getItem() == null) return null; for (int i = 0, n = records.size(); i < n; i++) { Record r = records.get(i); if (stack.isItemEqual(r.lower) && ItemStack.areItemStackTagsEqual(stack, r.lower)) return r; } return null; } public Record findLowerTier (ItemStack stack) { if (stack == null || stack.getItem() == null) return null; for (int i = 0, n = records.size(); i < n; i++) { Record r = records.get(i); if (stack.isItemEqual(r.upper) && ItemStack.areItemStackTagsEqual(stack, r.upper)) return r; } return null; } }