Advertisement
Dori_mon

Untitled

Aug 11th, 2019
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 18.31 KB | None | 0 0
  1. public Entity createEntity(Location location, Class<? extends org.bukkit.entity.Entity> clazz) throws IllegalArgumentException {
  2.         if (location != null && clazz != null) {
  3.             Entity entity = null;
  4.             double x = location.getX();
  5.             double y = location.getY();
  6.             double z = location.getZ();
  7.             float pitch = location.getPitch();
  8.             float yaw = location.getYaw();
  9.             if (Boat.class.isAssignableFrom(clazz)) {
  10.                 entity = new EntityBoat(this.world, x, y, z);
  11.                 ((Entity)entity).setPositionRotation(x, y, z, yaw, pitch);
  12.             } else if (FallingBlock.class.isAssignableFrom(clazz)) {
  13.                 entity = new EntityFallingBlock(this.world, x, y, z, this.world.getType(new BlockPosition(x, y, z)));
  14.             } else if (Projectile.class.isAssignableFrom(clazz)) {
  15.                 if (Snowball.class.isAssignableFrom(clazz)) {
  16.                     entity = new EntitySnowball(this.world, x, y, z);
  17.                 } else if (Egg.class.isAssignableFrom(clazz)) {
  18.                     entity = new EntityEgg(this.world, x, y, z);
  19.                 } else if (Arrow.class.isAssignableFrom(clazz)) {
  20.                     if (TippedArrow.class.isAssignableFrom(clazz)) {
  21.                         entity = new EntityTippedArrow(this.world);
  22.                         ((EntityTippedArrow)entity).setType(CraftPotionUtil.fromBukkit(new PotionData(PotionType.WATER, false, false)));
  23.                     } else if (SpectralArrow.class.isAssignableFrom(clazz)) {
  24.                         entity = new EntitySpectralArrow(this.world);
  25.                     } else {
  26.                         entity = new EntityTippedArrow(this.world);
  27.                     }
  28.  
  29.                     ((Entity)entity).setPositionRotation(x, y, z, 0.0F, 0.0F);
  30.                 } else if (ThrownExpBottle.class.isAssignableFrom(clazz)) {
  31.                     entity = new EntityThrownExpBottle(this.world);
  32.                     ((Entity)entity).setPositionRotation(x, y, z, 0.0F, 0.0F);
  33.                 } else if (EnderPearl.class.isAssignableFrom(clazz)) {
  34.                     entity = new EntityEnderPearl(this.world);
  35.                     ((Entity)entity).setPositionRotation(x, y, z, 0.0F, 0.0F);
  36.                 } else if (ThrownPotion.class.isAssignableFrom(clazz)) {
  37.                     if (LingeringPotion.class.isAssignableFrom(clazz)) {
  38.                         entity = new EntityPotion(this.world, x, y, z, CraftItemStack.asNMSCopy(new ItemStack(Material.LINGERING_POTION, 1)));
  39.                     } else {
  40.                         entity = new EntityPotion(this.world, x, y, z, CraftItemStack.asNMSCopy(new ItemStack(Material.SPLASH_POTION, 1)));
  41.                     }
  42.                 } else if (Fireball.class.isAssignableFrom(clazz)) {
  43.                     if (SmallFireball.class.isAssignableFrom(clazz)) {
  44.                         entity = new EntitySmallFireball(this.world);
  45.                     } else if (WitherSkull.class.isAssignableFrom(clazz)) {
  46.                         entity = new EntityWitherSkull(this.world);
  47.                     } else if (DragonFireball.class.isAssignableFrom(clazz)) {
  48.                         entity = new EntityDragonFireball(this.world);
  49.                     } else {
  50.                         entity = new EntityLargeFireball(this.world);
  51.                     }
  52.  
  53.                     ((Entity)entity).setPositionRotation(x, y, z, yaw, pitch);
  54.                     Vector direction = location.getDirection().multiply(10);
  55.                     ((EntityFireball)entity).setDirection(direction.getX(), direction.getY(), direction.getZ());
  56.                 } else if (ShulkerBullet.class.isAssignableFrom(clazz)) {
  57.                     entity = new EntityShulkerBullet(this.world);
  58.                     ((Entity)entity).setPositionRotation(x, y, z, yaw, pitch);
  59.                 } else if (LlamaSpit.class.isAssignableFrom(clazz)) {
  60.                     entity = new EntityLlamaSpit(this.world);
  61.                     ((Entity)entity).setPositionRotation(x, y, z, yaw, pitch);
  62.                 }
  63.             } else if (Minecart.class.isAssignableFrom(clazz)) {
  64.                 if (PoweredMinecart.class.isAssignableFrom(clazz)) {
  65.                     entity = new EntityMinecartFurnace(this.world, x, y, z);
  66.                 } else if (StorageMinecart.class.isAssignableFrom(clazz)) {
  67.                     entity = new EntityMinecartChest(this.world, x, y, z);
  68.                 } else if (ExplosiveMinecart.class.isAssignableFrom(clazz)) {
  69.                     entity = new EntityMinecartTNT(this.world, x, y, z);
  70.                 } else if (HopperMinecart.class.isAssignableFrom(clazz)) {
  71.                     entity = new EntityMinecartHopper(this.world, x, y, z);
  72.                 } else if (SpawnerMinecart.class.isAssignableFrom(clazz)) {
  73.                     entity = new EntityMinecartMobSpawner(this.world, x, y, z);
  74.                 } else if (CommandMinecart.class.isAssignableFrom(clazz)) {
  75.                     entity = new EntityMinecartCommandBlock(this.world, x, y, z);
  76.                 } else {
  77.                     entity = new EntityMinecartRideable(this.world, x, y, z);
  78.                 }
  79.             } else if (EnderSignal.class.isAssignableFrom(clazz)) {
  80.                 entity = new EntityEnderSignal(this.world, x, y, z);
  81.             } else if (EnderCrystal.class.isAssignableFrom(clazz)) {
  82.                 entity = new EntityEnderCrystal(this.world);
  83.                 ((Entity)entity).setPositionRotation(x, y, z, 0.0F, 0.0F);
  84.             } else if (LivingEntity.class.isAssignableFrom(clazz)) {
  85.                 if (Chicken.class.isAssignableFrom(clazz)) {
  86.                     entity = new EntityChicken(this.world);
  87.                 } else if (Cow.class.isAssignableFrom(clazz)) {
  88.                     if (MushroomCow.class.isAssignableFrom(clazz)) {
  89.                         entity = new EntityMushroomCow(this.world);
  90.                     } else {
  91.                         entity = new EntityCow(this.world);
  92.                     }
  93.                 } else if (Golem.class.isAssignableFrom(clazz)) {
  94.                     if (Snowman.class.isAssignableFrom(clazz)) {
  95.                         entity = new EntitySnowman(this.world);
  96.                     } else if (IronGolem.class.isAssignableFrom(clazz)) {
  97.                         entity = new EntityIronGolem(this.world);
  98.                     } else if (Shulker.class.isAssignableFrom(clazz)) {
  99.                         entity = new EntityShulker(this.world);
  100.                     }
  101.                 } else if (Creeper.class.isAssignableFrom(clazz)) {
  102.                     entity = new EntityCreeper(this.world);
  103.                 } else if (Ghast.class.isAssignableFrom(clazz)) {
  104.                     entity = new EntityGhast(this.world);
  105.                 } else if (Pig.class.isAssignableFrom(clazz)) {
  106.                     entity = new EntityPig(this.world);
  107.                 } else if (!Player.class.isAssignableFrom(clazz)) {
  108.                     if (Sheep.class.isAssignableFrom(clazz)) {
  109.                         entity = new EntitySheep(this.world);
  110.                     } else if (AbstractHorse.class.isAssignableFrom(clazz)) {
  111.                         if (ChestedHorse.class.isAssignableFrom(clazz)) {
  112.                             if (Donkey.class.isAssignableFrom(clazz)) {
  113.                                 entity = new EntityHorseDonkey(this.world);
  114.                             } else if (Mule.class.isAssignableFrom(clazz)) {
  115.                                 entity = new EntityHorseMule(this.world);
  116.                             } else if (Llama.class.isAssignableFrom(clazz)) {
  117.                                 entity = new EntityLlama(this.world);
  118.                             }
  119.                         } else if (SkeletonHorse.class.isAssignableFrom(clazz)) {
  120.                             entity = new EntityHorseSkeleton(this.world);
  121.                         } else if (ZombieHorse.class.isAssignableFrom(clazz)) {
  122.                             entity = new EntityHorseZombie(this.world);
  123.                         } else {
  124.                             entity = new EntityHorse(this.world);
  125.                         }
  126.                     } else if (Skeleton.class.isAssignableFrom(clazz)) {
  127.                         if (Stray.class.isAssignableFrom(clazz)) {
  128.                             entity = new EntitySkeletonStray(this.world);
  129.                         } else if (WitherSkeleton.class.isAssignableFrom(clazz)) {
  130.                             entity = new EntitySkeletonWither(this.world);
  131.                         } else {
  132.                             entity = new EntitySkeleton(this.world);
  133.                         }
  134.                     } else if (Slime.class.isAssignableFrom(clazz)) {
  135.                         if (MagmaCube.class.isAssignableFrom(clazz)) {
  136.                             entity = new EntityMagmaCube(this.world);
  137.                         } else {
  138.                             entity = new EntitySlime(this.world);
  139.                         }
  140.                     } else if (Spider.class.isAssignableFrom(clazz)) {
  141.                         if (CaveSpider.class.isAssignableFrom(clazz)) {
  142.                             entity = new EntityCaveSpider(this.world);
  143.                         } else {
  144.                             entity = new EntitySpider(this.world);
  145.                         }
  146.                     } else if (Squid.class.isAssignableFrom(clazz)) {
  147.                         entity = new EntitySquid(this.world);
  148.                     } else if (Tameable.class.isAssignableFrom(clazz)) {
  149.                         if (Wolf.class.isAssignableFrom(clazz)) {
  150.                             entity = new EntityWolf(this.world);
  151.                         } else if (Ocelot.class.isAssignableFrom(clazz)) {
  152.                             entity = new EntityOcelot(this.world);
  153.                         } else if (Parrot.class.isAssignableFrom(clazz)) {
  154.                             entity = new EntityParrot(this.world);
  155.                         }
  156.                     } else if (PigZombie.class.isAssignableFrom(clazz)) {
  157.                         entity = new EntityPigZombie(this.world);
  158.                     } else if (Zombie.class.isAssignableFrom(clazz)) {
  159.                         if (Husk.class.isAssignableFrom(clazz)) {
  160.                             entity = new EntityZombieHusk(this.world);
  161.                         } else if (ZombieVillager.class.isAssignableFrom(clazz)) {
  162.                             entity = new EntityZombieVillager(this.world);
  163.                         } else {
  164.                             entity = new EntityZombie(this.world);
  165.                         }
  166.                     } else if (Giant.class.isAssignableFrom(clazz)) {
  167.                         entity = new EntityGiantZombie(this.world);
  168.                     } else if (Silverfish.class.isAssignableFrom(clazz)) {
  169.                         entity = new EntitySilverfish(this.world);
  170.                     } else if (Enderman.class.isAssignableFrom(clazz)) {
  171.                         entity = new EntityEnderman(this.world);
  172.                     } else if (Blaze.class.isAssignableFrom(clazz)) {
  173.                         entity = new EntityBlaze(this.world);
  174.                     } else if (Villager.class.isAssignableFrom(clazz)) {
  175.                         entity = new EntityVillager(this.world);
  176.                     } else if (Witch.class.isAssignableFrom(clazz)) {
  177.                         entity = new EntityWitch(this.world);
  178.                     } else if (Wither.class.isAssignableFrom(clazz)) {
  179.                         entity = new EntityWither(this.world);
  180.                     } else if (ComplexLivingEntity.class.isAssignableFrom(clazz)) {
  181.                         if (EnderDragon.class.isAssignableFrom(clazz)) {
  182.                             entity = new EntityEnderDragon(this.world);
  183.                         }
  184.                     } else if (Ambient.class.isAssignableFrom(clazz)) {
  185.                         if (Bat.class.isAssignableFrom(clazz)) {
  186.                             entity = new EntityBat(this.world);
  187.                         }
  188.                     } else if (Rabbit.class.isAssignableFrom(clazz)) {
  189.                         entity = new EntityRabbit(this.world);
  190.                     } else if (Endermite.class.isAssignableFrom(clazz)) {
  191.                         entity = new EntityEndermite(this.world);
  192.                     } else if (Guardian.class.isAssignableFrom(clazz)) {
  193.                         if (ElderGuardian.class.isAssignableFrom(clazz)) {
  194.                             entity = new EntityGuardianElder(this.world);
  195.                         } else {
  196.                             entity = new EntityGuardian(this.world);
  197.                         }
  198.                     } else if (ArmorStand.class.isAssignableFrom(clazz)) {
  199.                         entity = new EntityArmorStand(this.world, x, y, z);
  200.                     } else if (PolarBear.class.isAssignableFrom(clazz)) {
  201.                         entity = new EntityPolarBear(this.world);
  202.                     } else if (Vex.class.isAssignableFrom(clazz)) {
  203.                         entity = new EntityVex(this.world);
  204.                     } else if (Illager.class.isAssignableFrom(clazz)) {
  205.                         if (Spellcaster.class.isAssignableFrom(clazz)) {
  206.                             if (Evoker.class.isAssignableFrom(clazz)) {
  207.                                 entity = new EntityEvoker(this.world);
  208.                             } else if (Illusioner.class.isAssignableFrom(clazz)) {
  209.                                 entity = new EntityIllagerIllusioner(this.world);
  210.                             }
  211.                         } else if (Vindicator.class.isAssignableFrom(clazz)) {
  212.                             entity = new EntityVindicator(this.world);
  213.                         }
  214.                     }
  215.                 }
  216.  
  217.                 if (entity != null) {
  218.                     ((Entity)entity).setLocation(x, y, z, yaw, pitch);
  219.                     ((Entity)entity).setHeadRotation(yaw);
  220.                 }
  221.             } else if (Hanging.class.isAssignableFrom(clazz)) {
  222.                 Block block = this.getBlockAt(location);
  223.                 BlockFace face = BlockFace.SELF;
  224.                 int width = 16;
  225.                 int height = 16;
  226.                 if (ItemFrame.class.isAssignableFrom(clazz)) {
  227.                     width = 12;
  228.                     height = 12;
  229.                 } else if (LeashHitch.class.isAssignableFrom(clazz)) {
  230.                     width = 9;
  231.                     height = 9;
  232.                 }
  233.  
  234.                 BlockFace[] faces = new BlockFace[]{BlockFace.EAST, BlockFace.NORTH, BlockFace.WEST, BlockFace.SOUTH};
  235.                 BlockPosition pos = new BlockPosition((int)x, (int)y, (int)z);
  236.                 BlockFace[] var21 = faces;
  237.                 int var20 = faces.length;
  238.  
  239.                 for(int var19 = 0; var19 < var20; ++var19) {
  240.                     BlockFace dir = var21[var19];
  241.                     net.minecraft.server.v1_12_R1.Block nmsBlock = CraftMagicNumbers.getBlock(block.getRelative(dir));
  242.                     if (nmsBlock.getBlockData().getMaterial().isBuildable() || BlockDiodeAbstract.isDiode(nmsBlock.getBlockData())) {
  243.                         boolean taken = false;
  244.                         AxisAlignedBB bb = EntityHanging.calculateBoundingBox((Entity)null, pos, CraftBlock.blockFaceToNotch(dir).opposite(), width, height);
  245.                         List<Entity> list = this.world.getEntities((Entity)null, bb);
  246.                         Iterator it = list.iterator();
  247.  
  248.                         while(!taken && it.hasNext()) {
  249.                             Entity e = (Entity)it.next();
  250.                             if (e instanceof EntityHanging) {
  251.                                 taken = true;
  252.                             }
  253.                         }
  254.  
  255.                         if (!taken) {
  256.                             face = dir;
  257.                             break;
  258.                         }
  259.                     }
  260.                 }
  261.  
  262.                 if (LeashHitch.class.isAssignableFrom(clazz)) {
  263.                     entity = new EntityLeash(this.world, new BlockPosition((int)x, (int)y, (int)z));
  264.                     ((Entity)entity).attachedToPlayer = true;
  265.                 } else {
  266.                     Preconditions.checkArgument(face != BlockFace.SELF, "Cannot spawn hanging entity for %s at %s (no free face)", clazz.getName(), location);
  267.                     EnumDirection dir = CraftBlock.blockFaceToNotch(face).opposite();
  268.                     if (Painting.class.isAssignableFrom(clazz)) {
  269.                         entity = new EntityPainting(this.world, new BlockPosition((int)x, (int)y, (int)z), dir);
  270.                     } else if (ItemFrame.class.isAssignableFrom(clazz)) {
  271.                         entity = new EntityItemFrame(this.world, new BlockPosition((int)x, (int)y, (int)z), dir);
  272.                     }
  273.                 }
  274.  
  275.                 if (entity != null && !((EntityHanging)entity).survives()) {
  276.                     throw new IllegalArgumentException("Cannot spawn hanging entity for " + clazz.getName() + " at " + location);
  277.                 }
  278.             } else if (TNTPrimed.class.isAssignableFrom(clazz)) {
  279.                 entity = new EntityTNTPrimed(this.world, x, y, z, (EntityLiving)null);
  280.             } else if (ExperienceOrb.class.isAssignableFrom(clazz)) {
  281.                 entity = new EntityExperienceOrb(this.world, x, y, z, 0);
  282.             } else if (Weather.class.isAssignableFrom(clazz)) {
  283.                 if (LightningStrike.class.isAssignableFrom(clazz)) {
  284.                     entity = new EntityLightning(this.world, x, y, z, false);
  285.                 }
  286.             } else if (Firework.class.isAssignableFrom(clazz)) {
  287.                 entity = new EntityFireworks(this.world, x, y, z, net.minecraft.server.v1_12_R1.ItemStack.a);
  288.             } else if (AreaEffectCloud.class.isAssignableFrom(clazz)) {
  289.                 entity = new EntityAreaEffectCloud(this.world, x, y, z);
  290.             } else if (EvokerFangs.class.isAssignableFrom(clazz)) {
  291.                 entity = new EntityEvokerFangs(this.world, x, y, z, (float)Math.toRadians((double)yaw), 0, (EntityLiving)null);
  292.             }
  293.  
  294.             if (entity != null) {
  295.                 return (Entity)entity;
  296.             } else {
  297.                 throw new IllegalArgumentException("Cannot spawn an entity for " + clazz.getName());
  298.             }
  299.         } else {
  300.             throw new IllegalArgumentException("Location or entity class cannot be null");
  301.         }
  302.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement