From 6b80abe942116ddc5948cf6d5e4184c3e482f551 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 24 Sep 2015 23:42:03 +0200 Subject: [PATCH] Added Coffee Machine Recipe Handler for the manual and a back button when opening the manual from another inventory --- .../booklet/BookletChapterCoffee.java | 42 +++++ .../actuallyadditions/booklet/GuiBooklet.java | 12 +- .../booklet/InitBooklet.java | 2 +- .../booklet/page/PageCoffeeRecipe.java | 101 ++++++++++++ .../actuallyadditions/event/TooltipEvent.java | 2 +- .../inventory/GuiHandler.java | 2 +- .../actuallyadditions/items/ItemCoffee.java | 51 +++--- .../tools/table/ItemAllToolFixedEnchants.java | 148 ++++++++++++++++++ .../assets/actuallyadditions/lang/en_US.lang | 18 +-- .../textures/gui/guiBooklet.png | Bin 13703 -> 15174 bytes 10 files changed, 336 insertions(+), 42 deletions(-) create mode 100644 src/main/java/ellpeck/actuallyadditions/booklet/BookletChapterCoffee.java create mode 100644 src/main/java/ellpeck/actuallyadditions/booklet/page/PageCoffeeRecipe.java create mode 100644 src/main/java/ellpeck/actuallyadditions/items/tools/table/ItemAllToolFixedEnchants.java diff --git a/src/main/java/ellpeck/actuallyadditions/booklet/BookletChapterCoffee.java b/src/main/java/ellpeck/actuallyadditions/booklet/BookletChapterCoffee.java new file mode 100644 index 000000000..cfbe23575 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/booklet/BookletChapterCoffee.java @@ -0,0 +1,42 @@ +/* + * This file ("BookletChapterCoffee.java") is part of the Actually Additions Mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://github.com/Ellpeck/ActuallyAdditions/blob/master/README.md + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015 Ellpeck + */ + +package ellpeck.actuallyadditions.booklet; + +import ellpeck.actuallyadditions.booklet.page.BookletPage; +import ellpeck.actuallyadditions.booklet.page.PageCoffeeRecipe; +import ellpeck.actuallyadditions.items.ItemCoffee; +import net.minecraft.item.ItemStack; +import scala.actors.threadpool.Arrays; + +import java.util.ArrayList; + +public class BookletChapterCoffee extends BookletChapter{ + + public BookletChapterCoffee(String unlocalizedName, BookletIndexEntry entry, ItemStack displayStack, BookletPage... pages){ + super(unlocalizedName, entry, displayStack, getPages(pages)); + } + + @SuppressWarnings("unchecked") + private static BookletPage[] getPages(BookletPage... pages){ + ArrayList allPages = new ArrayList(); + allPages.addAll(Arrays.asList(pages)); + + for(ItemCoffee.Ingredient ingredient : ItemCoffee.ingredients){ + BookletPage page = new PageCoffeeRecipe(allPages.size()+1, ingredient); + if(!(ingredient instanceof ItemCoffee.MilkIngredient)){ + page.setNoText(); + } + allPages.add(page); + } + + return allPages.toArray(new BookletPage[allPages.size()]); + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/booklet/GuiBooklet.java b/src/main/java/ellpeck/actuallyadditions/booklet/GuiBooklet.java index 2dc39fd1c..0458c3dfe 100644 --- a/src/main/java/ellpeck/actuallyadditions/booklet/GuiBooklet.java +++ b/src/main/java/ellpeck/actuallyadditions/booklet/GuiBooklet.java @@ -69,9 +69,12 @@ public class GuiBooklet extends GuiScreen{ private boolean mouseClicked; - public GuiBooklet(){ + private GuiScreen parentScreen; + + public GuiBooklet(GuiScreen parentScreen){ this.xSize = 146; this.ySize = 180; + this.parentScreen = parentScreen; } @Override @@ -379,7 +382,10 @@ public class GuiBooklet extends GuiScreen{ } } else if(button.id == BUTTON_RETURN_ID){ - if(this.currentChapter != null && this.currentChapter != InitBooklet.chapterIntro){ + if(this.currentIndexEntry == null){ + mc.displayGuiScreen(this.parentScreen); + } + else if(this.currentChapter != null && this.currentChapter != InitBooklet.chapterIntro){ this.openIndexEntry(this.currentIndexEntry, this.pageOpenInIndex, true); } else{ @@ -431,7 +437,7 @@ public class GuiBooklet extends GuiScreen{ this.indexPageAmount = entry == null ? 1 : entry.chapters.size()/BUTTONS_PER_PAGE+1; this.pageOpenInIndex = entry == null ? 1 : (this.indexPageAmount <= page || page <= 0 ? this.indexPageAmount : page); - this.getButton(BUTTON_RETURN_ID).visible = entry != null; + this.getButton(BUTTON_RETURN_ID).visible = entry != null || this.parentScreen != null; this.getButton(BUTTON_FORWARD_ID).visible = this.pageOpenInIndex < this.indexPageAmount; this.getButton(BUTTON_BACK_ID).visible = this.pageOpenInIndex > 1; diff --git a/src/main/java/ellpeck/actuallyadditions/booklet/InitBooklet.java b/src/main/java/ellpeck/actuallyadditions/booklet/InitBooklet.java index c2b8dc69d..38f41fd48 100644 --- a/src/main/java/ellpeck/actuallyadditions/booklet/InitBooklet.java +++ b/src/main/java/ellpeck/actuallyadditions/booklet/InitBooklet.java @@ -78,7 +78,7 @@ public class InitBooklet{ new BookletChapter("crate", entryFunctionalNonRF, new ItemStack(InitBlocks.blockGiantChest), new PageCrafting(1, BlockCrafting.recipeCrate)); //RF Using Blocks - new BookletChapter("coffeeMachine", entryFunctionalRF, new ItemStack(InitBlocks.blockCoffeeMachine), new PageTextOnly(1).setStack(new ItemStack(InitItems.itemCoffeeBean)).addTextReplacement("", ConfigIntValues.COFFEE_MACHINE_ENERGY_USED.getValue()).addTextReplacement("", ConfigIntValues.COFFEE_CACHE_USED_PER_ITEM.getValue()).addTextReplacement("", ConfigIntValues.COFFEE_MACHINE_WATER_USED.getValue()), new PageTextOnly(2).setStack(new ItemStack(InitItems.itemCoffee)), new PageTextOnly(3), new PageCrafting(4, BlockCrafting.recipeCoffeeMachine).setNoText(), new PageCrafting(5, ItemCrafting.recipeCup).setNoText()); + new BookletChapterCoffee("coffeeMachine", entryFunctionalRF, new ItemStack(InitBlocks.blockCoffeeMachine), new PageTextOnly(1).setStack(new ItemStack(InitItems.itemCoffeeBean)).addTextReplacement("", ConfigIntValues.COFFEE_MACHINE_ENERGY_USED.getValue()).addTextReplacement("", ConfigIntValues.COFFEE_CACHE_USED_PER_ITEM.getValue()).addTextReplacement("", ConfigIntValues.COFFEE_MACHINE_WATER_USED.getValue()), new PageTextOnly(2).setStack(new ItemStack(InitItems.itemCoffee)), new PageCrafting(3, BlockCrafting.recipeCoffeeMachine).setNoText(), new PageCrafting(4, ItemCrafting.recipeCup).setNoText()); new BookletChapter("crusher", entryFunctionalRF, new ItemStack(InitBlocks.blockGrinderDouble), new PageTextOnly(1).addTextReplacement("", ConfigIntValues.GRINDER_ENERGY_USED.getValue()).addTextReplacement("", ConfigIntValues.GRINDER_DOUBLE_ENERGY_USED.getValue()), new PageCrafting(2, BlockCrafting.recipeCrusher).setNoText(), new PageCrafting(3, BlockCrafting.recipeDoubleCrusher).setNoText()); new BookletChapter("furnaceDouble", entryFunctionalRF, new ItemStack(InitBlocks.blockFurnaceDouble), new PageCrafting(1, BlockCrafting.recipeFurnace).addTextReplacement("", ConfigIntValues.FURNACE_ENERGY_USED.getValue())); new BookletChapter("miner", entryFunctionalRF, new ItemStack(InitBlocks.blockOreMagnet), new PageTextOnly(1).addTextReplacement("", ConfigIntValues.ORE_MAGNET_ENERGY_USE.getValue()).addTextReplacement("", ConfigIntValues.ORE_MAGNET_OIL_USE.getValue()).addTextReplacement("", ConfigIntValues.ORE_MAGNET_RANGE.getValue()), new PageCrafting(2, BlockCrafting.recipeMiner).setNoText(), new PageCrafting(3, BlockCrafting.recipeCasing).setNoText()); diff --git a/src/main/java/ellpeck/actuallyadditions/booklet/page/PageCoffeeRecipe.java b/src/main/java/ellpeck/actuallyadditions/booklet/page/PageCoffeeRecipe.java new file mode 100644 index 000000000..b8a365017 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/booklet/page/PageCoffeeRecipe.java @@ -0,0 +1,101 @@ +/* + * This file ("PageCoffeeRecipe.java") is part of the Actually Additions Mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://github.com/Ellpeck/ActuallyAdditions/blob/master/README.md + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015 Ellpeck + */ + +package ellpeck.actuallyadditions.booklet.page; + +import ellpeck.actuallyadditions.booklet.GuiBooklet; +import ellpeck.actuallyadditions.booklet.InitBooklet; +import ellpeck.actuallyadditions.items.InitItems; +import ellpeck.actuallyadditions.items.ItemCoffee; +import ellpeck.actuallyadditions.items.metalists.TheMiscItems; +import ellpeck.actuallyadditions.util.Util; +import net.minecraft.item.ItemStack; + +public class PageCoffeeRecipe extends BookletPage{ + + public ItemCoffee.Ingredient ingredient; + + public PageCoffeeRecipe(int id, ItemCoffee.Ingredient ingredient){ + super(id); + this.ingredient = ingredient; + InitBooklet.pagesWithItemStackData.add(this); + } + + @Override + public void renderPre(GuiBooklet gui, int mouseX, int mouseY, boolean mouseClick){ + gui.mc.getTextureManager().bindTexture(GuiBooklet.resLoc); + gui.drawTexturedModalRect(gui.guiLeft+19, gui.guiTop+20, 146, 94, 99, 60); + } + + @SuppressWarnings("unchecked") + @Override + public void render(GuiBooklet gui, int mouseX, int mouseY, boolean mouseClick){ + String strg = "Coffee Machine Recipe"; + gui.unicodeRenderer.drawString(strg, gui.guiLeft+gui.xSize/2-gui.unicodeRenderer.getStringWidth(strg)/2, gui.guiTop+10, 0); + + String text = gui.currentPage.getText(); + if(text != null && !text.isEmpty()){ + gui.unicodeRenderer.drawSplitString(text, gui.guiLeft+14, gui.guiTop+100, 115, 0); + } + + if(this.ingredient.maxAmplifier > 0){ + gui.unicodeRenderer.drawString("Maximum Amplifier: "+this.ingredient.maxAmplifier, gui.guiLeft+19+5, gui.guiTop+20+60, 0); + } + + for(int i = 0; i < 2; i++){ + for(int j = 0; j < 4; j++){ + ItemStack stack; + int coordsOffsetX; + int coordsOffsetY; + + switch(j){ + case 0: + stack = new ItemStack(InitItems.itemMisc, 1, TheMiscItems.CUP.ordinal()); + coordsOffsetX = 39; + coordsOffsetY = 8; + break; + case 1: + stack = new ItemStack(InitItems.itemCoffeeBean); + coordsOffsetX = 5; + coordsOffsetY = 8; + break; + case 2: + stack = new ItemStack(InitItems.itemCoffee); + ItemCoffee.addEffectToStack(stack, this.ingredient); + coordsOffsetX = 39; + coordsOffsetY = 39; + break; + default: + stack = this.ingredient.ingredient; + coordsOffsetX = 82; + coordsOffsetY = 8; + break; + } + + if(stack != null){ + if(stack.getItemDamage() == Util.WILDCARD) stack.setItemDamage(0); + + boolean tooltip = i == 1; + + int xShow = gui.guiLeft+19+coordsOffsetX; + int yShow = gui.guiTop+20+coordsOffsetY; + if(!tooltip){ + renderItem(gui, stack, xShow, yShow, 1.0F); + } + else{ + if(mouseX >= xShow && mouseX <= xShow+16 && mouseY >= yShow && mouseY <= yShow+16){ + this.renderTooltipAndTransfer(gui, stack, mouseX, mouseY, j != 2, mouseClick); + } + } + } + } + } + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/event/TooltipEvent.java b/src/main/java/ellpeck/actuallyadditions/event/TooltipEvent.java index a7af92f34..cc684d1f9 100644 --- a/src/main/java/ellpeck/actuallyadditions/event/TooltipEvent.java +++ b/src/main/java/ellpeck/actuallyadditions/event/TooltipEvent.java @@ -44,7 +44,7 @@ public class TooltipEvent{ event.toolTip.add(EnumChatFormatting.GOLD+StringUtil.localizeFormatted("booklet."+ModUtil.MOD_ID_LOWER+".keyToSeeRecipe", keyCode > 0 && keyCode < Keyboard.KEYBOARD_SIZE ? "'"+Keyboard.getKeyName(keyCode)+"'" : "[NONE]")); } if(Keyboard.isKeyDown(KeyBinds.keybindOpenBooklet.getKeyCode())){ - GuiBooklet book = new GuiBooklet(); + GuiBooklet book = new GuiBooklet(Minecraft.getMinecraft().currentScreen); Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); Minecraft.getMinecraft().displayGuiScreen(book); book.openIndexEntry(page.getChapter().entry, InitBooklet.entries.indexOf(page.getChapter().entry)/GuiBooklet.BUTTONS_PER_PAGE+1, true); diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/GuiHandler.java b/src/main/java/ellpeck/actuallyadditions/inventory/GuiHandler.java index 88ac745b6..0cbfcef55 100644 --- a/src/main/java/ellpeck/actuallyadditions/inventory/GuiHandler.java +++ b/src/main/java/ellpeck/actuallyadditions/inventory/GuiHandler.java @@ -140,7 +140,7 @@ public class GuiHandler implements IGuiHandler{ case CLOUD: return new GuiSmileyCloud(tile, x, y, z, world); case BOOK: - return new GuiBooklet(); + return new GuiBooklet(null); case TOOL_TABLE: return new GuiToolTable(entityPlayer.inventory, tile); default: diff --git a/src/main/java/ellpeck/actuallyadditions/items/ItemCoffee.java b/src/main/java/ellpeck/actuallyadditions/items/ItemCoffee.java index d41157354..51fab43d4 100644 --- a/src/main/java/ellpeck/actuallyadditions/items/ItemCoffee.java +++ b/src/main/java/ellpeck/actuallyadditions/items/ItemCoffee.java @@ -27,9 +27,11 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.util.IIcon; +import net.minecraft.util.StringUtils; import net.minecraft.world.World; import java.util.ArrayList; +import java.util.List; public class ItemCoffee extends ItemFood implements INameableItem{ @@ -46,12 +48,12 @@ public class ItemCoffee extends ItemFood implements INameableItem{ } registerIngredient(new Ingredient(new ItemStack(Items.sugar), new PotionEffect[]{new PotionEffect(Potion.moveSpeed.getId(), 30, 0)}, 4)); - registerIngredient(new Ingredient(new ItemStack(Items.magma_cream), new PotionEffect[]{new PotionEffect(Potion.fireResistance.getId(), 20, 0)}, 1)); - registerIngredient(new Ingredient(new ItemStack(Items.fish, 1, 3), new PotionEffect[]{new PotionEffect(Potion.waterBreathing.getId(), 10, 0)}, 1)); - registerIngredient(new Ingredient(new ItemStack(Items.golden_carrot), new PotionEffect[]{new PotionEffect(Potion.nightVision.getId(), 30, 0)}, 1)); + registerIngredient(new Ingredient(new ItemStack(Items.magma_cream), new PotionEffect[]{new PotionEffect(Potion.fireResistance.getId(), 20, 0)}, 2)); + registerIngredient(new Ingredient(new ItemStack(Items.fish, 1, 3), new PotionEffect[]{new PotionEffect(Potion.waterBreathing.getId(), 10, 0)}, 2)); + registerIngredient(new Ingredient(new ItemStack(Items.golden_carrot), new PotionEffect[]{new PotionEffect(Potion.nightVision.getId(), 30, 0)}, 2)); registerIngredient(new Ingredient(new ItemStack(Items.ghast_tear), new PotionEffect[]{new PotionEffect(Potion.regeneration.getId(), 5, 0)}, 3)); registerIngredient(new Ingredient(new ItemStack(Items.blaze_powder), new PotionEffect[]{new PotionEffect(Potion.damageBoost.getId(), 15, 0)}, 4)); - registerIngredient(new Ingredient(new ItemStack(Items.fermented_spider_eye), new PotionEffect[]{new PotionEffect(Potion.invisibility.getId(), 25, 0)}, 1)); + registerIngredient(new Ingredient(new ItemStack(Items.fermented_spider_eye), new PotionEffect[]{new PotionEffect(Potion.invisibility.getId(), 25, 0)}, 2)); } public ItemCoffee(){ @@ -62,6 +64,20 @@ public class ItemCoffee extends ItemFood implements INameableItem{ this.setNoRepair(); } + @SuppressWarnings("unchecked") + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool){ + PotionEffect[] effects = getEffectsFromStack(stack); + if(effects != null){ + for(PotionEffect effect : effects){ + list.add(StringUtil.localize(effect.getEffectName())+" "+(effect.getAmplifier()+1)+", "+StringUtils.ticksToElapsedTime(effect.getDuration()*20)); + } + } + else{ + list.add("No Effects"); + } + } + public static Ingredient getIngredientFromStack(ItemStack stack){ for(Ingredient ingredient : ingredients){ if(ingredient.ingredient.copy().isItemEqual(stack)) return ingredient; @@ -126,7 +142,7 @@ public class ItemCoffee extends ItemFood implements INameableItem{ if(tag != null){ int counter = tag.getInteger("Counter"); while(counter > 0){ - NBTTagCompound compound = (NBTTagCompound)tag.getTag(counter + ""); + NBTTagCompound compound = (NBTTagCompound)tag.getTag(counter+""); PotionEffect effect = new PotionEffect(compound.getInteger("ID"), compound.getInteger("Duration"), compound.getByte("Amplifier")); if(effect.getPotionID() > 0){ effects.add(effect); @@ -182,8 +198,12 @@ public class ItemCoffee extends ItemFood implements INameableItem{ super.onEaten(stack, world, player); applyPotionEffectsFromStack(stack, player); theStack.setItemDamage(theStack.getItemDamage()+1); - if(theStack.getMaxDamage()-theStack.getItemDamage() < 0) return new ItemStack(InitItems.itemMisc, 1, TheMiscItems.CUP.ordinal()); - else return theStack; + if(theStack.getMaxDamage()-theStack.getItemDamage() < 0){ + return new ItemStack(InitItems.itemMisc, 1, TheMiscItems.CUP.ordinal()); + } + else{ + return theStack; + } } @Override @@ -194,7 +214,7 @@ public class ItemCoffee extends ItemFood implements INameableItem{ @Override @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister iconReg){ - itemIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER + ":" + this.getName()); + itemIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER+":"+this.getName()); } @Override @@ -218,10 +238,6 @@ public class ItemCoffee extends ItemFood implements INameableItem{ this.maxAmplifier = maxAmplifier; } - public String getExtraText(){ - return null; - } - public PotionEffect[] getEffects(){ return this.effects; } @@ -231,7 +247,7 @@ public class ItemCoffee extends ItemFood implements INameableItem{ } } - private static class MilkIngredient extends Ingredient{ + public static class MilkIngredient extends Ingredient{ public MilkIngredient(ItemStack ingredient){ super(ingredient, null, 0); @@ -243,7 +259,9 @@ public class ItemCoffee extends ItemFood implements INameableItem{ ArrayList effectsNew = new ArrayList(); if(effects != null && effects.length > 0){ for(PotionEffect effect : effects){ - if(effect.getAmplifier() > 0) effectsNew.add(new PotionEffect(effect.getPotionID(), effect.getDuration()+120, effect.getAmplifier()-1)); + if(effect.getAmplifier() > 0){ + effectsNew.add(new PotionEffect(effect.getPotionID(), effect.getDuration()+120, effect.getAmplifier()-1)); + } } stack.setTagCompound(new NBTTagCompound()); if(effectsNew.size() > 0){ @@ -255,10 +273,5 @@ public class ItemCoffee extends ItemFood implements INameableItem{ return true; } - @Override - public String getExtraText(){ - return StringUtil.localize("container.nei."+ModUtil.MOD_ID_LOWER+".coffee.extra.milk"); - } - } } \ No newline at end of file diff --git a/src/main/java/ellpeck/actuallyadditions/items/tools/table/ItemAllToolFixedEnchants.java b/src/main/java/ellpeck/actuallyadditions/items/tools/table/ItemAllToolFixedEnchants.java new file mode 100644 index 000000000..3f2f2e227 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/items/tools/table/ItemAllToolFixedEnchants.java @@ -0,0 +1,148 @@ +/* + * This file ("ItemAllToolFixedEnchants.java") is part of the Actually Additions Mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://github.com/Ellpeck/ActuallyAdditions/blob/master/README.md + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015 Ellpeck + */ + +package ellpeck.actuallyadditions.items.tools.table; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.items.tools.ItemAllToolAA; +import ellpeck.actuallyadditions.util.ItemUtil; +import ellpeck.actuallyadditions.util.ModUtil; +import ellpeck.actuallyadditions.util.StringUtil; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +import java.util.List; + +public class ItemAllToolFixedEnchants extends ItemAllToolAA implements IToolTableRepairItem{ + + private final int maxToolDamage; + private final EnchantmentCombo[] enchantments; + + private ItemStack repairStack; + private int repairPerStack; + + private IIcon iconBroken; + + public ItemAllToolFixedEnchants(ToolMaterial toolMat, String unlocalizedName, EnumRarity rarity, ItemStack repairStack, int repairPerStack, EnchantmentCombo... enchantments){ + super(toolMat, "", unlocalizedName, rarity); + this.enchantments = enchantments; + this.maxToolDamage = this.getMaxDamage(); + this.setMaxDamage(this.maxToolDamage+1); + this.repairStack = repairStack; + this.repairPerStack = repairPerStack; + } + + public boolean isBroken(ItemStack stack){ + return this.isBroken(stack.getItemDamage()); + } + + private boolean isBroken(int damage){ + return damage > this.maxToolDamage; + } + + @Override + public boolean hasEffect(ItemStack stack, int pass){ + return false; + } + + @Override + public boolean isRepairable(){ + return false; + } + + @Override + public boolean getIsRepairable(ItemStack stack1, ItemStack stack2){ + return this.isRepairable(); + } + + @Override + public int getItemEnchantability(ItemStack stack){ + return 0; + } + + @Override + public void onCreated(ItemStack stack, World world, EntityPlayer player){ + for(EnchantmentCombo combo : this.enchantments){ + ItemUtil.addEnchantment(stack, combo.enchantment, combo.level); + } + } + + @Override + public void onUpdate(ItemStack stack, World world, Entity player, int par4, boolean par5){ + for(EnchantmentCombo combo : this.enchantments){ + if(!ItemUtil.hasEnchantment(stack, combo.enchantment)){ + ItemUtil.addEnchantment(stack, combo.enchantment, combo.level); + } + } + } + + @SuppressWarnings("unchecked") + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item item, CreativeTabs tab, List list){ + ItemStack stack = new ItemStack(item); + for(EnchantmentCombo combo : this.enchantments){ + ItemUtil.addEnchantment(stack, combo.enchantment, combo.level); + } + list.add(stack); + } + + @Override + public String getItemStackDisplayName(ItemStack stack){ + return super.getItemStackDisplayName(stack)+(this.isBroken(stack) ? " ("+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".broken.desc")+")" : ""); + } + + @Override + public float getDigSpeed(ItemStack stack, Block block, int meta){ + return this.isBroken(stack) ? 0.0F : super.getDigSpeed(stack, block, meta); + } + + @Override + public boolean canHarvestBlock(Block block, ItemStack stack){ + return !this.isBroken(stack) && super.canHarvestBlock(block, stack); + } + + @Override + public IIcon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack useItem, int useRemaining){ + return this.isBroken(stack) ? this.iconBroken : this.itemIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamage(int damage){ + return this.isBroken(damage) ? this.iconBroken : this.itemIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconReg){ + this.iconBroken = iconReg.registerIcon(ModUtil.MOD_ID_LOWER+":"+this.getName()+"Broken"); + this.itemIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER+":"+this.getName()); + } + + @Override + public ItemStack getRepairStack(){ + return this.repairStack; + } + + @Override + public int repairPerStack(){ + return this.repairPerStack; + } +} diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index c5c2dcc43..62681f572 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -334,20 +334,6 @@ container.actuallyadditions.xpSolidifier.name=Experience Solidifier container.actuallyadditions.oreMagnet.name=Magnetic Miner container.actuallyadditions.cloud.name=Smiley Cloud -#NEI Integration -container.nei.actuallyadditions.crushing.name=Crusher -container.nei.actuallyadditions.crushingDouble.name=Double Crusher -container.nei.actuallyadditions.ballOfHair.name=Ball Of Hair Usage -container.nei.actuallyadditions.compost.name=Compost -container.nei.actuallyadditions.furnaceDouble.name=Double Furnace -container.nei.actuallyadditions.treasureChest.name=Treasure Chest -container.nei.actuallyadditions.treasureChest.info=Items at -container.nei.actuallyadditions.coffee.name=Coffee Machine -container.nei.actuallyadditions.coffee.special=Special Feature -container.nei.actuallyadditions.coffee.maxAmount=Max Amount -container.nei.actuallyadditions.coffee.shift=[SHIFT]! -container.nei.actuallyadditions.coffee.extra.milk=+01:00, -1 Level - #Update Information info.actuallyadditions.update.generic.desc=[{"text":"There is an "},{"text":"Update ","bold":"true"},{"text":"for ","bold":"false"},{"text":"Actually Additions ","color":"dark_green","bold":"true"},{"text":"available!","color":"none","bold":"false"}] info.actuallyadditions.update.versionComp.desc=[{"text":"You have Version "},{"text":"%s","color":"dark_red","italic":"false"},{"text":", the newest one is ","color":"none","italic":"false"},{"text":"%s","color":"dark_green","underlined":"false"},{"text":"!","color":"none","underlined":"false"}] @@ -470,9 +456,7 @@ booklet.actuallyadditions.chapter.crate.name=Storage Crates booklet.actuallyadditions.chapter.crate.text.1=Storage Crates are big. Really big. They hold tons of items, more than 4 chests worth of them. "F-in' gigantic" -Some Magazine booklet.actuallyadditions.chapter.coffeeMachine.name=Coffee Machine -booklet.actuallyadditions.chapter.coffeeMachine.text.1=The Coffee Machine basically works like a Brewing Stand, only 20 times more customizable. After inserting an Empty Cup, Coffee, which can be found in the wild, planted and harvested, and mB of Water and RF/t, it will be able to brew some coffee for you! This is where the customizable bit comes in, though: You can choose what potion effects the coffee should get and how long for by dropping in potion ingredients just the way you want your coffee to be! -booklet.actuallyadditions.chapter.coffeeMachine.text.2=Every ingredient has a base time and a maximum amount of which it can be inputted into the machine. Here are the ingredients: Sugar -> Speed 30s, 4max Magma Cream -> 20s, 1max Pufferfish -> Water Breathing, 10s, 1max Golden Carrot -> Night Vision, 30s, 1max Ghast Tear -> Regeneration, 5s, 3max Blaze Powder -> Strength, 15s, 4max Fermented Spider Eye -> Invisibility, 25s, 1max -booklet.actuallyadditions.chapter.coffeeMachine.text.3=There is one special item, however, that is very powerful for the Coffee Machine: The Milk Bucket. This item is especially powerful, because it doubles the time of an effect while taking one amplifier away. But be careful: If you only have an amplifier of 1 on an effect, it'll be removed! To amplify the effect of a certain item, just put it into multiple slots causing the amplifier of it to rise. When you're ready, just press the button to brew your coffee! + booklet.actuallyadditions.chapter.crusher.name=Crusher and Double Crusher booklet.actuallyadditions.chapter.crusher.text.1=The Crusher turns every ore, ingot and gem into its corresponding dust using RF/t. When you put in Ores however, they will yield 2 pieces of dust. The Double Crusher basically does the same, however it can crush two ores at a time and uses RF/t. He's my crush diff --git a/src/main/resources/assets/actuallyadditions/textures/gui/guiBooklet.png b/src/main/resources/assets/actuallyadditions/textures/gui/guiBooklet.png index add56707cb64fb64187defc49374f59cc0619c38..d9db5005e090d1c5ce1baf69743d261a2e8c8a86 100644 GIT binary patch literal 15174 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 E0gbZ