use of net.minecraft.entity.item.FallingBlockEntity in project MCMOD-Industria by M-Marvin.
the class BlockFallingDust method entityInside.
@SuppressWarnings("deprecation")
@Override
public void entityInside(BlockState state, World worldIn, BlockPos pos, Entity entityIn) {
if (entityIn instanceof FallingBlockEntity) {
BlockState layerState = ((FallingBlockEntity) entityIn).getBlockState();
if (layerState.getBlock() == this) {
int layers = state.getValue(LAYERS);
int fallingLayers = layerState.getValue(LAYERS);
layers += fallingLayers;
int remainingLayers = layers > 16 ? layers % 16 : 0;
layers -= remainingLayers;
worldIn.setBlockAndUpdate(pos, state.setValue(LAYERS, Math.min(16, layers)));
if (remainingLayers > 0) {
BlockState topReplaceState = worldIn.getBlockState(pos.above());
if (topReplaceState.isAir()) {
worldIn.setBlockAndUpdate(pos.above(), this.defaultBlockState().setValue(LAYERS, Math.min(16, remainingLayers)));
}
}
((FallingBlockEntity) entityIn).dropItem = false;
entityIn.remove();
}
worldIn.getBlockTicks().scheduleTick(pos, this, 1);
}
super.entityInside(state, worldIn, pos, entityIn);
}
use of net.minecraft.entity.item.FallingBlockEntity in project bioplethora by AquexTheSeal.
the class BlockUtils method knockUpRandomNearbyBlocks.
public static void knockUpRandomNearbyBlocks(World world, double yDelta, BlockPos point, int radiusX, int radiusY, int radiusZ, boolean sendParticles, boolean randomYDelta) {
for (int radY = point.getY(); radY <= point.getY() + radiusY; radY++) {
for (int radX = point.getX() - radiusX; radX <= point.getX() + radiusX; radX++) {
for (int radZ = point.getZ() - radiusZ; radZ <= point.getZ() + radiusZ; radZ++) {
BlockPos pos = new BlockPos(radX, radY, radZ);
BlockState blockState = world.getBlockState(pos);
Block block = blockState.getBlock();
if (blockState.getMaterial().isSolid()) {
if (Math.random() <= 0.3) {
FallingBlockEntity blockEntity = new FallingBlockEntity(world, pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5, blockState);
if (randomYDelta) {
blockEntity.setDeltaMovement(blockEntity.getDeltaMovement().add(0, yDelta + (Math.random() / 4), 0));
} else {
blockEntity.setDeltaMovement(blockEntity.getDeltaMovement().add(0, yDelta, 0));
}
world.addFreshEntity(blockEntity);
if (sendParticles) {
if (world instanceof ServerWorld) {
((ServerWorld) world).sendParticles(new BlockParticleData(ParticleTypes.BLOCK, blockState), pos.getX(), pos.getY() + 1, pos.getZ(), 5, 0.6, 0.8, 0.6, 0.1);
}
}
}
}
}
}
}
BlockState pointstate = world.getBlockState(point);
world.playSound(null, point, pointstate.getSoundType().getBreakSound(), SoundCategory.PLAYERS, 1.0F, 1.0F);
}
use of net.minecraft.entity.item.FallingBlockEntity in project Magma-1.16.x by magmafoundation.
the class CraftWorld method spawnFallingBlock.
@Override
public FallingBlock spawnFallingBlock(Location location, org.bukkit.Material material, byte data) throws IllegalArgumentException {
Validate.notNull(location, "Location cannot be null");
Validate.notNull(material, "Material cannot be null");
Validate.isTrue(material.isBlock(), "Material must be a block");
FallingBlockEntity entity = new FallingBlockEntity(world, location.getX(), location.getY(), location.getZ(), CraftMagicNumbers.getBlock(material).defaultBlockState());
entity.fallDistance = 1;
world.addEntity(entity, SpawnReason.CUSTOM);
return (FallingBlock) entity.getBukkitEntity();
}
use of net.minecraft.entity.item.FallingBlockEntity in project Magma-1.16.x by magmafoundation.
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;
}
BlockFace[] faces = new BlockFace[] { BlockFace.EAST, BlockFace.NORTH, BlockFace.WEST, BlockFace.SOUTH, BlockFace.UP, BlockFace.DOWN };
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());
}
use of net.minecraft.entity.item.FallingBlockEntity 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());
}
Aggregations