package net.minecraft.creativetab; import javax.annotation.Nullable; import net.minecraft.block.BlockDoublePlant; import net.minecraft.enchantment.EnumEnchantmentType; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.init.PotionTypes; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.potion.PotionUtils; import net.minecraft.util.NonNullList; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public abstract class CreativeTabs { public static CreativeTabs[] CREATIVE_TAB_ARRAY = new CreativeTabs[12]; public static final CreativeTabs BUILDING_BLOCKS = new CreativeTabs(0, "buildingBlocks") { @SideOnly(Side.CLIENT) public ItemStack getTabIconItem() { return new ItemStack(Item.getItemFromBlock(Blocks.BRICK_BLOCK)); } }; public static final CreativeTabs DECORATIONS = new CreativeTabs(1, "decorations") { @SideOnly(Side.CLIENT) public ItemStack getTabIconItem() { return new ItemStack(Item.getItemFromBlock(Blocks.DOUBLE_PLANT), 1, BlockDoublePlant.EnumPlantType.PAEONIA.getMeta()); } }; public static final CreativeTabs REDSTONE = new CreativeTabs(2, "redstone") { @SideOnly(Side.CLIENT) public ItemStack getTabIconItem() { return new ItemStack(Items.REDSTONE); } }; public static final CreativeTabs TRANSPORTATION = new CreativeTabs(3, "transportation") { @SideOnly(Side.CLIENT) public ItemStack getTabIconItem() { return new ItemStack(Item.getItemFromBlock(Blocks.GOLDEN_RAIL)); } }; public static final CreativeTabs MISC = new CreativeTabs(6, "misc") { @SideOnly(Side.CLIENT) public ItemStack getTabIconItem() { return new ItemStack(Items.LAVA_BUCKET); } }; public static final CreativeTabs SEARCH = (new CreativeTabs(5, "search") { @SideOnly(Side.CLIENT) public ItemStack getTabIconItem() { return new ItemStack(Items.COMPASS); } }).setBackgroundImageName("item_search.png"); public static final CreativeTabs FOOD = new CreativeTabs(7, "food") { @SideOnly(Side.CLIENT) public ItemStack getTabIconItem() { return new ItemStack(Items.APPLE); } }; public static final CreativeTabs TOOLS = (new CreativeTabs(8, "tools") { @SideOnly(Side.CLIENT) public ItemStack getTabIconItem() { return new ItemStack(Items.IRON_AXE); } }).setRelevantEnchantmentTypes(new EnumEnchantmentType[] {EnumEnchantmentType.ALL, EnumEnchantmentType.DIGGER, EnumEnchantmentType.FISHING_ROD, EnumEnchantmentType.BREAKABLE}); public static final CreativeTabs COMBAT = (new CreativeTabs(9, "combat") { @SideOnly(Side.CLIENT) public ItemStack getTabIconItem() { return new ItemStack(Items.GOLDEN_SWORD); } }).setRelevantEnchantmentTypes(new EnumEnchantmentType[] {EnumEnchantmentType.ALL, EnumEnchantmentType.ARMOR, EnumEnchantmentType.ARMOR_FEET, EnumEnchantmentType.ARMOR_HEAD, EnumEnchantmentType.ARMOR_LEGS, EnumEnchantmentType.ARMOR_CHEST, EnumEnchantmentType.BOW, EnumEnchantmentType.WEAPON, EnumEnchantmentType.WEARABLE, EnumEnchantmentType.BREAKABLE}); public static final CreativeTabs BREWING = new CreativeTabs(10, "brewing") { @SideOnly(Side.CLIENT) public ItemStack getTabIconItem() { return PotionUtils.addPotionToItemStack(new ItemStack(Items.POTIONITEM), PotionTypes.WATER); } }; public static final CreativeTabs MATERIALS = MISC; public static final CreativeTabs HOTBAR = new CreativeTabs(4, "hotbar") { @SideOnly(Side.CLIENT) public ItemStack getTabIconItem() { return new ItemStack(Blocks.BOOKSHELF); } /** * only shows items which have tabToDisplayOn == this */ @SideOnly(Side.CLIENT) public void displayAllRelevantItems(NonNullList p_78018_1_) { throw new RuntimeException("Implement exception client-side."); } @SideOnly(Side.CLIENT) public boolean isAlignedRight() { return true; } }; public static final CreativeTabs INVENTORY = (new CreativeTabs(11, "inventory") { @SideOnly(Side.CLIENT) public ItemStack getTabIconItem() { return new ItemStack(Item.getItemFromBlock(Blocks.CHEST)); } }).setBackgroundImageName("inventory.png").setNoScrollbar().setNoTitle(); private final int tabIndex; public final String tabLabel; /** Texture to use. */ private String backgroundTexture = "items.png"; private boolean hasScrollbar = true; /** Whether to draw the title in the foreground of the creative GUI */ private boolean drawTitle = true; private EnumEnchantmentType[] enchantmentTypes = new EnumEnchantmentType[0]; private ItemStack iconItemStack; public CreativeTabs(String label) { this(getNextID(), label); } public CreativeTabs(int index, String label) { if (index >= CREATIVE_TAB_ARRAY.length) { CreativeTabs[] tmp = new CreativeTabs[index + 1]; for (int x = 0; x < CREATIVE_TAB_ARRAY.length; x++) { tmp[x] = CREATIVE_TAB_ARRAY[x]; } CREATIVE_TAB_ARRAY = tmp; } this.tabIndex = index; this.tabLabel = label; this.iconItemStack = ItemStack.EMPTY; CREATIVE_TAB_ARRAY[index] = this; } @SideOnly(Side.CLIENT) public int getTabIndex() { return this.tabIndex; } public CreativeTabs setBackgroundImageName(String texture) { this.backgroundTexture = texture; return this; } @SideOnly(Side.CLIENT) public String getTabLabel() { return this.tabLabel; } /** * Gets the translated Label. */ @SideOnly(Side.CLIENT) public String getTranslatedTabLabel() { return "itemGroup." + this.getTabLabel(); } @SideOnly(Side.CLIENT) public ItemStack getIconItemStack() { if (this.iconItemStack.isEmpty()) { this.iconItemStack = this.getTabIconItem(); } return this.iconItemStack; } @SideOnly(Side.CLIENT) public abstract ItemStack getTabIconItem(); @SideOnly(Side.CLIENT) public String getBackgroundImageName() { return this.backgroundTexture; } @SideOnly(Side.CLIENT) public boolean drawInForegroundOfTab() { return this.drawTitle; } public CreativeTabs setNoTitle() { this.drawTitle = false; return this; } @SideOnly(Side.CLIENT) public boolean shouldHidePlayerInventory() { return this.hasScrollbar; } public CreativeTabs setNoScrollbar() { this.hasScrollbar = false; return this; } /** * returns index % 6 */ @SideOnly(Side.CLIENT) public int getTabColumn() { if (tabIndex > 11) { return ((tabIndex - 12) % 10) % 5; } return this.tabIndex % 6; } /** * returns tabIndex < 6 */ @SideOnly(Side.CLIENT) public boolean isTabInFirstRow() { if (tabIndex > 11) { return ((tabIndex - 12) % 10) < 5; } return this.tabIndex < 6; } @SideOnly(Side.CLIENT) public boolean isAlignedRight() { return this.getTabColumn() == 5; } /** * Returns the enchantment types relevant to this tab */ public EnumEnchantmentType[] getRelevantEnchantmentTypes() { return this.enchantmentTypes; } /** * Sets the enchantment types for populating this tab with enchanting books */ public CreativeTabs setRelevantEnchantmentTypes(EnumEnchantmentType... types) { this.enchantmentTypes = types; return this; } public boolean hasRelevantEnchantmentType(@Nullable EnumEnchantmentType enchantmentType) { if (enchantmentType != null) { for (EnumEnchantmentType enumenchantmenttype : this.enchantmentTypes) { if (enumenchantmenttype == enchantmentType) { return true; } } } return false; } /** * only shows items which have tabToDisplayOn == this */ @SideOnly(Side.CLIENT) public void displayAllRelevantItems(NonNullList p_78018_1_) { for (Item item : Item.REGISTRY) { item.getSubItems(this, p_78018_1_); } } public int getTabPage() { if (tabIndex > 11) { return ((tabIndex - 12) / 10) + 1; } return 0; } public static int getNextID() { return CREATIVE_TAB_ARRAY.length; } /** * Determines if the search bar should be shown for this tab. * * @return True to show the bar */ public boolean hasSearchBar() { return tabIndex == CreativeTabs.SEARCH.tabIndex; } /** * Gets the width of the search bar of the creative tab, use this if your * creative tab name overflows together with a custom texture. * * @return The width of the search bar, 89 by default */ public int getSearchbarWidth() { return 89; } @SideOnly(Side.CLIENT) public net.minecraft.util.ResourceLocation getBackgroundImage() { return new net.minecraft.util.ResourceLocation("textures/gui/container/creative_inventory/tab_" + this.getBackgroundImageName()); } }