
I redone where the items/blocsks are stored and how the configs are handled to clean up it and give space. You can change the config line to AWWayofTime if you want to keep the compatibility with old configs. Now you reference the blocks from the ModBlocks and Items from the ModItems.
298 lines
11 KiB
Java
298 lines
11 KiB
Java
package WayofTime.alchemicalWizardry.common.items;
|
|
|
|
import WayofTime.alchemicalWizardry.common.AlchemicalWizardry;
|
|
import WayofTime.alchemicalWizardry.common.ModBlocks;
|
|
import WayofTime.alchemicalWizardry.common.ModItems;
|
|
import WayofTime.alchemicalWizardry.common.rituals.RitualComponent;
|
|
import WayofTime.alchemicalWizardry.common.rituals.Rituals;
|
|
import WayofTime.alchemicalWizardry.common.tileEntity.TEMasterStone;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
import net.minecraft.client.renderer.texture.IconRegister;
|
|
import net.minecraft.creativetab.CreativeTabs;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.tileentity.TileEntity;
|
|
import net.minecraft.util.ChatMessageComponent;
|
|
import net.minecraft.util.EnumChatFormatting;
|
|
import net.minecraft.world.World;
|
|
|
|
import java.util.List;
|
|
|
|
public class ItemRitualDiviner extends EnergyItems {
|
|
private int maxMetaData;
|
|
|
|
public ItemRitualDiviner(int id)
|
|
{
|
|
super(id);
|
|
this.maxStackSize = 1;
|
|
setEnergyUsed(100);
|
|
this.setCreativeTab(AlchemicalWizardry.tabBloodMagic);
|
|
this.maxMetaData = 4;
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public void registerIcons(IconRegister iconRegister)
|
|
{
|
|
this.itemIcon = iconRegister.registerIcon("AlchemicalWizardry:RitualDiviner");
|
|
}
|
|
|
|
@Override
|
|
public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4)
|
|
{
|
|
par3List.add("Used to explore new types of rituals");
|
|
|
|
if (this.getMaxRuneDisplacement(par1ItemStack) == 1)
|
|
{
|
|
par3List.add("Can place Dusk runes");
|
|
} else
|
|
{
|
|
par3List.add("Can not place Dusk runes");
|
|
}
|
|
|
|
if (!(par1ItemStack.stackTagCompound == null))
|
|
{
|
|
int ritualID = this.getCurrentRitual(par1ItemStack);
|
|
//TODO
|
|
par3List.add("Current owner: " + par1ItemStack.stackTagCompound.getString("ownerName"));
|
|
par3List.add("RitualID: " + (ritualID + 1));
|
|
List<RitualComponent> ritualList = Rituals.getRitualList(this.getCurrentRitual(par1ItemStack) + 1);
|
|
int blankStones = 0;
|
|
int airStones = 0;
|
|
int waterStones = 0;
|
|
int fireStones = 0;
|
|
int earthStones = 0;
|
|
int duskStones = 0;
|
|
|
|
for (RitualComponent rc : ritualList)
|
|
{
|
|
switch (rc.getStoneType())
|
|
{
|
|
case RitualComponent.BLANK:
|
|
blankStones++;
|
|
break;
|
|
|
|
case RitualComponent.AIR:
|
|
airStones++;
|
|
break;
|
|
|
|
case RitualComponent.WATER:
|
|
waterStones++;
|
|
break;
|
|
|
|
case RitualComponent.FIRE:
|
|
fireStones++;
|
|
break;
|
|
|
|
case RitualComponent.EARTH:
|
|
earthStones++;
|
|
break;
|
|
|
|
case RitualComponent.DUSK:
|
|
duskStones++;
|
|
break;
|
|
}
|
|
}
|
|
|
|
par3List.add("Blank stones: " + blankStones);
|
|
par3List.add(EnumChatFormatting.AQUA + "Air stones: " + airStones);
|
|
par3List.add(EnumChatFormatting.BLUE + "Water stones: " + waterStones);
|
|
par3List.add(EnumChatFormatting.RED + "Fire stones: " + fireStones);
|
|
par3List.add(EnumChatFormatting.DARK_GREEN + "Earth stones: " + earthStones);
|
|
par3List.add(EnumChatFormatting.BOLD + "Dusk stones: " + duskStones);
|
|
//par3List.add("Ritual Name: " + Rituals.getNameOfRitual(ritualID));
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public String getItemDisplayName(ItemStack par1ItemStack)
|
|
{
|
|
if (!(par1ItemStack.stackTagCompound == null))
|
|
{
|
|
int ritualID = this.getCurrentRitual(par1ItemStack);
|
|
return "Ritual: " + Rituals.getNameOfRitual(ritualID);
|
|
//par3List.add("Current owner: " + par1ItemStack.stackTagCompound.getString("ownerName"));
|
|
} else
|
|
{
|
|
return super.getItemStackDisplayName(par1ItemStack);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10)
|
|
{
|
|
EnergyItems.checkAndSetItemOwner(par1ItemStack, par2EntityPlayer);
|
|
ItemStack[] playerInventory = par2EntityPlayer.inventory.mainInventory;
|
|
TileEntity tileEntity = par3World.getBlockTileEntity(par4, par5, par6);
|
|
|
|
if (tileEntity instanceof TEMasterStone)
|
|
{
|
|
TEMasterStone masterStone = (TEMasterStone) tileEntity;
|
|
List<RitualComponent> ritualList = Rituals.getRitualList(this.getCurrentRitual(par1ItemStack) + 1);
|
|
int playerInvRitualStoneLocation = -1;
|
|
|
|
for (int i = 0; i < playerInventory.length; i++)
|
|
{
|
|
if (playerInventory[i] == null)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if (new ItemStack(ModBlocks.ritualStone).isItemEqual(playerInventory[i]))
|
|
{
|
|
playerInvRitualStoneLocation = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
for (RitualComponent rc : ritualList)
|
|
{
|
|
if (par3World.isAirBlock(par4 + rc.getX(), par5 + rc.getY(), par6 + rc.getZ()))
|
|
{
|
|
if (playerInvRitualStoneLocation >= 0)
|
|
{
|
|
if (rc.getStoneType() > this.maxMetaData + this.getMaxRuneDisplacement(par1ItemStack))
|
|
{
|
|
par3World.playAuxSFX(200, par4, par5 + 1, par6, 0);
|
|
return true;
|
|
}
|
|
|
|
if (!par2EntityPlayer.capabilities.isCreativeMode)
|
|
{
|
|
par2EntityPlayer.inventory.decrStackSize(playerInvRitualStoneLocation, 1);
|
|
}
|
|
|
|
par3World.setBlock(par4 + rc.getX(), par5 + rc.getY(), par6 + rc.getZ(), ModBlocks.ritualStone.blockID, rc.getStoneType(), 3);
|
|
|
|
if (par3World.isRemote)
|
|
{
|
|
par3World.playAuxSFX(2005, par4, par5 + 1, par6, 0);
|
|
EnergyItems.syphonBatteries(par1ItemStack, par2EntityPlayer, getEnergyUsed());
|
|
return true;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
} else
|
|
{
|
|
int blockID = par3World.getBlockId(par4 + rc.getX(), par5 + rc.getY(), par6 + rc.getZ());
|
|
|
|
if (blockID == ModBlocks.ritualStone.blockID)
|
|
{
|
|
int metadata = par3World.getBlockMetadata(par4 + rc.getX(), par5 + rc.getY(), par6 + rc.getZ());
|
|
|
|
if (metadata != rc.getStoneType())
|
|
{
|
|
if (rc.getStoneType() > this.maxMetaData + this.getMaxRuneDisplacement(par1ItemStack))
|
|
{
|
|
par3World.playAuxSFX(200, par4, par5 + 1, par6, 0);
|
|
return true;
|
|
}
|
|
|
|
par3World.setBlockMetadataWithNotify(par4 + rc.getX(), par5 + rc.getY(), par6 + rc.getZ(), rc.getStoneType(), 3);
|
|
EnergyItems.syphonBatteries(par1ItemStack, par2EntityPlayer, getEnergyUsed());
|
|
return true;
|
|
}
|
|
} else
|
|
{
|
|
par3World.playAuxSFX(0000, par4, par5 + 1, par6, 0);
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
// if (par3World.isRemote)
|
|
// {
|
|
// par3World.playAuxSFX(2005, par4, par5, par6, 0);
|
|
// EnergyItems.syphonBatteries(par1ItemStack, par2EntityPlayer, getEnergyUsed());
|
|
// return true;
|
|
// }
|
|
// return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
|
|
{
|
|
EnergyItems.checkAndSetItemOwner(par1ItemStack, par3EntityPlayer);
|
|
|
|
if (par3EntityPlayer.isSneaking())
|
|
{
|
|
int maxRitualID = Rituals.getNumberOfRituals();
|
|
int currentRitualID = this.getCurrentRitual(par1ItemStack);
|
|
|
|
if (currentRitualID + 1 >= maxRitualID)
|
|
{
|
|
this.setCurrentRitual(par1ItemStack, 0);
|
|
} else
|
|
{
|
|
this.setCurrentRitual(par1ItemStack, currentRitualID + 1);
|
|
}
|
|
|
|
if (par2World.isRemote)
|
|
{
|
|
ChatMessageComponent chatmessagecomponent = new ChatMessageComponent();
|
|
//chatmessagecomponent.func_111072_b("Current Essence: " + data.currentEssence + "LP");
|
|
chatmessagecomponent.addText("Current Ritual: " + Rituals.getNameOfRitual(this.getCurrentRitual(par1ItemStack)));
|
|
par3EntityPlayer.sendChatToPlayer(chatmessagecomponent);
|
|
}
|
|
}
|
|
|
|
return par1ItemStack;
|
|
}
|
|
|
|
public int getCurrentRitual(ItemStack par1ItemStack)
|
|
{
|
|
if (par1ItemStack.stackTagCompound == null)
|
|
{
|
|
par1ItemStack.setTagCompound(new NBTTagCompound());
|
|
}
|
|
|
|
return par1ItemStack.stackTagCompound.getInteger("ritualID");
|
|
}
|
|
|
|
public void setCurrentRitual(ItemStack par1ItemStack, int ritualID)
|
|
{
|
|
if (par1ItemStack.stackTagCompound == null)
|
|
{
|
|
par1ItemStack.setTagCompound(new NBTTagCompound());
|
|
}
|
|
|
|
par1ItemStack.stackTagCompound.setInteger("ritualID", ritualID);
|
|
}
|
|
|
|
public int getMaxRuneDisplacement(ItemStack par1ItemStack) //0 indicates the starting 4 runes, 1 indicates it can use Dusk runes
|
|
{
|
|
if (par1ItemStack.stackTagCompound == null)
|
|
{
|
|
par1ItemStack.setTagCompound(new NBTTagCompound());
|
|
}
|
|
|
|
return par1ItemStack.stackTagCompound.getInteger("maxRuneDisplacement");
|
|
}
|
|
|
|
public void setMaxRuneDisplacement(ItemStack par1ItemStack, int displacement)
|
|
{
|
|
if (par1ItemStack.stackTagCompound == null)
|
|
{
|
|
par1ItemStack.setTagCompound(new NBTTagCompound());
|
|
}
|
|
|
|
par1ItemStack.stackTagCompound.setInteger("maxRuneDisplacement", displacement);
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public void getSubItems(int id, CreativeTabs creativeTab, List list)
|
|
{
|
|
list.add(new ItemStack(ModItems.itemRitualDiviner));
|
|
ItemStack duskRitualDivinerStack = new ItemStack(ModItems.itemRitualDiviner);
|
|
((ItemRitualDiviner) duskRitualDivinerStack.getItem()).setMaxRuneDisplacement(duskRitualDivinerStack, 1);
|
|
list.add(duskRitualDivinerStack);
|
|
}
|
|
}
|