Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Bars

Старожил
Девелопер
Пользователь
Баллы
173
Туториал
Мой кастомный зомби:
Java:
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 не так?

Регистратор кастомных существ: мало ли пригодится
 
Вместо extends EntityZombie? И точно работать будет?
У меня работает.
Тут по сути получается что мы создаем совершенно новый тип ентити, а потом при регистрации просто задаем ему "скин" из мобов которые знает и сервер и клиент.
Но скажем так.
Там где у меня EntityMonster я могу подставить EntityZombie и изменится.. Ничего :D
 
Нет такого класса
Аа, точно, EntityMob. Забыл посмотреть в маппингах)
17.02.2015 19:03:48 [SEVERE] Could not pass event CreatureSpawnEvent to OnlyMZ v1.0
17.02.2015 19:03:48 org.bukkit.event.EventException
17.02.2015 19:03:48 at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:338) ~[JavaPluginLoader$1.class:git-Cauldron-MCPC-Plus-1.7.10-1.1231.04.209]
17.02.2015 19:03:48 at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[RegisteredListener.class:git-Cauldron-MCPC-Plus-1.7.10-1.1231.04.209]
17.02.2015 19:03:48 at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:507) [SimplePluginManager.class:git-Cauldron-MCPC-Plus-1.7.10-1.1231.04.209]
17.02.2015 19:03:48 at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:492) [SimplePluginManager.class:git-Cauldron-MCPC-Plus-1.7.10-1.1231.04.209]
17.02.2015 19:03:48 at org.bukkit.craftbukkit.v1_7_R4.event.CraftEventFactory.callCreatureSpawnEvent(CraftEventFactory.java:272) [CraftEventFactory.class:git-Cauldron-MCPC-Plus-1.7.10-1.1231.04.209]
17.02.2015 19:03:48 at net.minecraft.world.World.addEntity(World.java:1734) [ahb.class:?]
17.02.2015 19:03:48 at net.minecraft.item.ItemMonsterPlacer.func_77840_a(ItemMonsterPlacer.java:171) [aee.class:?]
17.02.2015 19:03:48 at net.minecraft.item.ItemMonsterPlacer.func_77648_a(ItemMonsterPlacer.java:75) [aee.class:?]
17.02.2015 19:03:48 at net.minecraftforge.common.ForgeHooks.onPlaceItemIntoWorld(ForgeHooks.java:483) [ForgeHooks.class:git-Cauldron-MCPC-Plus-1.7.10-1.1231.04.209]
17.02.2015 19:03:48 at net.minecraft.item.ItemStack.func_77943_a(ItemStack.java:149) [add.class:?]
17.02.2015 19:03:48 at net.minecraft.server.management.ItemInWorldManager.func_73078_a(ItemInWorldManager.java:489) [mx.class:?]
17.02.2015 19:03:48 at net.minecraft.network.NetHandlerPlayServer.func_147346_a(NetHandlerPlayServer.java:875) [nh.class:?]
17.02.2015 19:03:48 at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.func_148833_a(SourceFile:60) [jo.class:?]
17.02.2015 19:03:48 at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.func_148833_a(SourceFile:9) [jo.class:?]
17.02.2015 19:03:48 at net.minecraft.network.NetworkManager.func_74428_b(NetworkManager.java:244) [ej.class:?]
17.02.2015 19:03:48 at net.minecraft.network.NetworkSystem.func_151269_c(NetworkSystem.java:173) [nc.class:?]
17.02.2015 19:03:48 at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:980) [MinecraftServer.class:?]
17.02.2015 19:03:48 at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:423) [lt.class:?]
17.02.2015 19:03:48 at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:798) [MinecraftServer.class:?]
17.02.2015 19:03:48 at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:658) [MinecraftServer.class:?]
17.02.2015 19:03:48 at java.lang.Thread.run(Unknown Source) [?:1.7.0_71]
17.02.2015 19:03:48 Caused by: java.lang.ClassCastException: org.bukkit.craftbukkit.v1_7_R4.entity.CraftMonster cannot be cast to org.bukkit.entity.Zombie
17.02.2015 19:03:48 at ru.onlymc.OnlyMZ.listener.EntityListener.onCreatureSpawn(EntityListener.java:85) ~[?:?] // Zombie z = (Zombie) e.getEntity();
17.02.2015 19:03:48 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_71]
17.02.2015 19:03:48 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_71]
17.02.2015 19:03:48 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_71]
17.02.2015 19:03:48 at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_71]
17.02.2015 19:03:48 at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:334) ~[JavaPluginLoader$1.class:git-Cauldron-MCPC-Plus-1.7.10-1.1231.04.209]
17.02.2015 19:03:48 ... 20 more
17.02.2015 19:03:57 [WARNING] Ignoring unknown attribute 'zombie.spawnReinforcements'
17.02.2015 19:03:59 [WARNING] Ignoring unknown attribute 'zombie.spawnReinforcements'

При этом у зомби скорость осталась стандартной и он не издавал своих звуков. При наследовании EntityZombie такого нет
 
@ql_Nik_lp, даже если я их укажу, ошибка в посте #5 не исчезнет. Он не издавал звуки не потому что я их не указал, а потому что произошёл сбой (хотя я первый вариант не отрицаю)
 
@Bars
Caused by: java.lang.ClassCastException: org.bukkit.craftbukkit.v1_7_R4.entity.CraftMonster cannot be cast to org.bukkit.entity.Zombie ?
 

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

Назад
Верх