Custom Zombies Are Slimes?

Discussion in 'Plugin Development' started by CookCreeperz, May 19, 2013.

Thread Status:
Not open for further replies.
  1. Offline

    CookCreeperz

    Title says it all, why are my custom zombies slimes? LOL.
     
  2. Offline

    GodzOfMadness

    CookCreeperz Since i'm psychic, I think their slimes because I commanded them to be.
     
  3. We could help you if you provided some code...It's like saying 4 and then expecting us to say 2 + 2..
     
  4. Offline

    Jogy34

    If you created a custom zombie by creating a class that extends EntityZombie you probably added them into the game with the wrong network id. The correct one for zombies is 54.
     
  5. Offline

    CookCreeperz

    Code:
    package me.Jordan.Minez.ZombieFiles;
     
    import net.minecraft.server.v1_5_R3.EntityHuman;
    import net.minecraft.server.v1_5_R3.EntityVillager;
    import net.minecraft.server.v1_5_R3.Item;
    import net.minecraft.server.v1_5_R3.ItemStack;
    import net.minecraft.server.v1_5_R3.PathfinderGoalBreakDoor;
    import net.minecraft.server.v1_5_R3.PathfinderGoalFloat;
    import net.minecraft.server.v1_5_R3.PathfinderGoalHurtByTarget;
    import net.minecraft.server.v1_5_R3.PathfinderGoalLookAtPlayer;
    import net.minecraft.server.v1_5_R3.PathfinderGoalMeleeAttack;
    import net.minecraft.server.v1_5_R3.PathfinderGoalMoveThroughVillage;
    import net.minecraft.server.v1_5_R3.PathfinderGoalMoveTowardsRestriction;
    import net.minecraft.server.v1_5_R3.PathfinderGoalNearestAttackableTarget;
    import net.minecraft.server.v1_5_R3.PathfinderGoalRandomLookaround;
    import net.minecraft.server.v1_5_R3.PathfinderGoalRandomStroll;
    import net.minecraft.server.v1_5_R3.PathfinderGoalSelector;
    import net.minecraft.server.v1_5_R3.World;
    import java.lang.reflect.Field;
     
    public class FasterZombie extends net.minecraft.server.v1_5_R3.EntityZombie {
        float walkSpeed;
     
        @SuppressWarnings("rawtypes")
        public FasterZombie(World world) {
            super(world);
            this.walkSpeed = 0.23F;
            this.setHealth(12);
            try {
                Field gsa = PathfinderGoalSelector.class.getDeclaredField("a");
                gsa.setAccessible(true);
                gsa.set(this.goalSelector,
                        new org.bukkit.craftbukkit.v1_5_R3.util.UnsafeList());
                gsa.set(this.targetSelector,
                        new org.bukkit.craftbukkit.v1_5_R3.util.UnsafeList());
            } catch (Exception e) {
                System.err.println(e.getMessage());
            }
     
            this.goalSelector.a(0, new PathfinderGoalFloat(this));
            this.goalSelector.a(1, new PathfinderGoalBreakDoor(this));
            this.goalSelector.a(2, new PathfinderGoalMeleeAttack(this,
                    EntityHuman.class, 0.5F, false));
            this.goalSelector.a(3, new PathfinderGoalMeleeAttack(this,
                    EntityVillager.class, this.walkSpeed, true));
            this.goalSelector.a(5, new PathfinderGoalMoveTowardsRestriction(this,
                    this.walkSpeed));
            this.goalSelector.a(5, new PathfinderGoalMoveThroughVillage(this,
                    this.walkSpeed, false));
            this.goalSelector.a(6, new PathfinderGoalRandomStroll(this,
                    this.walkSpeed));
            this.goalSelector.a(7, new PathfinderGoalLookAtPlayer(this,
                    EntityHuman.class, 8.0F));
            this.goalSelector.a(7, new PathfinderGoalRandomLookaround(this));
            this.targetSelector.a(1, new PathfinderGoalHurtByTarget(this, false));
            this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget(
                    this, EntityHuman.class, 32.0F, 0, true));
            this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget(
                    this, EntityVillager.class, 16.0F, 0, false));
        }
     
        protected int getLootId() {
            return Item.ROTTEN_FLESH.id;
        }
     
        protected ItemStack l(int i) {
            switch (this.random.nextInt(5)) {
            case 0:
                return new ItemStack(Item.ROTTEN_FLESH.id, 1, 0);
            case 1:
                return new ItemStack(Item.GOLD_NUGGET.id, 1, 0);
            case 2:
                return new ItemStack(Item.PAPER.id, 1, 0);
            case 3:
                return new ItemStack(Item.IRON_SPADE.id, 1, 0);
            default:
                return null;
            }
     
        }
    }
    
    Code:
    package me.Jordan.Minez.ZombieFiles;
     
    import me.Jordan.Minez.Minez;
     
    import org.bukkit.entity.Entity;
    import org.bukkit.entity.EntityType;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.EventPriority;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.CreatureSpawnEvent;
    import org.bukkit.event.entity.EntityCombustByBlockEvent;
    import org.bukkit.event.entity.EntityCombustByEntityEvent;
    import org.bukkit.event.entity.EntityCombustEvent;
     
    public class ZombieListener implements Listener {
     
        Minez plugin;
     
        public ZombieListener(Minez plugin) {
            this.plugin = plugin;
            plugin.getServer().getPluginManager().registerEvents(this, plugin);
        }
     
        @EventHandler(priority = EventPriority.HIGHEST)
        public void spawnZombie(CreatureSpawnEvent event) {
            ZombieSpawnUtility utility = new ZombieSpawnUtility();
            Entity entity = event.getEntity();
            net.minecraft.server.v1_5_R3.Entity mcEntity = (((org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity) entity).getHandle());
            if (mcEntity instanceof FasterZombie) {
                event.setCancelled(false);
            } else if (entity.getType() == EntityType.ZOMBIE && ZombieSingleton.isAuthorized(entity.getLocation())) {
                ZombieSingleton.addEntityToWorld(event);
                event.setCancelled(true);
            } else {
                utility.spawnZombies(event.getEntity());
                event.setCancelled(true);
            }
        }
       
        @EventHandler(priority = EventPriority.HIGH)
        public void cancelZombieFire(EntityCombustEvent event) {
            EntityType et = event.getEntityType();
            event.setCancelled(et == EntityType.ZOMBIE);
        }
     
        @EventHandler(priority = EventPriority.HIGHEST)
        public void allowZombieFireByPlayer(EntityCombustByEntityEvent event) {
            event.setCancelled(false);
        }
     
        @EventHandler(priority = EventPriority.HIGHEST)
        public void allowZombieFireByBlock(EntityCombustByBlockEvent event) {
            event.setCancelled(false);
        }
    }
     
     
    

    Code:
    package me.Jordan.Minez.ZombieFiles;
     
    import org.bukkit.Location;
    import org.bukkit.World;
    import org.bukkit.entity.Entity;
    import org.bukkit.entity.EntityType;
    import org.bukkit.entity.LivingEntity;
     
    import java.util.ArrayList;
    import java.util.List;
     
    public class ZombieSpawnUtility {
     
        public boolean canSpawnZombies(Entity entity) {
            List<Entity> nearbyZombies = removeNonZombies(entity.getNearbyEntities(
                    20, 20, 20));
            return (nearbyZombies.size() < 5);
        }
     
        public boolean spawnZombies(LivingEntity entity) {
            if (entity.getType() != EntityType.ZOMBIE) {
                return true;
            } else if (!canSpawnZombies(entity)) {
                return true;
            }
     
            int zombiesToSpawn = howManyZombiesToSpawn();
            World world = entity.getWorld();
            Location location = entity.getLocation();
            for (int i = 0; i < zombiesToSpawn; i++) {
                Location vector = new Location(world, Math.random() * 3,
                        Math.random() * 3, Math.random() * 3);
                Location authorized = new Location(world, location.getX()
                        + vector.getX(), location.getY() + vector.getY(),
                        location.getZ() + vector.getZ());
                ZombieSingleton.authorize(authorized);
                world.spawnEntity(authorized, EntityType.ZOMBIE);
                world.spawnEntity(authorized, EntityType.ZOMBIE);
            }
            return true;
        }
     
        private int howManyZombiesToSpawn() {
            // only a 5% chance of spawning a horde, and the horde max size is 8;
            double chance = Math.random();
            return (chance < 0.05d) ? (int) (Math.random() * 1) : 1;
        }
     
        private List<Entity> removeNonZombies(List<Entity> nearbyEntities) {
            List<Entity> onlyZombies = new ArrayList<Entity>();
            for (Entity entity : nearbyEntities) {
                if (entity.getType() == EntityType.ZOMBIE) {
                    onlyZombies.add(entity);
                }
            }
            return onlyZombies;
        }
    }
    
    Fixed thanks.

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 1, 2016
Thread Status:
Not open for further replies.

Share This Page