Что за 5 параметр(charge) для брони и как его реализовать на сервер?

Версия Minecraft
1.7.10

jopi

Попрошайка
1,421
30
260
Что за 5 параметр(charge) для брони и как его реализовать на сервер?

Java:
  public LavaUltimaPlateChest(int par1, uq par2EnumArmorMaterial, int par3, int par4)
  {
    super(par1, par2EnumArmorMaterial, par3, par4, 5000, 1);
  }
 
  @SideOnly(Side.CLIENT)
  public void a(ly par1IconRegister)
  {
    this.ct = par1IconRegister.a("LavaUltimaChestPlate:Chest");
  }
 
  @SideOnly(Side.CLIENT)
  public String getArmorTexture(wm stack, mp entity, int slot, int layer)
  {
    return "/mods/LavaUltimaChestPlate/textures/armor/lavachest.png";
  }
 
  public long getShildDamage(sq player, wm armor, int damage, int armorslot)
  {
    return discharge(armor, damage);
  }
}
Это декомп кода брони
А вот extends брони

Java:
 extends LavaChestPlateItem
{
  public LavaChestPlateChest(int par1, uq par2EnumArmorMaterial, int par3, int par4)
  {
    super(par1, par2EnumArmorMaterial, par3, par4, 2000, 1.0D);
  }
 
  public LavaChestPlateChest(int par1, uq par2EnumArmorMaterial, int par3, int par4, int par5, int par6)
  {
    super(par1, par2EnumArmorMaterial, par3, par4, par5, par6);
  }
 
  @SideOnly(Side.CLIENT)
  public void a(ly par1IconRegister)
  {
    this.ct = par1IconRegister.a("LavaChestPlate:Chest");
  }
 
  public void a(wm stack, aab world, mp entity, int slot, boolean isEquipped) {}
 
  @SideOnly(Side.CLIENT)
  public String getArmorTexture(wm stack, mp entity, int slot, int layer)
  {
    return "/mods/LavaChestPlate/textures/armor/lavachest.png";
  }
 
  @SideOnly(Side.CLIENT)
  public void a(wm par1ItemStack, sq par2EntityPlayer, List par2List, boolean par4)
  {
    super.a(par1ItemStack, par2EntityPlayer, par2List, par4);
    par2List.add("�7 ����� ������ ��� � ��������");
  }
 
  public int getSlot()
  {
    return 1;
  }
}
И экстендс экстендста...

Java:
public abstract class LavaChestPlateItem
  extends uo
  implements ISpecialArmor, ILavaItem
{
  public LavaChestPlateItem(int par1, uq par2EnumArmorMaterial, int par3, int par4, int maxCharge, double absorbation)
  {
    super(par1, par2EnumArmorMaterial, par3, par4);
    
    this.maxCharge = Integer.valueOf(maxCharge);
    
    a(ve.j);
    this.absorbation = absorbation;
    e(5000);
    d(1);
  }
 
  protected double absorbation = 1.0D;
  private Integer maxCharge = Integer.valueOf(0);
  public Long tick = Long.valueOf(0L);
 
  public void a(int par1, ve par2CreativeTabs, List par3List)
  {
    wm j = new wm(par1, 1, 0);
    charge(j, this.maxCharge.intValue());
    par3List.add(j);
  }
 
  public abstract int getSlot();
 
  @SideOnly(Side.CLIENT)
  public void a(wm par1ItemStack, sq par2EntityPlayer, List par2List, boolean par4)
  {
    String[] info = getInfo(par1ItemStack).split(":");
    par2List.add("�a " + info[0] + "L");
    par2List.add("�d ������� ������� " + String.valueOf(Integer.valueOf(info[1]).intValue() / 500) + "D");
    par2List.add("�d ������ ��� ������� " + String.valueOf(Integer.valueOf(info[2])) + "D");
  }
 
  @SideOnly(Side.SERVER)
  public void onArmorTickUpdate(aab world, sq player, wm itemStack)
  {
    if (this.tick.longValue() % 40L == 0L) {
      charge(itemStack, 10);
    }
    Long localLong1 = this.tick;Long localLong2 = this.tick = Long.valueOf(this.tick.longValue() + 1L);
  }
 
  public ISpecialArmor.ArmorProperties getProperties(ng player, wm armor, mg source, double damage, int slot)
  {
    return new ISpecialArmor.ArmorProperties(0, 0.0D, 0);
  }
 
  int zLevel = 65236;
 
  @SideOnly(Side.CLIENT)
  public void drawTexturedModalRect(int par1, int par2, int par3, int par4, int par5, int par6)
  {
    float f = 0.00390625F;
    float f1 = 0.00390625F;
    bgd tessellator = bgd.a;
    tessellator.b();
    tessellator.a(par1 + 0, par2 + par6, this.zLevel, (par3 + 0) * f, (par4 + par6) * f1);
    tessellator.a(par1 + par5, par2 + par6, this.zLevel, (par3 + par5) * f, (par4 + par6) * f1);
    tessellator.a(par1 + par5, par2 + 0, this.zLevel, (par3 + par5) * f, (par4 + 0) * f1);
    tessellator.a(par1 + 0, par2 + 0, this.zLevel, (par3 + 0) * f, (par4 + 0) * f1);
    tessellator.a();
  }
 
  @SideOnly(Side.CLIENT)
  protected void renderInventorySlot(int x, int y, float par4, int slot)
  {
    wm itemstack = ClientProxy.mc.g.bK.f(slot);
    if (itemstack != null)
    {
      float f1 = itemstack.b - par4;
      if (f1 > 0.0F)
      {
        GL11.glPushMatrix();
        float f2 = 1.0F + f1 / 5.0F;
        GL11.glTranslatef(x + 8, y + 12, 0.0F);
        GL11.glScalef(1.0F / f2, (f2 + 1.0F) / 2.0F, 1.0F);
        GL11.glTranslatef(-(x + 8), -(y + 12), 0.0F);
      }
      ClientProxy.itemRenderer.b(ClientProxy.mc.q, ClientProxy.mc.p, itemstack, x, y);
      if (f1 > 0.0F) {
        GL11.glPopMatrix();
      }
      ClientProxy.itemRenderer.c(ClientProxy.mc.q, ClientProxy.mc.p, itemstack, x, y);
    }
  }
 
  static long arrSlotTime = 0L;
  static int t = 0;
 
  @SideOnly(Side.CLIENT)
  public int getArmorDisplay(sq player, wm armor, int slot)
  {
    axs scaledresolution = new axs(ClientProxy.mc.z, ClientProxy.mc.c, ClientProxy.mc.d);
    int k = scaledresolution.a();
    int l = scaledresolution.b();
    
    avb.c();
    
    int y = l - 24 - 12;
    y -= 18 * slot;
    
    renderInventorySlot(k - 24, y, 0.0F, slot);
    
    avb.a();
    
    int car = getCharge(armor).intValue();
    
    ClientProxy.mc.q.a(String.valueOf(car), k - 52, y + 4, 10092288);
    long time = System.currentTimeMillis();
    if (arrSlotTime < time)
    {
      arrSlotTime = time + 300L;
      t = 0;
      for (wm s : player.bK.b) {
        if ((s != null) &&
          ((s.b() instanceof LavaChestPlateItem))) {
          t += getCharge(s).intValue();
        }
      }
    }
    GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    ClientProxy.mc.p.b("/gui/icons.png");
    
    return 0;
  }
 
  public void damageArmor(ng entity, wm stack, mg source, int damage, int slot) {}
 
  public Integer charge(wm armor, int amount)
  {
    LavaChestPlateItem item = (LavaChestPlateItem)armor.b();
    if ((amount < 0) || (armor.a > 1)) {
      return Integer.valueOf(0);
    }
    bs nbtData = Utils.getOrCreateNbtData(armor);
    int charge = nbtData.e("charge");
    int maxCharge = item.getMaxCharge(nbtData).intValue();
    if (amount > maxCharge - charge) {
      amount = maxCharge - charge;
    }
    charge += amount;
    if (charge > maxCharge) {
      return Integer.valueOf(maxCharge);
    }
    nbtData.a("charge", charge);
    
    return Integer.valueOf(charge);
  }
 
  public Integer getMaxCharge(bs nbtData)
  {
    return Integer.valueOf(this.maxCharge.intValue() + nbtData.e("amp") + nbtData.c("dss") * 500);
  }
 
  public Integer getAmp(bs nbtData)
  {
    return Integer.valueOf(nbtData.e("amp"));
  }
 
  public int getDarkShield(bs nbtData)
  {
    return nbtData.c("dss");
  }
 
  public Integer getCharge(wm armor)
  {
    LavaChestPlateItem item = (LavaChestPlateItem)armor.b();
    if (armor.a > 1) {
      return Integer.valueOf(0);
    }
    bs nbtData = Utils.getOrCreateNbtData(armor);
    int charge = nbtData.e("charge");
    int maxCharge = item.getMaxCharge(nbtData).intValue();
    if (charge > maxCharge) {
      charge = maxCharge;
    }
    return Integer.valueOf(charge);
  }
 
  public String getInfo(wm armor)
  {
    LavaChestPlateItem item = (LavaChestPlateItem)armor.b();
    if (armor.a > 1) {
      return "0/0";
    }
    bs nbtData = Utils.getOrCreateNbtData(armor);
    int charge = nbtData.e("charge");
    int amp = item.getAmp(nbtData).intValue();
    int dss = item.getDarkShield(nbtData);
    
    return charge + "/" + (this.maxCharge.intValue() + amp + dss * 500) + ":" + amp + ":" + dss;
  }
 
  public long discharge(wm armor, int value)
  {
    LavaChestPlateItem item = (LavaChestPlateItem)armor.b();
    if (armor.a > 1) {
      return 0L;
    }
    bs nbtData = Utils.getOrCreateNbtData(armor);
    int charge = nbtData.e("charge");
    int maxCharge = item.getMaxCharge(nbtData).intValue();
    int temp_charge = charge;
    if (charge <= 0) {
      return 0L;
    }
    if (charge > maxCharge) {
      charge = maxCharge;
    }
    if (charge - value >= 0) {
      charge -= value;
    } else {
      charge = 0;
    }
    nbtData.a("charge", charge);
    
    temp_charge = value - temp_charge;
    if (temp_charge > 0) {
      return charge << 32 | temp_charge & 0xFFFFFFFF;
    }
    return charge << 32 | 0L;
  }
 
  public double getAbsorbation()
  {
    return this.absorbation;
  }
 
  @SideOnly(Side.CLIENT)
  public boolean e(wm par1ItemStack)
  {
    return true;
  }
 
  public boolean isBookEnchantable(wm itemstack1, wm itemstack2)
  {
    return false;
  }
 
  @SideOnly(Side.CLIENT)
  public boolean onEntityItemUpdate(rh entityItem)
  {
    Minecraft.x().j.a(new bem(entityItem.q, entityItem.u, entityItem.v, entityItem.w, 0.0D, 0.0D, 0.0D));
    return super.onEntityItemUpdate(entityItem);
  }
 
  public boolean a(wm par1ItemStack, wm par2ItemStack)
  {
    return false;
  }
 
  @SideOnly(Side.CLIENT)
  public bbz getArmorModel(ng entityLiving, wm itemstack, int armorSlot)
  {
    ModelBaseLavaArmor armorModel = (ModelBaseLavaArmor)ClientProxy.armorModels.get(this);
    if (armorModel != null)
    {
      armorModel.d.j = false;
      
      armorModel.c.j = (armorSlot == 0);
      
      armorModel.e.j = ((armorSlot == 1) || (armorSlot == 2));
      armorModel.f.j = (armorSlot == 1);
      armorModel.g.j = (armorSlot == 1);
      armorModel.h.j = ((armorSlot == 2) || (armorSlot == 3));
      armorModel.i.j = ((armorSlot == 2) || (armorSlot == 3));
      
      armorModel.n = entityLiving.ag();
      armorModel.q = entityLiving.af();
      armorModel.s = entityLiving.h_();
      
      armorModel.m = 0;
      armorModel.o = false;
      
      sq player = (sq)entityLiving;
      
      wm held_item = player.p(0);
      if (held_item != null)
      {
        armorModel.m = 1;
        if (player.bW() > 0)
        {
          xp enumaction = held_item.o();
          if (enumaction == xp.e) {
            armorModel.o = true;
          } else if (enumaction == xp.d) {
            armorModel.m = 3;
          }
        }
      }
    }
    return armorModel;
  }
 
  public long getShildDamage(sq player, wm armor, int damage, int armorslot)
  {
    long damage_ = discharge(armor, damage);
    armor.a(damage / 10, player);
    return damage_;
  }
}
Код с мода 1.5.2
Имплент специальная броня... ISpecialArmor
как это работает???
 
Решение
Ну так бы и написал, а не
Что за 5 параметр(charge) для брони и как его реализовать на сервер?
Этот код обфусцирован. Где-то была тема на этом форуме как правильно декомпилировать моды с деобфускацией, поищи. А дальше пишешь так же, только для 1.7.10

Eifel

Модератор
1,624
79
609
Что за 5 параметр charge, хоть бы строку указал, где... Накидал какие-то куски кода, ничего не понятно. Хоть бы подписал как-то по-нормальному.
Charge не нашел, нашел только maxCharge - наверное это максимальный заряд. Как можно догадаться, это броня с зарядом и со всякими плюшками. А что значит реализовать параметр на сервер я вообще не имею понятия
 
5,023
47
784
очевидно какая то электрическая броня, charge вроде довольно ясно намекает....
 

jopi

Попрошайка
1,421
30
260
Что за charge, хоть бы строку указал, где... Накидал какие-то куски кода, ничего не понятно. Хоть бы подписал как-то по-нормальному.
Charge не нашел, нашел только maxCharge - наверное это максимальный заряд. Как можно догадаться, это броня с зарядом и со всякими плюшками. А что значит реализовать параметр на сервер я вообще не имею понятия
Я насколько понял из кодов 5-й параметр кол-во заряда, если его 1000 и нанесено урона допустим мечём 500 то заряда остаётся 500, заряд работает как щит, когда 0 заряда то урон идёт по игроку, Заряд сам пополняется вроде в течении 20-40 тиков по 10L(ед. заряда(урона))
 

Eifel

Модератор
1,624
79
609
Ну так бы и написал, а не
Что за 5 параметр(charge) для брони и как его реализовать на сервер?
Этот код обфусцирован. Где-то была тема на этом форуме как правильно декомпилировать моды с деобфускацией, поищи. А дальше пишешь так же, только для 1.7.10
 
Сверху