Added the Rod of the Molten Core.

This commit is contained in:
Lizbeth Rika committed 2015-01-25 00:15:04 +00:00
1 parent bec0603ce3
commit 1dd20a8a11
11 files changed
+174 -20

No files matched your search

@@ -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);
@@ -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",
@@ -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++) {
@@ -0,0 +1,144 @@
/**
* This class was created by <Vazkii>. 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<EntityPlayer, SmeltData> 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;
}
}
}
@@ -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"));
@@ -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",
@@ -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";