Search in sources :

Example 6 with HangingEntity

use of net.minecraft.entity.item.HangingEntity in project LoliServer by Loli-Server.

the class CraftWorld method createEntity.

@SuppressWarnings("unchecked")
public net.minecraft.entity.Entity createEntity(Location location, Class<? extends Entity> clazz) throws IllegalArgumentException {
    if (location == null || clazz == null) {
        throw new IllegalArgumentException("Location or entity class cannot be null");
    }
    net.minecraft.entity.Entity entity = null;
    double x = location.getX();
    double y = location.getY();
    double z = location.getZ();
    float pitch = location.getPitch();
    float yaw = location.getYaw();
    // order is important for some of these
    if (Boat.class.isAssignableFrom(clazz)) {
        entity = new BoatEntity(world, x, y, z);
        entity.moveTo(x, y, z, yaw, pitch);
    } else if (FallingBlock.class.isAssignableFrom(clazz)) {
        entity = new FallingBlockEntity(world, x, y, z, world.getBlockState(new BlockPos(x, y, z)));
    } else if (Projectile.class.isAssignableFrom(clazz)) {
        if (Snowball.class.isAssignableFrom(clazz)) {
            entity = new SnowballEntity(world, x, y, z);
        } else if (Egg.class.isAssignableFrom(clazz)) {
            entity = new EggEntity(world, x, y, z);
        } else if (AbstractArrow.class.isAssignableFrom(clazz)) {
            if (TippedArrow.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.ARROW.create(world);
                ((ArrowEntity) entity).setType(CraftPotionUtil.fromBukkit(new PotionData(PotionType.WATER, false, false)));
            } else if (SpectralArrow.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.SPECTRAL_ARROW.create(world);
            } else if (Trident.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.TRIDENT.create(world);
            } else {
                entity = net.minecraft.entity.EntityType.ARROW.create(world);
            }
            entity.moveTo(x, y, z, 0, 0);
        } else if (ThrownExpBottle.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.EXPERIENCE_BOTTLE.create(world);
            entity.moveTo(x, y, z, 0, 0);
        } else if (EnderPearl.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.ENDER_PEARL.create(world);
            entity.moveTo(x, y, z, 0, 0);
        } else if (ThrownPotion.class.isAssignableFrom(clazz)) {
            if (LingeringPotion.class.isAssignableFrom(clazz)) {
                entity = new PotionEntity(world, x, y, z);
                ((PotionEntity) entity).setItem(CraftItemStack.asNMSCopy(new ItemStack(org.bukkit.Material.LINGERING_POTION, 1)));
            } else {
                entity = new PotionEntity(world, x, y, z);
                ((PotionEntity) entity).setItem(CraftItemStack.asNMSCopy(new ItemStack(org.bukkit.Material.SPLASH_POTION, 1)));
            }
        } else if (Fireball.class.isAssignableFrom(clazz)) {
            if (SmallFireball.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.SMALL_FIREBALL.create(world);
            } else if (WitherSkull.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.WITHER_SKULL.create(world);
            } else if (DragonFireball.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.DRAGON_FIREBALL.create(world);
            } else {
                entity = net.minecraft.entity.EntityType.FIREBALL.create(world);
            }
            entity.moveTo(x, y, z, yaw, pitch);
            Vector direction = location.getDirection().multiply(10);
            ((DamagingProjectileEntity) entity).setDirection(direction.getX(), direction.getY(), direction.getZ());
        } else if (ShulkerBullet.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.SHULKER_BULLET.create(world);
            entity.moveTo(x, y, z, yaw, pitch);
        } else if (LlamaSpit.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.LLAMA_SPIT.create(world);
            entity.moveTo(x, y, z, yaw, pitch);
        } else if (Firework.class.isAssignableFrom(clazz)) {
            entity = new FireworkRocketEntity(world, x, y, z, net.minecraft.item.ItemStack.EMPTY);
        }
    } else if (Minecart.class.isAssignableFrom(clazz)) {
        if (PoweredMinecart.class.isAssignableFrom(clazz)) {
            entity = new FurnaceMinecartEntity(world, x, y, z);
        } else if (StorageMinecart.class.isAssignableFrom(clazz)) {
            entity = new ChestMinecartEntity(world, x, y, z);
        } else if (ExplosiveMinecart.class.isAssignableFrom(clazz)) {
            entity = new TNTMinecartEntity(world, x, y, z);
        } else if (HopperMinecart.class.isAssignableFrom(clazz)) {
            entity = new HopperMinecartEntity(world, x, y, z);
        } else if (SpawnerMinecart.class.isAssignableFrom(clazz)) {
            entity = new SpawnerMinecartEntity(world, x, y, z);
        } else if (CommandMinecart.class.isAssignableFrom(clazz)) {
            entity = new MinecartEntity(world, x, y, z);
        } else {
            // Default to rideable minecart for pre-rideable compatibility
            entity = new MinecartEntity(world, x, y, z);
        }
    } else if (EnderSignal.class.isAssignableFrom(clazz)) {
        entity = new EyeOfEnderEntity(world, x, y, z);
    } else if (EnderCrystal.class.isAssignableFrom(clazz)) {
        entity = net.minecraft.entity.EntityType.END_CRYSTAL.create(world);
        entity.moveTo(x, y, z, 0, 0);
    } else if (LivingEntity.class.isAssignableFrom(clazz)) {
        if (Chicken.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.CHICKEN.create(world);
        } else if (Cow.class.isAssignableFrom(clazz)) {
            if (MushroomCow.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.MOOSHROOM.create(world);
            } else {
                entity = net.minecraft.entity.EntityType.COW.create(world);
            }
        } else if (Golem.class.isAssignableFrom(clazz)) {
            if (Snowman.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.SNOW_GOLEM.create(world);
            } else if (IronGolem.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.IRON_GOLEM.create(world);
            } else if (Shulker.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.SHULKER.create(world);
            }
        } else if (Creeper.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.CREEPER.create(world);
        } else if (Ghast.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.GHAST.create(world);
        } else if (Pig.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.PIG.create(world);
        } else if (Player.class.isAssignableFrom(clazz)) {
        // need a net server handler for this one
        } else if (Sheep.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.SHEEP.create(world);
        } else if (AbstractHorse.class.isAssignableFrom(clazz)) {
            if (ChestedHorse.class.isAssignableFrom(clazz)) {
                if (Donkey.class.isAssignableFrom(clazz)) {
                    entity = net.minecraft.entity.EntityType.DONKEY.create(world);
                } else if (Mule.class.isAssignableFrom(clazz)) {
                    entity = net.minecraft.entity.EntityType.MULE.create(world);
                } else if (Llama.class.isAssignableFrom(clazz)) {
                    if (TraderLlama.class.isAssignableFrom(clazz)) {
                        entity = net.minecraft.entity.EntityType.TRADER_LLAMA.create(world);
                    } else {
                        entity = net.minecraft.entity.EntityType.LLAMA.create(world);
                    }
                }
            } else if (SkeletonHorse.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.SKELETON_HORSE.create(world);
            } else if (ZombieHorse.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.ZOMBIE_HORSE.create(world);
            } else {
                entity = net.minecraft.entity.EntityType.HORSE.create(world);
            }
        } else if (Skeleton.class.isAssignableFrom(clazz)) {
            if (Stray.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.STRAY.create(world);
            } else if (WitherSkeleton.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.WITHER_SKELETON.create(world);
            } else {
                entity = net.minecraft.entity.EntityType.SKELETON.create(world);
            }
        } else if (Slime.class.isAssignableFrom(clazz)) {
            if (MagmaCube.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.MAGMA_CUBE.create(world);
            } else {
                entity = net.minecraft.entity.EntityType.SLIME.create(world);
            }
        } else if (Spider.class.isAssignableFrom(clazz)) {
            if (CaveSpider.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.CAVE_SPIDER.create(world);
            } else {
                entity = net.minecraft.entity.EntityType.SPIDER.create(world);
            }
        } else if (Squid.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.SQUID.create(world);
        } else if (Tameable.class.isAssignableFrom(clazz)) {
            if (Wolf.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.WOLF.create(world);
            } else if (Parrot.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.PARROT.create(world);
            } else if (Cat.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.CAT.create(world);
            }
        } else if (PigZombie.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.ZOMBIFIED_PIGLIN.create(world);
        } else if (Zombie.class.isAssignableFrom(clazz)) {
            if (Husk.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.HUSK.create(world);
            } else if (ZombieVillager.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.ZOMBIE_VILLAGER.create(world);
            } else if (Drowned.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.DROWNED.create(world);
            } else {
                entity = new ZombieEntity(world);
            }
        } else if (Giant.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.GIANT.create(world);
        } else if (Silverfish.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.SILVERFISH.create(world);
        } else if (Enderman.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.ENDERMAN.create(world);
        } else if (Blaze.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.BLAZE.create(world);
        } else if (AbstractVillager.class.isAssignableFrom(clazz)) {
            if (Villager.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.VILLAGER.create(world);
            } else if (WanderingTrader.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.WANDERING_TRADER.create(world);
            }
        } else if (Witch.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.WITCH.create(world);
        } else if (Wither.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.WITHER.create(world);
        } else if (ComplexLivingEntity.class.isAssignableFrom(clazz)) {
            if (EnderDragon.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.ENDER_DRAGON.create(world);
            }
        } else if (Ambient.class.isAssignableFrom(clazz)) {
            if (Bat.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.BAT.create(world);
            }
        } else if (Rabbit.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.RABBIT.create(world);
        } else if (Endermite.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.ENDERMITE.create(world);
        } else if (Guardian.class.isAssignableFrom(clazz)) {
            if (ElderGuardian.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.ELDER_GUARDIAN.create(world);
            } else {
                entity = net.minecraft.entity.EntityType.GUARDIAN.create(world);
            }
        } else if (ArmorStand.class.isAssignableFrom(clazz)) {
            entity = new ArmorStandEntity(world, x, y, z);
        } else if (PolarBear.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.POLAR_BEAR.create(world);
        } else if (Vex.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.VEX.create(world);
        } else if (Illager.class.isAssignableFrom(clazz)) {
            if (Spellcaster.class.isAssignableFrom(clazz)) {
                if (Evoker.class.isAssignableFrom(clazz)) {
                    entity = net.minecraft.entity.EntityType.EVOKER.create(world);
                } else if (Illusioner.class.isAssignableFrom(clazz)) {
                    entity = net.minecraft.entity.EntityType.ILLUSIONER.create(world);
                }
            } else if (Vindicator.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.VINDICATOR.create(world);
            } else if (Pillager.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.PILLAGER.create(world);
            }
        } else if (Turtle.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.TURTLE.create(world);
        } else if (Phantom.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.PHANTOM.create(world);
        } else if (Fish.class.isAssignableFrom(clazz)) {
            if (Cod.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.COD.create(world);
            } else if (PufferFish.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.PUFFERFISH.create(world);
            } else if (Salmon.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.SALMON.create(world);
            } else if (TropicalFish.class.isAssignableFrom(clazz)) {
                entity = net.minecraft.entity.EntityType.TROPICAL_FISH.create(world);
            }
        } else if (Dolphin.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.DOLPHIN.create(world);
        } else if (Ocelot.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.OCELOT.create(world);
        } else if (Ravager.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.RAVAGER.create(world);
        } else if (Panda.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.PANDA.create(world);
        } else if (Fox.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.FOX.create(world);
        } else if (Bee.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.BEE.create(world);
        } else if (Hoglin.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.HOGLIN.create(world);
        } else if (Piglin.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.PIGLIN.create(world);
        } else if (PiglinBrute.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.PIGLIN_BRUTE.create(world);
        } else if (Strider.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.STRIDER.create(world);
        } else if (Zoglin.class.isAssignableFrom(clazz)) {
            entity = net.minecraft.entity.EntityType.ZOGLIN.create(world);
        }
        if (entity != null) {
            entity.absMoveTo(x, y, z, yaw, pitch);
            // SPIGOT-3587
            entity.setYHeadRot(yaw);
        }
    } else if (Hanging.class.isAssignableFrom(clazz)) {
        BlockFace face = BlockFace.SELF;
        // 1 full block, also painting smallest size.
        int width = 16;
        // 1 full block, also painting smallest size.
        int height = 16;
        if (ItemFrame.class.isAssignableFrom(clazz)) {
            width = 12;
            height = 12;
        } else if (LeashHitch.class.isAssignableFrom(clazz)) {
            width = 9;
            height = 9;
        }
        // Paper start - In addition to d65a2576e40e58c8e446b330febe6799d13a604f do not check UP/DOWN for non item frames
        // BlockFace[] faces = new BlockFace[]{BlockFace.EAST, BlockFace.NORTH, BlockFace.WEST, BlockFace.SOUTH, BlockFace.UP, BlockFace.DOWN};
        BlockFace[] faces = (ItemFrame.class.isAssignableFrom(clazz)) ? new BlockFace[] { BlockFace.EAST, BlockFace.NORTH, BlockFace.WEST, BlockFace.SOUTH, BlockFace.UP, BlockFace.DOWN } : new BlockFace[] { BlockFace.EAST, BlockFace.NORTH, BlockFace.WEST, BlockFace.SOUTH };
        // Paper end
        final BlockPos pos = new BlockPos(x, y, z);
        for (BlockFace dir : faces) {
            net.minecraft.block.BlockState nmsBlock = world.getBlockState(pos.relative(CraftBlock.blockFaceToNotch(dir)));
            if (nmsBlock.getMaterial().isSolid() || RedstoneDiodeBlock.isDiode(nmsBlock)) {
                boolean taken = false;
                AxisAlignedBB bb = (ItemFrame.class.isAssignableFrom(clazz)) ? ItemFrameEntity.calculateBoundingBox(null, pos, CraftBlock.blockFaceToNotch(dir).getOpposite(), width, height) : HangingEntity.calculateBoundingBox(null, pos, CraftBlock.blockFaceToNotch(dir).getOpposite(), width, height);
                List<net.minecraft.entity.Entity> list = (List<net.minecraft.entity.Entity>) world.getEntities(null, bb);
                for (Iterator<net.minecraft.entity.Entity> it = list.iterator(); !taken && it.hasNext(); ) {
                    net.minecraft.entity.Entity e = it.next();
                    if (e instanceof HangingEntity) {
                        // Hanging entities do not like hanging entities which intersect them.
                        taken = true;
                    }
                }
                if (!taken) {
                    face = dir;
                    break;
                }
            }
        }
        if (LeashHitch.class.isAssignableFrom(clazz)) {
            entity = new LeashKnotEntity(world, new BlockPos(x, y, z));
            entity.forcedLoading = true;
        } else {
            // No valid face found
            Preconditions.checkArgument(face != BlockFace.SELF, "Cannot spawn hanging entity for %s at %s (no free face)", clazz.getName(), location);
            Direction dir = CraftBlock.blockFaceToNotch(face).getOpposite();
            if (Painting.class.isAssignableFrom(clazz)) {
                entity = new PaintingEntity(world, new BlockPos(x, y, z), dir);
            } else if (ItemFrame.class.isAssignableFrom(clazz)) {
                entity = new ItemFrameEntity(world, new BlockPos(x, y, z), dir);
            }
        }
        if (entity != null && !((HangingEntity) entity).survives()) {
            throw new IllegalArgumentException("Cannot spawn hanging entity for " + clazz.getName() + " at " + location);
        }
    } else if (TNTPrimed.class.isAssignableFrom(clazz)) {
        entity = new TNTEntity(world, x, y, z, null);
    } else if (ExperienceOrb.class.isAssignableFrom(clazz)) {
        entity = new ExperienceOrbEntity(world, x, y, z, 0);
    } else if (LightningStrike.class.isAssignableFrom(clazz)) {
        entity = net.minecraft.entity.EntityType.LIGHTNING_BOLT.create(world);
    } else if (AreaEffectCloud.class.isAssignableFrom(clazz)) {
        entity = new AreaEffectCloudEntity(world, x, y, z);
    } else if (EvokerFangs.class.isAssignableFrom(clazz)) {
        entity = new EvokerFangsEntity(world, x, y, z, (float) Math.toRadians(yaw), 0, null);
    }
    if (entity != null) {
        return entity;
    }
    throw new IllegalArgumentException("Cannot spawn an entity for " + clazz.getName());
}
Also used : SnowballEntity(net.minecraft.entity.projectile.SnowballEntity) Entity(org.bukkit.entity.Entity) DamagingProjectileEntity(net.minecraft.entity.projectile.DamagingProjectileEntity) ChestMinecartEntity(net.minecraft.entity.item.minecart.ChestMinecartEntity) MinecartEntity(net.minecraft.entity.item.minecart.MinecartEntity) AbstractArrowEntity(net.minecraft.entity.projectile.AbstractArrowEntity) LivingEntity(org.bukkit.entity.LivingEntity) ExperienceOrbEntity(net.minecraft.entity.item.ExperienceOrbEntity) ItemFrameEntity(net.minecraft.entity.item.ItemFrameEntity) HangingEntity(net.minecraft.entity.item.HangingEntity) AreaEffectCloudEntity(net.minecraft.entity.AreaEffectCloudEntity) LeashKnotEntity(net.minecraft.entity.item.LeashKnotEntity) SpawnerMinecartEntity(net.minecraft.entity.item.minecart.SpawnerMinecartEntity) PaintingEntity(net.minecraft.entity.item.PaintingEntity) ArrowEntity(net.minecraft.entity.projectile.ArrowEntity) PotionEntity(net.minecraft.entity.projectile.PotionEntity) FallingBlockEntity(net.minecraft.entity.item.FallingBlockEntity) TNTMinecartEntity(net.minecraft.entity.item.minecart.TNTMinecartEntity) EvokerFangsEntity(net.minecraft.entity.projectile.EvokerFangsEntity) TNTEntity(net.minecraft.entity.item.TNTEntity) HopperMinecartEntity(net.minecraft.entity.item.minecart.HopperMinecartEntity) FurnaceMinecartEntity(net.minecraft.entity.item.minecart.FurnaceMinecartEntity) EyeOfEnderEntity(net.minecraft.entity.projectile.EyeOfEnderEntity) TileEntity(net.minecraft.tileentity.TileEntity) ZombieEntity(net.minecraft.entity.monster.ZombieEntity) ArmorStandEntity(net.minecraft.entity.item.ArmorStandEntity) CraftEntity(org.bukkit.craftbukkit.v1_16_R3.entity.CraftEntity) BoatEntity(net.minecraft.entity.item.BoatEntity) EggEntity(net.minecraft.entity.projectile.EggEntity) PlayerEntity(net.minecraft.entity.player.PlayerEntity) FireworkRocketEntity(net.minecraft.entity.projectile.FireworkRocketEntity) LightningBoltEntity(net.minecraft.entity.effect.LightningBoltEntity) ComplexLivingEntity(org.bukkit.entity.ComplexLivingEntity) MobEntity(net.minecraft.entity.MobEntity) HumanEntity(org.bukkit.entity.HumanEntity) ItemEntity(net.minecraft.entity.item.ItemEntity) TNTEntity(net.minecraft.entity.item.TNTEntity) Dolphin(org.bukkit.entity.Dolphin) BlockFace(org.bukkit.block.BlockFace) FireworkRocketEntity(net.minecraft.entity.projectile.FireworkRocketEntity) EnderDragon(org.bukkit.entity.EnderDragon) Phantom(org.bukkit.entity.Phantom) ThrownPotion(org.bukkit.entity.ThrownPotion) ElderGuardian(org.bukkit.entity.ElderGuardian) Guardian(org.bukkit.entity.Guardian) Pillager(org.bukkit.entity.Pillager) SnowballEntity(net.minecraft.entity.projectile.SnowballEntity) Vector(org.bukkit.util.Vector) BoatEntity(net.minecraft.entity.item.BoatEntity) MushroomCow(org.bukkit.entity.MushroomCow) ChestMinecartEntity(net.minecraft.entity.item.minecart.ChestMinecartEntity) MinecartEntity(net.minecraft.entity.item.minecart.MinecartEntity) SpawnerMinecartEntity(net.minecraft.entity.item.minecart.SpawnerMinecartEntity) TNTMinecartEntity(net.minecraft.entity.item.minecart.TNTMinecartEntity) HopperMinecartEntity(net.minecraft.entity.item.minecart.HopperMinecartEntity) FurnaceMinecartEntity(net.minecraft.entity.item.minecart.FurnaceMinecartEntity) ElderGuardian(org.bukkit.entity.ElderGuardian) LingeringPotion(org.bukkit.entity.LingeringPotion) Ravager(org.bukkit.entity.Ravager) ChestMinecartEntity(net.minecraft.entity.item.minecart.ChestMinecartEntity) PaintingEntity(net.minecraft.entity.item.PaintingEntity) ItemFrameEntity(net.minecraft.entity.item.ItemFrameEntity) CaveSpider(org.bukkit.entity.CaveSpider) Firework(org.bukkit.entity.Firework) AreaEffectCloudEntity(net.minecraft.entity.AreaEffectCloudEntity) ItemStack(org.bukkit.inventory.ItemStack) CraftItemStack(org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack) ExplosiveMinecart(org.bukkit.entity.minecart.ExplosiveMinecart) Rabbit(org.bukkit.entity.Rabbit) IronGolem(org.bukkit.entity.IronGolem) LeashKnotEntity(net.minecraft.entity.item.LeashKnotEntity) ShulkerBullet(org.bukkit.entity.ShulkerBullet) Illager(org.bukkit.entity.Illager) Direction(net.minecraft.util.Direction) TNTMinecartEntity(net.minecraft.entity.item.minecart.TNTMinecartEntity) PotionData(org.bukkit.potion.PotionData) TropicalFish(org.bukkit.entity.TropicalFish) DamagingProjectileEntity(net.minecraft.entity.projectile.DamagingProjectileEntity) Hoglin(org.bukkit.entity.Hoglin) Wolf(org.bukkit.entity.Wolf) Witch(org.bukkit.entity.Witch) HangingEntity(net.minecraft.entity.item.HangingEntity) Tameable(org.bukkit.entity.Tameable) Mule(org.bukkit.entity.Mule) Husk(org.bukkit.entity.Husk) MushroomCow(org.bukkit.entity.MushroomCow) Cow(org.bukkit.entity.Cow) ExperienceOrb(org.bukkit.entity.ExperienceOrb) AreaEffectCloud(org.bukkit.entity.AreaEffectCloud) Pig(org.bukkit.entity.Pig) Blaze(org.bukkit.entity.Blaze) WitherSkull(org.bukkit.entity.WitherSkull) Zoglin(org.bukkit.entity.Zoglin) ZombieEntity(net.minecraft.entity.monster.ZombieEntity) EggEntity(net.minecraft.entity.projectile.EggEntity) ExplosiveMinecart(org.bukkit.entity.minecart.ExplosiveMinecart) PoweredMinecart(org.bukkit.entity.minecart.PoweredMinecart) CommandMinecart(org.bukkit.entity.minecart.CommandMinecart) SpawnerMinecart(org.bukkit.entity.minecart.SpawnerMinecart) StorageMinecart(org.bukkit.entity.minecart.StorageMinecart) HopperMinecart(org.bukkit.entity.minecart.HopperMinecart) Minecart(org.bukkit.entity.Minecart) SpectralArrow(org.bukkit.entity.SpectralArrow) ItemFrame(org.bukkit.entity.ItemFrame) FallingBlock(org.bukkit.entity.FallingBlock) Hanging(org.bukkit.entity.Hanging) HopperMinecartEntity(net.minecraft.entity.item.minecart.HopperMinecartEntity) WanderingTrader(org.bukkit.entity.WanderingTrader) BlockPos(net.minecraft.util.math.BlockPos) ImmutableList(com.google.common.collect.ImmutableList) ArrayList(java.util.ArrayList) List(java.util.List) ArmorStandEntity(net.minecraft.entity.item.ArmorStandEntity) Zombie(org.bukkit.entity.Zombie) PigZombie(org.bukkit.entity.PigZombie) PiglinBrute(org.bukkit.entity.PiglinBrute) EnderCrystal(org.bukkit.entity.EnderCrystal) Evoker(org.bukkit.entity.Evoker) FurnaceMinecartEntity(net.minecraft.entity.item.minecart.FurnaceMinecartEntity) Fox(org.bukkit.entity.Fox) Drowned(org.bukkit.entity.Drowned) PoweredMinecart(org.bukkit.entity.minecart.PoweredMinecart) Cat(org.bukkit.entity.Cat) ThrownExpBottle(org.bukkit.entity.ThrownExpBottle) EvokerFangsEntity(net.minecraft.entity.projectile.EvokerFangsEntity) AxisAlignedBB(net.minecraft.util.math.AxisAlignedBB) Stray(org.bukkit.entity.Stray) AbstractArrowEntity(net.minecraft.entity.projectile.AbstractArrowEntity) ArrowEntity(net.minecraft.entity.projectile.ArrowEntity) Creeper(org.bukkit.entity.Creeper) ComplexLivingEntity(org.bukkit.entity.ComplexLivingEntity) Silverfish(org.bukkit.entity.Silverfish) Spellcaster(org.bukkit.entity.Spellcaster) LeashHitch(org.bukkit.entity.LeashHitch) Iterator(java.util.Iterator) Skeleton(org.bukkit.entity.Skeleton) WitherSkeleton(org.bukkit.entity.WitherSkeleton) SkeletonHorse(org.bukkit.entity.SkeletonHorse) FallingBlockEntity(net.minecraft.entity.item.FallingBlockEntity) PolarBear(org.bukkit.entity.PolarBear) SpawnerMinecart(org.bukkit.entity.minecart.SpawnerMinecart) Egg(org.bukkit.entity.Egg) PufferFish(org.bukkit.entity.PufferFish) EyeOfEnderEntity(net.minecraft.entity.projectile.EyeOfEnderEntity) SpawnerMinecartEntity(net.minecraft.entity.item.minecart.SpawnerMinecartEntity) ExperienceOrbEntity(net.minecraft.entity.item.ExperienceOrbEntity) PotionEntity(net.minecraft.entity.projectile.PotionEntity) Painting(org.bukkit.entity.Painting) CraftBlockState(org.bukkit.craftbukkit.v1_16_R3.block.CraftBlockState) CaveSpider(org.bukkit.entity.CaveSpider) Spider(org.bukkit.entity.Spider) Sheep(org.bukkit.entity.Sheep)

Example 7 with HangingEntity

use of net.minecraft.entity.item.HangingEntity in project ChocolateQuestRepoured by TeamChocoQuest.

the class PreparableEntityInfo method prepareNormal.

@Override
public GeneratableEntityInfo prepareNormal(World world, DungeonPlacement placement) {
    Entity entity = EntityList.createEntityFromNBT(this.entityData, world);
    double x;
    double y;
    double z;
    if (entity instanceof HangingEntity) {
        x = this.entityData.getInteger("TileX");
        y = this.entityData.getInteger("TileY");
        z = this.entityData.getInteger("TileZ");
        if (entity instanceof PaintingEntity && placement.getMirror() != Mirror.NONE) {
            int n = ((((PaintingEntity) entity).art.sizeX >> 4) + 1) & 1;
            switch(((PaintingEntity) entity).facingDirection.rotateYCCW()) {
                case NORTH:
                    z -= n;
                    break;
                case EAST:
                    x += n;
                    break;
                case SOUTH:
                    z += n;
                    break;
                case WEST:
                    x -= n;
                    break;
                default:
                    break;
            }
        }
        BlockPos pos = placement.transform((int) x, (int) y, (int) z);
        x = pos.getX();
        y = pos.getY();
        z = pos.getZ();
    } else {
        ListNBT tagList = this.entityData.getTagList("Pos", Constants.NBT.TAG_DOUBLE);
        MutableVec3d vec = placement.transform(tagList.getDoubleAt(0), tagList.getDoubleAt(1), tagList.getDoubleAt(2));
        x = vec.x;
        y = vec.y;
        z = vec.z;
    }
    float transformedYaw = placement.transform(entity);
    entity.setLocationAndAngles(x, y, z, transformedYaw, entity.rotationPitch);
    entity.setRenderYawOffset(transformedYaw);
    entity.setRotationYawHead(transformedYaw);
    return new GeneratableEntityInfo(entity);
}
Also used : Entity(net.minecraft.entity.Entity) PaintingEntity(net.minecraft.entity.item.PaintingEntity) HangingEntity(net.minecraft.entity.item.HangingEntity) HangingEntity(net.minecraft.entity.item.HangingEntity) ListNBT(net.minecraft.nbt.ListNBT) PaintingEntity(net.minecraft.entity.item.PaintingEntity) BlockPos(net.minecraft.util.math.BlockPos) MutableVec3d(team.cqr.cqrepoured.world.structure.generation.generation.DungeonPlacement.MutableVec3d) GeneratableEntityInfo(team.cqr.cqrepoured.world.structure.generation.generation.generatable.GeneratableEntityInfo)

Example 8 with HangingEntity

use of net.minecraft.entity.item.HangingEntity in project Arclight by IzzelAliz.

the class HangingEntityMixin method arclight$hangingBreakByAttack.

@Inject(method = "attackEntityFrom", cancellable = true, at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/item/HangingEntity;remove()V"))
private void arclight$hangingBreakByAttack(DamageSource source, float amount, CallbackInfoReturnable<Boolean> cir) {
    Entity damager = (source instanceof IndirectEntityDamageSource) ? ((IndirectEntityDamageSourceBridge) source).bridge$getProximateDamageSource() : source.getTrueSource();
    HangingBreakEvent event;
    if (damager != null) {
        event = new HangingBreakByEntityEvent((Hanging) this.getBukkitEntity(), ((EntityBridge) damager).bridge$getBukkitEntity(), source.isExplosion() ? HangingBreakEvent.RemoveCause.EXPLOSION : HangingBreakEvent.RemoveCause.ENTITY);
    } else {
        event = new HangingBreakEvent((Hanging) this.getBukkitEntity(), source.isExplosion() ? HangingBreakEvent.RemoveCause.EXPLOSION : HangingBreakEvent.RemoveCause.DEFAULT);
    }
    Bukkit.getPluginManager().callEvent(event);
    if (this.removed || event.isCancelled()) {
        cir.setReturnValue(true);
    }
}
Also used : HangingBreakEvent(org.bukkit.event.hanging.HangingBreakEvent) Entity(net.minecraft.entity.Entity) HangingEntity(net.minecraft.entity.item.HangingEntity) HangingBreakByEntityEvent(org.bukkit.event.hanging.HangingBreakByEntityEvent) Hanging(org.bukkit.entity.Hanging) IndirectEntityDamageSource(net.minecraft.util.IndirectEntityDamageSource) EntityBridge(io.izzel.arclight.common.bridge.entity.EntityBridge) Inject(org.spongepowered.asm.mixin.injection.Inject)

Example 9 with HangingEntity

use of net.minecraft.entity.item.HangingEntity in project Magma-1.16.x by magmafoundation.

the class CraftHanging method setFacingDirection.

@Override
public boolean setFacingDirection(BlockFace face, boolean force) {
    HangingEntity hanging = getHandle();
    Direction dir = hanging.getDirection();
    switch(face) {
        case SOUTH:
        default:
            getHandle().setDirection(Direction.SOUTH);
            break;
        case WEST:
            getHandle().setDirection(Direction.WEST);
            break;
        case NORTH:
            getHandle().setDirection(Direction.NORTH);
            break;
        case EAST:
            getHandle().setDirection(Direction.EAST);
            break;
    }
    if (!force && !hanging.survives()) {
        // Revert since it doesn't fit
        hanging.setDirection(dir);
        return false;
    }
    return true;
}
Also used : HangingEntity(net.minecraft.entity.item.HangingEntity) Direction(net.minecraft.util.Direction)

Example 10 with HangingEntity

use of net.minecraft.entity.item.HangingEntity in project LoliServer by Loli-Server.

the class CraftHanging method setFacingDirection.

@Override
public boolean setFacingDirection(BlockFace face, boolean force) {
    HangingEntity hanging = getHandle();
    Direction dir = hanging.getDirection();
    switch(face) {
        case SOUTH:
        default:
            getHandle().setDirection(Direction.SOUTH);
            break;
        case WEST:
            getHandle().setDirection(Direction.WEST);
            break;
        case NORTH:
            getHandle().setDirection(Direction.NORTH);
            break;
        case EAST:
            getHandle().setDirection(Direction.EAST);
            break;
    }
    if (!force && !hanging.survives()) {
        // Revert since it doesn't fit
        hanging.setDirection(dir);
        return false;
    }
    return true;
}
Also used : HangingEntity(net.minecraft.entity.item.HangingEntity) Direction(net.minecraft.util.Direction)

Aggregations

HangingEntity (net.minecraft.entity.item.HangingEntity)10 Direction (net.minecraft.util.Direction)6 Entity (net.minecraft.entity.Entity)4 BlockPos (net.minecraft.util.math.BlockPos)4 PaintingEntity (net.minecraft.entity.item.PaintingEntity)3 AxisAlignedBB (net.minecraft.util.math.AxisAlignedBB)3 ImmutableList (com.google.common.collect.ImmutableList)2 ArrayList (java.util.ArrayList)2 Iterator (java.util.Iterator)2 List (java.util.List)2 AreaEffectCloudEntity (net.minecraft.entity.AreaEffectCloudEntity)2 MobEntity (net.minecraft.entity.MobEntity)2 LightningBoltEntity (net.minecraft.entity.effect.LightningBoltEntity)2 ArmorStandEntity (net.minecraft.entity.item.ArmorStandEntity)2 BoatEntity (net.minecraft.entity.item.BoatEntity)2 ExperienceOrbEntity (net.minecraft.entity.item.ExperienceOrbEntity)2 FallingBlockEntity (net.minecraft.entity.item.FallingBlockEntity)2 ItemEntity (net.minecraft.entity.item.ItemEntity)2 ItemFrameEntity (net.minecraft.entity.item.ItemFrameEntity)2 LeashKnotEntity (net.minecraft.entity.item.LeashKnotEntity)2