- 127
- 0
Добрый день,
Я сделал, предмет, который вставляется прибор. При работе прибора предмет теряет прочность, отображая прочность в виде полоски индикатора.
При игре через сервер возникла проблема, полоска начинает моргать, то появляется то не появляется, и если появляется то всегда целая. Подскажите в чем может быть дело, в какую сторону копать?
Код предмета:
[merge_posts_bbcode]Добавлено: 18.06.2015 19:41:51[/merge_posts_bbcode]
Код прибора:
Я сделал, предмет, который вставляется прибор. При работе прибора предмет теряет прочность, отображая прочность в виде полоски индикатора.
При игре через сервер возникла проблема, полоска начинает моргать, то появляется то не появляется, и если появляется то всегда целая. Подскажите в чем может быть дело, в какую сторону копать?
Код предмета:
Код:
public class ItemLens extends Item {
public static enum TypeLens {
base,
normal,
advance,
perfect
}
private int maxDmg;
private TypeLens typeLens;
public ItemLens(int i, int maxDmg, TypeLens typeLens) {
super(i);
this.maxDmg = maxDmg;
this.setMaxStackSize(1);
this.setMaxDamage(this.maxDmg);
this.setNoRepair();
this.typeLens = typeLens;
}
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack stack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) {
super.addInformation(stack, par2EntityPlayer, par3List, par4);
Integer dmg = getDamageOfStack(stack);
par3List.add(EnumChatFormatting.YELLOW + "Максимальный: " + maxDmg);
par3List.add(EnumChatFormatting.RED + "Получено: " + dmg);
}
@SideOnly(Side.CLIENT)
public EnumRarity getRarity(ItemStack var1) {
return EnumRarity.uncommon;
}
public void setDamageForStack(ItemStack stack, int advDmg) {
NBTTagCompound nbtData = ItemStackUtil.getOrCreateNbtData(stack);
nbtData.setInteger("advDmg", advDmg);
if(this.maxDmg > 0) {
double p = (double)advDmg / (double)this.maxDmg;
int newDmg = (int)((double)stack.getMaxDamage() * p);
if(newDmg >= stack.getMaxDamage()) {
newDmg = stack.getMaxDamage() - 1;
}
stack.setItemDamage(newDmg);
}
}
public int getDamageOfStack(ItemStack stack) {
NBTTagCompound nbtData = ItemStackUtil.getOrCreateNbtData(stack);
return nbtData.getInteger("advDmg");
}
public int getMaxDamageEx() {
return this.maxDmg;
}
public void damageItemStack(ItemStack stack, int Dmg) {
this.setDamageForStack(stack, this.getDamageOfStack(stack) + Dmg);
}
public boolean isDamagest(ItemStack stack){
return this.getDamageOfStack(stack) >= this.maxDmg;
}
}
Код прибора:
Код:
public void updateEntity() {
super.updateEntity();
if(!this.initialized && super.worldObj != null) {
this.intialize();
}
if(!super.worldObj.isRemote) {
if(this.lastX != super.xCoord || this.lastZ != super.zCoord || this.lastY != super.yCoord) {
this.lastX = super.xCoord;
this.lastY = super.yCoord;
this.lastZ = super.zCoord;
this.onUnloaded();
this.intialize();
}
this.gainFuel();
if(this.generating > 0) {
int dmg = this.generating;
if(this.storage + this.generating <= this.maxStorage) {
this.storage += this.generating;
} else {
dmg = this.maxStorage - this.storage;
this.storage = this.maxStorage;
}
dmgLens(dmg);
}
boolean needInvUpdate = false;
boolean sentPacket = false;
for(int i = 0; i < this.chargeSlots.length; ++i) {
if(this.chargeSlots[i] != null && Item.itemsList[this.chargeSlots[i].itemID] instanceof IElectricItem && this.storage > 0) {
int var4 = ElectricItem.manager.charge(this.chargeSlots[i], this.storage, 4, false, false);
if(var4 > 0) {
needInvUpdate = true;
}
this.storage -= var4;
}
}
if(needInvUpdate) {
this.onInventoryChanged();
}
}
}
public void dmgLens(int dmg) {
ItemStack stack = getLens();
if (stack != null && stack.getItem() instanceof ItemLens) {
ItemLens lens = (ItemLens) stack.getItem();
lens.damageItemStack(stack, dmg);
if(lens.isDamagest(stack)){
setInventorySlotLens(null);
}
}
}