1.6.4 Дополнительный инвентарь игрока\новые слоты в инвентаре игрока

Статус
В этой теме нельзя размещать новые ответы.
2,955
12
Я в него не играю, не знаю как все. Ты можешь найти мой туториал по мобам если будешь внимательным.
 
Dragon2488 написал(а):
Я в него не играю, не знаю как все. Ты можешь найти мой туториал по мобам если будешь внимательным.
Меня не интересуют мобы, сделать их может каждый, но инвентарь - это гораздо сложнее, как я думаю.
 
Dragon2488 написал(а):
Разве? Ну давай, сделай моба. Без туториалов.
Спасибо за оффтоп, уже делал. Того же зомби, нового.
Код:
package backpackmod.common.entities;

import backpackmod.common.effects.Effect;
import backpackmod.common.effects.EnactEffect;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.ai.EntityAIAttackOnCollide;
import net.minecraft.entity.ai.EntityAIHurtByTarget;
import net.minecraft.entity.ai.EntityAILookIdle;
import net.minecraft.entity.ai.EntityAIMoveThroughVillage;
import net.minecraft.entity.ai.EntityAINearestAttackableTarget;
import net.minecraft.entity.ai.EntityAISwimming;
import net.minecraft.entity.ai.EntityAIWander;
import net.minecraft.entity.ai.EntityAIWatchClosest;
import net.minecraft.entity.ai.attributes.Attribute;
import net.minecraft.entity.ai.attributes.RangedAttribute;
import net.minecraft.entity.monster.EntityMob;
import net.minecraft.entity.passive.EntityVillager;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.DamageSource;
import net.minecraft.world.World;

public class EntityZombie extends EntityMob {

   public String texture = this.getRandomZombieTexture();
   protected static final Attribute field_110186_bp = (new RangedAttribute("zombie.spawnReinforcements", 0.0D, 0.0D, 1.0D)).func_111117_a("Spawn Reinforcements Chance");


   public EntityZombie(World var1) {
      super(var1);
      this.setHealth(16.0F);
      float var2 = 0.4F;
      this.getNavigator().setBreakDoors(true);
      super.tasks.addTask(0, new EntityAISwimming(this));
      super.tasks.addTask(1, new EntityAIAttackOnCollide(this, EntityPlayerMP.class, (double)var2, false));
      super.tasks.addTask(2, new EntityAIAttackOnCollide(this, EntityPlayer.class, (double)var2, false));
      super.tasks.addTask(3, new EntityAIAttackOnCollide(this, EntityZombie.class, (double)var2, true));
      super.tasks.addTask(4, new EntityAIAttackOnCollide(this, EntityVillager.class, (double)var2, true));
      super.tasks.addTask(5, new EntityAIMoveThroughVillage(this, (double)var2, false));
      super.tasks.addTask(6, new EntityAIWander(this, 0.30000001192092896D));
      super.tasks.addTask(7, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F));
      super.tasks.addTask(8, new EntityAILookIdle(this));
      super.targetTasks.addTask(10, new EntityAIHurtByTarget(this, false));
      super.targetTasks.addTask(11, new EntityAINearestAttackableTarget(this, EntityPlayerMP.class, 0, true));
      super.targetTasks.addTask(12, new EntityAINearestAttackableTarget(this, EntityPlayer.class, 0, true));
      super.targetTasks.addTask(13, new EntityAINearestAttackableTarget(this, EntityVillager.class, 0, false));
   }

   private String getRandomZombieTexture() {
      return "zombie_" + super.rand.nextInt(17) + ".png";
   }

   protected boolean canDespawn() {
      return false;
   }

   protected boolean isAIEnabled() {
      return true;
   }

   protected String getLivingSound() {
      return "mob.zombie.say";
   }

   protected String getHurtSound() {
      return "mob.zombie.hurt";
   }

   protected String getDeathSound() {
      return "mob.zombie.death";
   }

   protected void playStepSound(int var1, int var2, int var3, int var4) {
      super.worldObj.playSoundAtEntity(this, "mob.zombie.step", 0.15F, 1.0F);
   }

   protected Entity findPlayerToAttack() {
      EntityPlayer var1 = super.worldObj.getClosestVulnerablePlayerToEntity(this, 16.0D);
      return var1 != null && this.canEntityBeSeen(var1)?var1:null;
   }

   public boolean attackEntityFrom(DamageSource var1, float var2) {
      if(super.attackEntityFrom(var1, var2)) {
         Entity var3 = var1.getEntity();
         if(super.riddenByEntity != var3 && super.ridingEntity != var3) {
            if(var3 != this) {
               super.entityToAttack = var3;
            }

            return true;
         } else {
            return true;
         }
      } else {
         return false;
      }
   }

   public boolean attackEntityAsMob(Entity var1) {
      int var2 = super.rand.nextInt(5);
      if(var2 == 0) {
         ((EntityLivingBase)var1).addPotionEffect(new EnactEffect(Effect.bleeding.getId(), 2400, 1));
      }

      return var1.attackEntityFrom(DamageSource.causeMobDamage(this), 2.0F);
   }

   public void onUpdate() {
      super.onUpdate();
      if(!super.worldObj.isRemote && super.worldObj.difficultySetting == 0) {
         this.setDead();
      }

   }

   protected void attackEntity(Entity var1, float var2) {
      if(super.attackTime <= 0 && var2 < 2.0F && var1.boundingBox.maxY > super.boundingBox.minY && var1.boundingBox.minY < super.boundingBox.maxY) {
         super.attackTime = 20;
         this.attackEntityAsMob(var1);
      }

   }

   public float getBlockPathWeight(int var1, int var2, int var3) {
      return 0.5F - super.worldObj.getLightBrightness(var1, var2, var3);
   }

   public void writeEntityToNBT(NBTTagCompound var1) {
      super.writeEntityToNBT(var1);
   }

}
 
Dragon2488 написал(а):
Белый кубик, а не зомби.
Я дале тебе код энтити из моего мода, что тебе еще дать? Он пока не опенсоурс и в разработке. Дое..стебался тут.
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
-___________-
Я был не прав, созревает очередной RaVeN.
Вообще-то что моба запилить(не считая рендера), что инвентарь запилить - практически одно и то же по сложности, хотя для меня моб сложнее.
 
anti344 написал(а):
-___________-
Я был не прав, созревает очередной RaVeN.
Вообще-то что моба запилить(не считая рендера), что инвентарь запилить - практически одно и то же по сложности, хотя для меня моб сложнее.
Черт. Ты серьезно? -________-
Но для меня инвентарь труднее, как для тебя моб. У всех разное мышление и понимание сути дела :)
А про очередного RaVeN'а не надо. Я в отличии от него хотя бы писать умею.
 
771
5
minecraftsrv написал(а):
Тема все еще актуальна.
Добавь кнопку в инвентарь и при ее нажатии открывай свой, так думаю совместимость с модами не потеряется.
 
f1rSt1k написал(а):
minecraftsrv написал(а):
Тема все еще актуальна.
Добавь кнопку в инвентарь и при ее нажатии открывай свой, так думаю совместимость с модами не потеряется.
Это все прелестно. Но кто бы меня научил ВСЕ ЭТО делать.
 
1,990
18
105
Брр. Мне скоро на Forge делать подобное для одного заказа (конечно, это лишь малая часть заказа). Надо начать разбираться, на днях начну копать в эту сторону. Если сделаю - скину код и попытаюсь объяснить что да как, оставь свои контакты, скинь в ЛС скайпик.
 
771
5
Наследуешь обычное гуи, добавляешь кнопку и в GuiOpenEvent заменяешь стандартное на свое.
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
f1rSt1k написал(а):
Наследуешь обычное гуи, добавляешь кнопку и в GuiOpenEvent заменяешь стандартное на свое.
Кто-то, кажется, только что говорил про совместимость. Совместимость - это если два мода в одним и тем же кодом, что ты используешь, отлично работают друг с другом(ну коорды кнопки другие, неважно). А теперь симулируй в мозгу работу 2 модов с твоим кодом и пойми, почему тут ты не прав.
[merge_posts_bbcode]Добавлено: 04.04.2014 19:24:46[/merge_posts_bbcode]

Просто существуют RenderTickEvent и MouseEvent, второй даже на 1.6
 
771
5
anti344 написал(а):
f1rSt1k написал(а):
Наследуешь обычное гуи, добавляешь кнопку и в GuiOpenEvent заменяешь стандартное на свое.
Кто-то, кажется, только что говорил про совместимость. Совместимость - это если два мода в одним и тем же кодом, что ты используешь, отлично работают друг с другом(ну коорды кнопки другие, неважно). А теперь симулируй в мозгу работу 2 модов с твоим кодом и пойми, почему тут ты не прав.
[merge_posts_bbcode]Добавлено: 04.04.2014 19:24:46[/merge_posts_bbcode]

Просто существуют RenderTickEvent и MouseEvent, второй даже на 1.6
А зачем тут эти ивенты?
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
А вот не догадаться было кощунством, ну ты совсем.
Отрисовывать кнопку и ловить нажатия на неё.

P. S. Если забыл, к чему там нужна кнопка, чтобы открыть своё доп-гуи.
 
Все бы хорошо, но я как новичок в моддинге - не имею представления, как записать все это вообще.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху