1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Итак, кастомные зомби [NMS типа]

Тема в разделе "Разработка плагинов для новичков", создана пользователем Bars, 17 фев 2015.

  1. Автор темы
    Bars

    Bars Старожил Девелопер Пользователь

    Баллы:
    173
    Туториал
    Мой кастомный зомби:
    Код:
    package ru.onlymc.OnlyMZ;
    
    //import java.lang.reflect.Field;
    
    //import org.bukkit.craftbukkit.v1_7_R4.util.UnsafeList;
    
    //import net.minecraft.entity.player.EntityPlayer;//import net.minecraft.server.v1_7_R4.EntityHuman;
    import net.minecraft.entity.monster.EntityZombie;//import net.minecraft.server.v1_7_R4.EntityZombie;
    import net.minecraft.entity.EntityLiving;
    import net.minecraft.entity.EntityLivingBase;
    import net.minecraft.entity.SharedMonsterAttributes;//import net.minecraft.server.v1_7_R4.GenericAttributes;
    //import net.minecraft.entity.ai.EntityAISwimming;//import net.minecraft.server.v1_7_R4.PathfinderGoalFloat;
    //import net.minecraft.entity.ai.EntityAIHurtByTarget;//import net.minecraft.server.v1_7_R4.PathfinderGoalHurtByTarget;
    //import net.minecraft.entity.ai.EntityAIWatchClosest;//import net.minecraft.server.v1_7_R4.PathfinderGoalLookAtPlayer;
    //import net.minecraft.entity.ai.EntityAIAttackOnCollide;//import net.minecraft.server.v1_7_R4.PathfinderGoalMeleeAttack;
    //import net.minecraft.entity.ai.EntityAIMoveThroughVillage;//import net.minecraft.server.v1_7_R4.PathfinderGoalMoveThroughVillage;
    //import net.minecraft.entity.ai.EntityAIMoveTowardsRestriction;//import net.minecraft.server.v1_7_R4.PathfinderGoalMoveTowardsRestriction;
    //import net.minecraft.entity.ai.EntityAINearestAttackableTarget;//import net.minecraft.server.v1_7_R4.PathfinderGoalNearestAttackableTarget;
    //import net.minecraft.entity.ai.EntityAILookIdle;//import net.minecraft.server.v1_7_R4.PathfinderGoalRandomLookaround;
    //import net.minecraft.entity.ai.EntityAIWander;//import net.minecraft.server.v1_7_R4.PathfinderGoalRandomStroll;
    //import net.minecraft.entity.ai.EntityAITasks;//import net.minecraft.server.v1_7_R4.PathfinderGoalSelector;
    import net.minecraft.world.World;//import net.minecraft.server.v1_7_R4.World;
    
    public class CustomEntityZombie extends EntityZombie {
        public CustomEntityZombie(World world) {
            super(world);
    
            ((EntityLiving)this).getNavigator().setBreakDoors(false);
            ((EntityLiving)this).getNavigator().setAvoidSun(false);
            ((EntityLiving)this).getNavigator().setCanSwim(true);
            /*try {
                Field bField = EntityAITasks.class.getDeclaredField("b");
                bField.setAccessible(true);
                Field cField = EntityAITasks.class.getDeclaredField("c");
                cField.setAccessible(true);
                bField.set(((EntityLiving)this).tasks, new UnsafeList<EntityAITasks>());//goalSelector - tasks
                bField.set(((EntityLiving)this).targetTasks, new UnsafeList<EntityAITasks>());//targetSelector - targetTasks
                cField.set(((EntityLiving)this).tasks, new UnsafeList<EntityAITasks>());//goalSelector - tasks
                cField.set(((EntityLiving)this).targetTasks, new UnsafeList<EntityAITasks>());//targetSelector - targetTasks
                } catch (Exception exc) {
                exc.printStackTrace();
            }*/
    
            //a - addTask
            /*((EntityLiving)this).tasks.addTask(0, new EntityAISwimming(this));
            ((EntityLiving)this).tasks.addTask(2, new EntityAIAttackOnCollide(this, EntityPlayer.class, 1.0D, false));
            //((EntityLiving)this).tasks.addTask(4, new EntityAIAttackOnCollide(this, EntityVillager.class, 1.0D, true));
            ((EntityLiving)this).tasks.addTask(5, new EntityAIMoveTowardsRestriction(this, 1.0D));
            ((EntityLiving)this).tasks.addTask(6, new EntityAIMoveThroughVillage(this, 1.0D, false));
            ((EntityLiving)this).tasks.addTask(7, new EntityAIWander(this, 1.0D));
            ((EntityLiving)this).tasks.addTask(8, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F));
            ((EntityLiving)this).tasks.addTask(8, new EntityAILookIdle(this));
            ((EntityLiving)this).tasks.addTask(1, new EntityAIHurtByTarget(this, true));
            ((EntityLiving)this).tasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, 0, true));
            //((EntityLiving)this).tasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityVillager.class, 0, false));*/
        }
    
        protected void aD() {
            super.applyEntityAttributes();
            ((EntityLivingBase)this).getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(40.0D);
            ((EntityLivingBase)this).getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.39D);// d - movementSpeed, 0.2300000041723251D
            ((EntityLivingBase)this).getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(3.0D);
        }
    }
    Если раскомментировать goal/target selectors (Entity AI tasks), то зомби не атакуют игроков.
    А в таком виде как сейчас они атакуют игроков, но GenericAttributes (Shared monster attributes) работают только на зомби, которые заспавнены яйцом спавна. Что the fuck не так?

    Регистратор кастомных существ: мало ли пригодится
     
  2. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Наследуй EntityMonster.
     
  3. Автор темы
    Bars

    Bars Старожил Девелопер Пользователь

    Баллы:
    173
    Вместо extends EntityZombie? И точно работать будет?
     
  4. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    У меня работает.
    Тут по сути получается что мы создаем совершенно новый тип ентити, а потом при регистрации просто задаем ему "скин" из мобов которые знает и сервер и клиент.
    Но скажем так.
    Там где у меня EntityMonster я могу подставить EntityZombie и изменится.. Ничего :D
     
  5. Автор темы
    Bars

    Bars Старожил Девелопер Пользователь

    Баллы:
    173
    Нет такого класса
    Аа, точно, EntityMob. Забыл посмотреть в маппингах)

    При этом у зомби скорость осталась стандартной и он не издавал своих звуков. При наследовании EntityZombie такого нет
     
  6. BeYkeR

    BeYkeR Старожил Девелопер Пользователь

    Баллы:
    173
    Их надо указывать.
     
  7. Автор темы
    Bars

    Bars Старожил Девелопер Пользователь

    Баллы:
    173
    Кого их?
     
  8. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
     
  9. Автор темы
    Bars

    Bars Старожил Девелопер Пользователь

    Баллы:
    173
    @ql_Nik_lp, даже если я их укажу, ошибка в посте #5 не исчезнет. Он не издавал звуки не потому что я их не указал, а потому что произошёл сбой (хотя я первый вариант не отрицаю)
     
  10. BeYkeR

    BeYkeR Старожил Девелопер Пользователь

    Баллы:
    173
    @Bars
    Caused by: java.lang.ClassCastException: org.bukkit.craftbukkit.v1_7_R4.entity.CraftMonster cannot be cast to org.bukkit.entity.Zombie ?
     
  11. Автор темы
    Bars

    Bars Старожил Девелопер Пользователь

    Баллы:
    173
    Да, там где я инициализирую зомби, там зелёным написал строку
     
  12. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Разобрался?
     
  13. Автор темы
    Bars

    Bars Старожил Девелопер Пользователь

    Баллы:
    173
    Нет, придётся изменять в самом сервере. Кстати, я скомпилировал Калдрон, но там нет minecraft_server.1.7.10.jar, не подскажешь что сделать?
     
  14. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Не общался с ним :<
    Но судя по кол-ву проблем - так себе ядро.
    Насколько я помню разраб сам с этим согласен
     

Поделиться этой страницей