package flymod.baseclasses;
import ic2.api.item.ElectricItem;
import ic2.api.item.IElectricItem;
import java.util.List;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class ICToolMain extends MainItem implements IElectricItem {
private int storage;
private int tier;
private int transferLimit;
private int energyPerUse;
public boolean onBlockClick(ItemStack item, World world, EntityPlayer player, int x, int y, int z, int side) {
return false;
}
public boolean onRightClick(ItemStack item, World world, EntityPlayer player) {
return false;
}
public ICToolMain(int id, String unlocalizedName, int tier, int storage, int transferLimit, int energyPerUse) {
super(id, unlocalizedName);
this.setMaxDamage(10);
this.setNoRepair();
this.setMaxStackSize(1);
this.storage = storage;
this.tier = tier;
this.transferLimit = transferLimit;
this.energyPerUse = energyPerUse;
}
int i = 0;
public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) {
if (!world.isRemote)
if (ElectricItem.manager.canUse(itemStack, energyPerUse))
if (onRightClick(itemStack, world, player))
ElectricItem.manager.use(itemStack, energyPerUse, player);
player.addChatMessage("Использовано " + energyPerUse + "ЕУ" + "(" + i++ + ")" + "; Сейчас в устройстве: " + storage);
return itemStack;
}
public boolean onItemUse(ItemStack itemStack, EntityPlayer player, World world, int x, int y, int z, int side, float par8, float par9, float par10) {
if (!world.isRemote)
if (ElectricItem.manager.canUse(itemStack, energyPerUse))
if (onBlockClick(itemStack, world, player, x, y, z, side)) {
ElectricItem.manager.use(itemStack, energyPerUse, player);
player.addChatMessage("Использовано " + energyPerUse + "ЕУ" + "(" + i++ + ")" + "; Сейчас в устройстве: " + storage);
return true;
}
return false;
}
@Override
public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) {
ItemStack var4 = new ItemStack(this, 1);
ElectricItem.manager.charge(var4, Integer.MAX_VALUE, Integer.MAX_VALUE, true, false);
par3List.add(var4);
par3List.add(new ItemStack(this, 1, this.getMaxDamage()));
}
@Override
public boolean canProvideEnergy(ItemStack itemStack) {
return false;
}
@Override
public int getChargedItemId(ItemStack itemStack) {
return this.itemID;
}
@Override
public int getEmptyItemId(ItemStack itemStack) {
return this.itemID;
}
@Override
public int getMaxCharge(ItemStack itemStack) {
return this.storage;
}
@Override
public int getTier(ItemStack itemStack) {
return this.tier;
}
@Override
public int getTransferLimit(ItemStack itemStack) {
return this.transferLimit;
}
}
package flymod.baseclasses;
import ic2.api.item.ElectricItem;
import ic2.api.item.IElectricItem;
import java.util.List;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class ICToolMain extends MainItem implements IElectricItem {
private int storage;
private int tier;
private int transferLimit;
private int energyPerUse;
public ICToolMain(int id, String unlocalizedName, int tier, int storage, int transferLimit, int energyPerUse) {
super(id, unlocalizedName);
this.setMaxDamage(10);
this.setNoRepair();
this.setMaxStackSize(1);
this.storage = storage;
this.tier = tier;
this.transferLimit = transferLimit;
this.energyPerUse = energyPerUse;
}
@Override
public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer player){
if (!world.isRemote) {
if (ElectricItem.manager.canUse(itemstack, this.energyPerUse)) {
ElectricItem.manager.use(itemstack, this.energyPerUse, player);
} else {
player.addChatMessage("Нету энергии");
}
}
return itemstack;
}
@Override
public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) {
ItemStack var4 = new ItemStack(this, 1);
ElectricItem.manager.charge(var4, Integer.MAX_VALUE, Integer.MAX_VALUE, true, false);
par3List.add(var4);
par3List.add(new ItemStack(this, 1, this.getMaxDamage()));
}
@Override
public boolean canProvideEnergy(ItemStack itemStack) {
return true;
}
@Override
public int getChargedItemId(ItemStack itemStack) {
return this.itemID;
}
@Override
public int getEmptyItemId(ItemStack itemStack) {
return this.itemID;
}
@Override
public int getMaxCharge(ItemStack itemStack) {
return this.storage;
}
@Override
public int getTier(ItemStack itemStack) {
return this.tier;
}
@Override
public int getTransferLimit(ItemStack itemStack) {
return this.transferLimit;
}
}
@Override
public final ItemStack getContainerItemStack(ItemStack aStack) {
if(aStack.getItemDamage() >= aStack.getMaxDamage()-1) {
aStack.setItemDamage(0);
} else {
aStack.setItemDamage(aStack.getItemDamage() + 1);
}
return aStack;
}
int damage = aStack.getItemDamage;
if(damage > 10){
//крафт, или еще что нибудь
}
else{
//оставить пустым
}
Если я не ошибаюсь, крафт происходит в крафтере, а getContainerItemStack просто возвращает предмет.Vova_master написал(а):Проверять через if(){}.
Код:int damage = aStack.getItemDamage; if(damage > 10){ //крафт, или еще что нибудь } else{ //оставить пустым }
Ты хочешь править исходники? Ну-ну. Только потом не жалуйся, что майн не робит. Да, и где ты увидел getContainerItemStack? Тут только getItemDamageTry4W написал(а):Если я не ошибаюсь, крафт происходит в крафтере, а getContainerItemStack просто возвращает предмет.Vova_master написал(а):Проверять через if(){}.
Код:int damage = aStack.getItemDamage; if(damage > 10){ //крафт, или еще что нибудь } else{ //оставить пустым }
Можно ли обойтись без переписывания крафтера?
/**
* gets the damage of an itemstack
*/
public int getItemDamage()
{
if (getItem() != null)
{
return getItem().getDamage(this);
}
return this.itemDamage;
}
Переписать, в смысле дописать. (Наследовать/оверрайдить)Vova_master написал(а):Ты хочешь править исходники? Ну-ну. Только потом не жалуйся, что майн не робит. Да, и где ты увидел getContainerItemStack? Тут только getItemDamage
/**
* Return the itemDamage represented by this ItemStack. Defaults to the itemDamage field on ItemStack, but can be overridden here for other sources such as NBT.
*
* @param stack The itemstack that is damaged
* @return the damage value
*/
public int getDamage(ItemStack stack)
{
return stack.itemDamage;
}
Это уже реализовано. Нужно отменить возможность крафта в зависимости от прочности предмета.Vova_master написал(а):Оу. Насчет get... тупанул.... Ну, для этого наверняка есть метод, на крайняк его можно зашаманить с нуля. Ща попробую. Только без теста
[merge_posts_bbcode]Добавлено: 21.04.2014 23:28:43[/merge_posts_bbcode]
В Item.java нашел. Подойдет?Код:/** * Return the itemDamage represented by this ItemStack. Defaults to the itemDamage field on ItemStack, but can be overridden here for other sources such as NBT. * * @param stack The itemstack that is damaged * @return the damage value */ public int getDamage(ItemStack stack) { return stack.itemDamage; }
Ну через эту проверять прочность, и если она ниже определенной планки(2, например), то крафтить нельзя. А если нет, то можно. Может, так как то:Try4W написал(а):Это уже реализовано. Нужно отменить возможность крафта в зависимости от прочности предмета.Vova_master написал(а):Оу. Насчет get... тупанул.... Ну, для этого наверняка есть метод, на крайняк его можно зашаманить с нуля. Ща попробую. Только без теста
[merge_posts_bbcode]Добавлено: 21.04.2014 23:28:43[/merge_posts_bbcode]
В Item.java нашел. Подойдет?Код:/** * Return the itemDamage represented by this ItemStack. Defaults to the itemDamage field on ItemStack, but can be overridden here for other sources such as NBT. * * @param stack The itemstack that is damaged * @return the damage value */ public int getDamage(ItemStack stack) { return stack.itemDamage; }
public void damagedCraft(ItemStack stack){
int damage = stack.itemDamage;
if(damage > 2//или другого числа){
//что-то, для запрета крафта, придется, походу, самим шаманить, за что нас(меня) Анти(или кто-нибудь еще) обязательно пришибет
}
else{}
}
Поздравляю. ты потихоньку добираешься до уровня RaVeN-а! Тебе осталось еще немного, поспеши!Vova_master написал(а):Ну через эту проверять прочность, и если она ниже определенной планки(2, например), то крафтить нельзя. А если нет, то можно. Может, так как то:Try4W написал(а):Это уже реализовано. Нужно отменить возможность крафта в зависимости от прочности предмета.Vova_master написал(а):Оу. Насчет get... тупанул.... Ну, для этого наверняка есть метод, на крайняк его можно зашаманить с нуля. Ща попробую. Только без теста
[merge_posts_bbcode]Добавлено: 21.04.2014 23:28:43[/merge_posts_bbcode]
В Item.java нашел. Подойдет?Код:/** * Return the itemDamage represented by this ItemStack. Defaults to the itemDamage field on ItemStack, but can be overridden here for other sources such as NBT. * * @param stack The itemstack that is damaged * @return the damage value */ public int getDamage(ItemStack stack) { return stack.itemDamage; }
Сам только что сам на ходу зашаманил.Код:public void damagedCraft(ItemStack stack){ int damage = stack.itemDamage; if(damage > 2//или другого числа){ //что-то, для запрета крафта, придется, походу, самим шаманить, за что нас(меня) Анти(или кто-нибудь еще) обязательно пришибет } else{} }