package joshie.mariculture.core.util; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.concurrent.Callable; import static joshie.mariculture.core.lib.MaricultureInfo.MODID; public class MCTab extends CreativeTabs { private ItemStack icon; public MCTab(String label) { super(label); setBackgroundImageName("mariculture.png"); setNoTitle(); icon = new ItemStack(Blocks.SAND); //Default icon } @Override @SideOnly(Side.CLIENT) public String getTranslatedTabLabel() { return MODID + ".tab." + this.getTabLabel(); } @Override public ItemStack getIconItemStack() { return icon; } @Override public Item getTabIconItem() { return icon.getItem(); } public void setStack(ItemStack stack) { this.icon = stack; } @Override public boolean hasSearchBar() { return true; } @Override public int getSearchbarWidth() { return 69; } @Override @SideOnly(Side.CLIENT) public void displayAllRelevantItems(List<ItemStack> list) { super.displayAllRelevantItems(list); Collections.sort(list, new Alphabetical()); } private static class Alphabetical implements Comparator<Object> { @Override public int compare(Object o1, Object o2) { ItemStack stack1 = ((ItemStack) o1); ItemStack stack2 = ((ItemStack) o2); Item item1 = stack1.getItem(); Item item2 = stack2.getItem(); int value1 = 500; int value2 = 500; if (item1 instanceof MCRegistry) { value1 = ((MCRegistry) item1).getSortValue(stack1); } if (item2 instanceof MCRegistry) { value2 = ((MCRegistry) item2).getSortValue(stack2); } return value1 == value2 ? stack1.getDisplayName().compareTo(stack2.getDisplayName()) : value1 > value2 ? 1 : -1; } } private static final Cache<String, MCTab> TABS = CacheBuilder.newBuilder().build(); public static MCTab getCore() { return getTab("core"); } public static MCTab getExploration() { return getTab("exploration"); } public static MCTab getFishery() { return getTab("fishery"); } private static MCTab getTab(final String name) { try { return TABS.get(name, new Callable<MCTab>() { @Override public MCTab call() throws Exception { return new MCTab(name); } }); } catch (Exception e) { return null; } } }