diff --git a/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java b/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java index 405590845..ddcfeb2cc 100644 --- a/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java +++ b/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java @@ -83,6 +83,7 @@ public final class BotaniaCreativeTab extends CreativeTabs { addItem(ModItems.rainbowRod); addItem(ModItems.tornadoRod); addItem(ModItems.fireRod); + addItem(ModItems.smeltRod); addItem(ModItems.diviningRod); addItem(ModItems.gravityRod); addItem(ModItems.missileRod); diff --git a/src/main/java/vazkii/botania/common/crafting/ModCraftingRecipes.java b/src/main/java/vazkii/botania/common/crafting/ModCraftingRecipes.java index a71581704..e283ec8bf 100644 --- a/src/main/java/vazkii/botania/common/crafting/ModCraftingRecipes.java +++ b/src/main/java/vazkii/botania/common/crafting/ModCraftingRecipes.java @@ -217,6 +217,7 @@ public final class ModCraftingRecipes { public static IRecipe recipeMonocle; public static IRecipe recipeClip; public static IRecipe recipeCobbleRod; + public static IRecipe recipeSmeltRod; public static void init() { // Lexicon Recipe @@ -1419,6 +1420,14 @@ public final class ModCraftingRecipes { 'C', new ItemStack(Blocks.cobblestone)); recipeCobbleRod = BotaniaAPI.getLatestAddedRecipe(); + // Rod of the Molten Core Recipe + addOreDictRecipe(new ItemStack(ModItems.smeltRod), + " BF", " TB", "T ", + 'B', new ItemStack(Items.blaze_rod), + 'F', LibOreDict.RUNE[1], + 'T', LibOreDict.LIVINGWOOD_TWIG); + recipeSmeltRod = BotaniaAPI.getLatestAddedRecipe(); + // Storage Block Recipes addOreDictRecipe(new ItemStack(ModBlocks.storage, 1, 0), "III", "III", "III", diff --git a/src/main/java/vazkii/botania/common/item/ModItems.java b/src/main/java/vazkii/botania/common/item/ModItems.java index 9b338a40b..9cf8dc058 100644 --- a/src/main/java/vazkii/botania/common/item/ModItems.java +++ b/src/main/java/vazkii/botania/common/item/ModItems.java @@ -87,6 +87,7 @@ import vazkii.botania.common.item.rod.ItemGravityRod; import vazkii.botania.common.item.rod.ItemMissileRod; import vazkii.botania.common.item.rod.ItemRainbowRod; import vazkii.botania.common.item.rod.ItemSkyDirtRod; +import vazkii.botania.common.item.rod.ItemSmeltRod; import vazkii.botania.common.item.rod.ItemTerraformRod; import vazkii.botania.common.item.rod.ItemTornadoRod; import vazkii.botania.common.item.rod.ItemWaterRod; @@ -194,6 +195,7 @@ public final class ModItems { public static Item monocle; public static Item clip; public static Item cobbleRod; + public static Item smeltRod; public static void init() { lexicon = new ItemLexicon(); @@ -296,6 +298,7 @@ public final class ModItems { monocle = new ItemMonocle(); clip = new ItemClip(); cobbleRod = new ItemCobbleRod(); + smeltRod = new ItemSmeltRod(); OreDictionary.registerOre(LibOreDict.LEXICON, lexicon); for(int i = 0; i < 16; i++) { diff --git a/src/main/java/vazkii/botania/common/item/rod/ItemSmeltRod.java b/src/main/java/vazkii/botania/common/item/rod/ItemSmeltRod.java new file mode 100644 index 000000000..a92116130 --- /dev/null +++ b/src/main/java/vazkii/botania/common/item/rod/ItemSmeltRod.java @@ -0,0 +1,144 @@ +/** + * This class was created by . It's distributed as + * part of the Botania Mod. Get the Source Code in github: + * https://github.com/Vazkii/Botania + * + * Botania is Open Source and distributed under a + * Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License + * (http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_GB) + * + * File Created @ [Jan 24, 2015, 11:05:41 PM (GMT)] + */ +package vazkii.botania.common.item.rod; + +import java.util.Map; +import java.util.WeakHashMap; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumAction; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import vazkii.botania.api.mana.IManaUsingItem; +import vazkii.botania.api.mana.ManaItemHandler; +import vazkii.botania.common.Botania; +import vazkii.botania.common.core.helper.Vector3; +import vazkii.botania.common.item.ItemMod; +import vazkii.botania.common.item.equipment.tool.ToolCommons; +import vazkii.botania.common.lib.LibItemNames; + +public class ItemSmeltRod extends ItemMod implements IManaUsingItem { + + private static final int TIME = 10; + private static final int COST = 300; + private static final int COST_PER_TICK = COST / TIME; + + public static Map playerData = new WeakHashMap(); + + public ItemSmeltRod() { + setUnlocalizedName(LibItemNames.SMELT_ROD); + setMaxStackSize(1); + } + + @Override + public EnumAction getItemUseAction(ItemStack par1ItemStack) { + return EnumAction.bow; + } + + @Override + public int getMaxItemUseDuration(ItemStack par1ItemStack) { + return 72000; + } + + @Override + public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) { + par3EntityPlayer.setItemInUse(par1ItemStack, getMaxItemUseDuration(par1ItemStack)); + return par1ItemStack; + } + + @Override + public void onUsingTick(ItemStack stack, EntityPlayer p, int time) { + if(!ManaItemHandler.requestManaExact(stack, p, COST_PER_TICK, false)) + return; + + MovingObjectPosition pos = ToolCommons.raytraceFromEntity(p.worldObj, p, false, 32); + + if(pos != null) { + Block block = p.worldObj.getBlock(pos.blockX, pos.blockY, pos.blockZ); + int meta = p.worldObj.getBlockMetadata(pos.blockX, pos.blockY, pos.blockZ); + + ItemStack blockStack = new ItemStack(block, 1, meta); + ItemStack result = FurnaceRecipes.smelting().getSmeltingResult(blockStack); + + if(result != null && result.getItem() instanceof ItemBlock) { + boolean decremented = false; + + if(playerData.containsKey(p)) { + SmeltData data = playerData.get(p); + + if(data.equalPos(pos)) { + data.progress--; + decremented = true; + if(data.progress <= 0) { + if(!p.worldObj.isRemote) { + p.worldObj.setBlock(pos.blockX, pos.blockY, pos.blockZ, Block.getBlockFromItem(result.getItem()), result.getItemDamage(), 1 | 2); + p.worldObj.playSoundAtEntity(p, "fire.ignite", 0.6F, 1F); + p.worldObj.playSoundAtEntity(p, "fire.fire", 1F, 1F); + + ManaItemHandler.requestManaExact(stack, p, COST_PER_TICK, true); + playerData.remove(p.getGameProfile().getName()); + decremented = false; + } + + for(int i = 0; i < 25; i++) { + double x = pos.blockX + Math.random(); + double y = pos.blockY + Math.random(); + double z = pos.blockZ + Math.random(); + + Botania.proxy.wispFX(p.worldObj, x, y, z, 1F, 0.2F, 0.2F, 0.5F, (float) -Math.random() / 10F); + } + } + } + } + + if(!decremented) + playerData.put(p, new SmeltData(pos, TIME)); + else for(int i = 0; i < 2; i++) { + double x = pos.blockX + Math.random(); + double y = pos.blockY + Math.random(); + double z = pos.blockZ + Math.random(); + p.worldObj.playSoundAtEntity(p, "fire.fire", (float) Math.random() / 2F + 0.5F, 1F); + Botania.proxy.wispFX(p.worldObj, x, y, z, 1F, 0.2F, 0.2F, 0.5F, (float) -Math.random() / 10F); + } + } + } + } + + @Override + public boolean isFull3D() { + return true; + } + + @Override + public boolean usesMana(ItemStack stack) { + return true; + } + + static class SmeltData { + public MovingObjectPosition pos; + public int progress; + + public SmeltData(MovingObjectPosition pos, int progress) { + this.pos = pos; + this.progress = progress; + } + + public boolean equalPos(MovingObjectPosition pos) { + return pos.blockX == this.pos.blockX && pos.blockY == this.pos.blockY && pos.blockZ == this.pos.blockZ; + } + } +} diff --git a/src/main/java/vazkii/botania/common/lexicon/LexiconData.java b/src/main/java/vazkii/botania/common/lexicon/LexiconData.java index bfba93d45..e80b92ae8 100644 --- a/src/main/java/vazkii/botania/common/lexicon/LexiconData.java +++ b/src/main/java/vazkii/botania/common/lexicon/LexiconData.java @@ -154,7 +154,8 @@ public final class LexiconData { public static LexiconEntry craftingHalo; public static LexiconEntry clip; public static LexiconEntry cobbleRod; - + public static LexiconEntry smeltRod; + public static LexiconEntry baublesIntro; public static LexiconEntry tinyPlanet; public static LexiconEntry manaRing; @@ -591,6 +592,9 @@ public final class LexiconData { cobbleRod = new BLexiconEntry(LibLexicon.TOOL_COBBLE_ROD, categoryTools); cobbleRod.setLexiconPages(new PageText("0"), new PageCraftingRecipe("1", ModCraftingRecipes.recipeCobbleRod)); + smeltRod = new BLexiconEntry(LibLexicon.TOOL_SMELT_ROD, categoryTools); + smeltRod.setLexiconPages(new PageText("0"), new PageCraftingRecipe("1", ModCraftingRecipes.recipeSmeltRod)); + // BAUBLES ENTRIES baublesIntro = new BLexiconEntry(LibLexicon.BAUBLE_INTRO, categoryBaubles); baublesIntro.setPriority().setLexiconPages(new PageText("0"), new PageImage("1", LibResources.ENTRY_BAUBLES), new PageText("2")); diff --git a/src/main/java/vazkii/botania/common/lib/LibItemNames.java b/src/main/java/vazkii/botania/common/lib/LibItemNames.java index ecf9bbb3b..9e6bdbdc9 100644 --- a/src/main/java/vazkii/botania/common/lib/LibItemNames.java +++ b/src/main/java/vazkii/botania/common/lib/LibItemNames.java @@ -114,7 +114,8 @@ public final class LibItemNames { public static final String MONOCLE = "monocle"; public static final String CLIP = "clip"; public static final String COBBLE_ROD = "cobbleRod"; - + public static final String SMELT_ROD = "smeltRod"; + public static final String[] LENS_NAMES = new String[] { "lensNormal", "lensSpeed", diff --git a/src/main/java/vazkii/botania/common/lib/LibLexicon.java b/src/main/java/vazkii/botania/common/lib/LibLexicon.java index 80a716b68..ab835ab44 100644 --- a/src/main/java/vazkii/botania/common/lib/LibLexicon.java +++ b/src/main/java/vazkii/botania/common/lib/LibLexicon.java @@ -135,6 +135,7 @@ public final class LibLexicon { public static final String TOOL_CRAFTING_HALO = "craftingHalo"; public static final String TOOL_CLIP = "clip"; public static final String TOOL_COBBLE_ROD = "cobbleRod"; + public static final String TOOL_SMELT_ROD = "smeltRod"; public static final String BAUBLE_INTRO = "bIntro"; public static final String BAUBLE_TINY_PLANET = "tinyPlanet"; diff --git a/src/main/resources/assets/botania/lang/en_US.lang b/src/main/resources/assets/botania/lang/en_US.lang index be453e095..e01fd1a37 100644 --- a/src/main/resources/assets/botania/lang/en_US.lang +++ b/src/main/resources/assets/botania/lang/en_US.lang @@ -804,6 +804,7 @@ item.botania:dreamwoodTwig.name=Dreamwood Twig item.botania:monocle.name=Manaseer Monocle item.botania:clip.name=Lens Clip item.botania:cobbleRod.name=Rod of the Depths +item.botania:smeltRod.name=Rod of the Molten Core # BREW NAMES botania.brew.fallback=Fallback @@ -1655,6 +1656,11 @@ botania.entry.cobbleRod=Rod of the Depths botania.page.cobbleRod0=The &1Rod of the Depths&0 acts pretty much as a variant to the the &1Rod of the Lands&0. It does exactly the same thing but with &1Cobblestone&0 for a bit of a higher price. botania.page.cobbleRod1=It's cobbling time +# -- ROD OF THE MOLTEN CORE +botania.entry.smeltRod=Rod of the Molten Core +botania.page.smeltRod0=The &1Rod of the Molten Core&0 has the ability to expel heat provenient from the world's core. Holding it via right click and pointing at a block in the world that can be smelted into a different type of block will quickly turn it into that.
For some examples, &1Cobblestone&0 turns into &1Stone&0, &1Sand&0 into &1Glass&0, so on. +botania.page.smeltRod1=Stolen from Efreet + # - BAUBLES # -- AN INTRODUCTION TO BAUBLES botania.entry.bIntro=An Introduction to Baubles diff --git a/src/main/resources/assets/botania/textures/items/unused/moltencoreRod.png b/src/main/resources/assets/botania/textures/items/smeltRod.png similarity index 100% rename from src/main/resources/assets/botania/textures/items/unused/moltencoreRod.png rename to src/main/resources/assets/botania/textures/items/smeltRod.png diff --git a/src/main/resources/assets/botania/textures/items/smeltRod.png.mcmeta b/src/main/resources/assets/botania/textures/items/smeltRod.png.mcmeta new file mode 100644 index 000000000..5334ffbca --- /dev/null +++ b/src/main/resources/assets/botania/textures/items/smeltRod.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": { } +} \ No newline at end of file diff --git a/src/main/resources/assets/botania/textures/items/unused/moltencoreRod.png.mcmeta b/src/main/resources/assets/botania/textures/items/unused/moltencoreRod.png.mcmeta deleted file mode 100644 index 91fc10949..000000000 --- a/src/main/resources/assets/botania/textures/items/unused/moltencoreRod.png.mcmeta +++ /dev/null @@ -1,18 +0,0 @@ -{ - "animation": { - "frametime": 6, - "frames": [ - { - "index":0, - "time":8 - }, - 1, - 2, - 3, - { - "index":4, - "time":4 - } - ] - } -}