Inactive [FUN/MECH] Spawn v0.2.1 - Spawn any Entity, do maniacal things with them [1337]

Discussion in 'Inactive/Unsupported Plugins' started by Joren, Oct 9, 2011.

  1. Offline

    Joren

    This project moving to BukkitDev


    Spawn - Spawn any Entity, do maniacal things with them:

    Version: v0.2.1

    This plugin allows you to spawn any Entity in the game (including those released in the future). Such entities can be customized when spawned (e.g. sheep color, burning, velocity, passengers, owner, health). Players can also be manipulated in the same way as entities. This plugin was originally developed for Beyond Horizon's private use as a lite version of SpawnMob, but in the end I scrapped most of it and wrote a new plugin from scratch to support the craziness we had in mind. This is my first plugin release, and while this has been tested on our own server, it is still rough around the edges and is a work in progress, but I didn't want that to stop you all from being able to try it out :) We have tested this as extensively as we know how, and I will be adding to it as I am able. If you would like to suggest ideas and fixes, feel free to do so. And you're free to look at my code, but I can't be responsible for any injury you may sustain to your brain from looking at the sloppy mess and the unskilled hacks I used to get stuff done :D

    Features:
    • Spawn entities at specified spot with extensive customizations:
      • Angry/powered
      • Bouncy (for projectiles)
      • Colored (sheep)
      • on Fire
      • Health
      • Mount (pigs)
      • Naked (e.g. sheared sheep, player w/o armor)
      • Passenger
      • Size (slimes)
      • Target (attack/nuzzling)
      • Velocity
    • Teleport players and manipulate them in similar ways to the above list
    • Forwards-compatible with entities released in the future (using Java Reflection) - if you know the name of the entity's class, you can spawn it!
    • Kill entities according to above filters and radius
    • Guards against (some) exceptions by disabling entities that throw them
    • Randomly select from configurable lists of entities to spawn
    • Per-entity Permissions support for Nijikokun-compatible Permissions plugins (I know PEX works, not sure about Bukkit's perms)
    Download from BukkitDev: Get the current JAR here


    Github Source

    If you like what I've done and want to help support more of this kind of thing, please consider donating: Donate via PayPal

    Installation
    Please unzip the zip file to your plugins folder. Spawn.jar should go in /plugins and Spawn.yml should be in /plugins/Spawn. Yes, it can create a default YML file but you're probably better off with some sample aliases so you know how to add/remove them.

    Commands

    /spawn - Permissions-dependent summary of available commands.

    Right now the command is /spawn. However, I'm worried this will conflict with other plugins, so I might need to change this, since it is a really common word... ideas? In the mean time, you can also use /sp or /s.

    Spawning entities - requires spawn.spawn permission, cannot be run by console
    When you spawn an entity, make sure you are looking at the block you want them to spawn at.

    Code:
    /spawn <entity/group></customizations> <quantity>
    Examples:
    • /spawn Silverfish
      Spawns a silverfish
    • /spawn PlayerName/f:10/h:100%
      Teleports the player to your target block and sets him on fire for ten seconds and gives him full health.
    • /spawn Cow/t:JorenCombs
      Spawns a cow that follows JorenCombs around.
    • /spawn hostile/h:1 10
      Randomly selects ten entities from the "hostile" list and sets each one to 1 health.
    Spawning a new Entity for the first time:



    If you want to spawn an entity that's never been spawned before, you have to follow this procedure for the first time: look up the class name of the entity (e.g. org.bukkit.entity.Name) and type /spawn Name (case-sensitive!)

    This will spawn it and add Name to the configuration file, so that in the future, you can type (lowercase) /spawn name and it will work.

    If for some reason you need to type out the full class name, you can use /spawn org.bukkit.entity.Name as well (this might be useful if Name happens to conflict with a player name. If it's in the config file already, name shouldn't have to be case-sensitive)

    Customizing Entities:

    To customize an entity, add a parameter right after the entity's name. e.g. /spawn cow/v:10/f:10 will spawn a cow flying at velocity 10 and on fire for 10 seconds
    • Angry/Powered: /a
      Needs the spawn.angry permission.
      This entity is angry and easily (or already) provoked. If the entity doesn't support the setAngry method but does support the setPower method (e.g. creepers), they will be powered. Needs the spawn.angry permission.
    • Bounce: /b
      Needs the spawn.bounce permission.
      Used for projectiles (arrows) - doesn't seem to have any measurable effect so far. It's supposed to make the projectile bounce
    • Color: /c:<color/number>
      Needs the spawn.color permission.
      At the moment, only sheep have a setColor function. You can specify a color code (0-15, NOT the same as for other mods) or a name (BLUE). Here's the list:
      • WHITE - 0
      • ORANGE - 1
      • MAGENTA - 2
      • LIGHT_BLUE - 3
      • YELLOW - 4
      • LIME - 5
      • PINK - 6
      • GRAY - 7
      • SILVER - 8
      • CYAN - 9
      • PURPLE - 10
      • BLUE - 11
      • BROWN - 12
      • GREEN - 13
      • RED - 14
      • BLACK - 15
    • Fire: /f:<seconds>
      Needs the spawn.fire permission.
      The entity will be on fire for this many seconds. If the entity supports the setFuseTicks method (e.g. primed TNT :D) this will let you set the fuse.
    • Health: /h:<number/percentage>
      Needs the spawn.health permission.
      You can do it two ways, e.g. /h:10 or /h:100%. A percentage means that the entity will be at that percentage of normal health. A number means that the health will be directly set to that number. Health appears to have a Notch-imposed maximum, so we cannot use this to create super-mobs (yet)
    • Mount: /m
      Needs the spawn.mount permission.
      Entity will be mounted. Right now, only pigs support the setSaddle method.
    • Naked: /n
      Needs the spawn.naked permission.
      Entity will be naked. If used on a player, strips them of their armor. Other than that, only sheep support the setSheared method.
    • Owner: /o:<online-player-name>
      Needs the spawn.owner permission.
      Entity will be tamed and will belong to an owner. Right now, only wolves have setTamed and setOwner. If you run /o without a name, the animal will act tamed and owned but will belong to no one (Whose dog IS that??? dang it!). Only supports players currently online :(
    • Size: /s:<number>
      Needs the spawn.size permission.
      Entity will have the specified size. Restricted by sizeLimit in config. Right now, only slimes have a setSize method.
    • Target: /t:<player-name>
      Needs the spawn.target permission.
      Entity will target specified player. If friendly, entity will affectionately nuzzle the target; if hostile, entity will attack. Wolves and zombie pigmen will also attack if this parameter is used.
    • Velocity: /v:<number>
      Needs the spawn.velocity permission.
      Entity will be given specified velocity and a random direction when spawned.
    Passenger entities:



    To make entities ride each other, please use the semicolon. For example:

    /spawn OnlinePlayerName;skeleton/f:10;spider

    This will teleport the player to the target location and make him ride a skeleton that's on fire...which is also riding a spider. You can chain as many passengers as you'd like.

    Killing entities - requires spawn.kill permission, can be run from console

    Kills all entities that meet your criteria and gives you a body count. Console cannot use radius parameter. At this time, killing players using this command is not supported.

    If no entity is specified, everything in the default list "kill" will be killed. Also, this command will not kill owned, naked, or mounted entities unless specifically told to.

    Code:
    /spawn kill</customizations> <radius>
    /spawn kill <entity/group></customizations> <radius>
    Examples:
    • /spawn kill
      Kills every entity currently loaded that belongs to the default (configurable) "kill" list
    • /spawn kill/f 100
      Kills every entity currently on fire within 100 meters.
    • /spawn kill/t:Victim
      Kills every entity targeting the player named Victim.
    • /spawn kill Cow 50
      Kills all cows within 50 meters of the player
    • /spawn kill hostile
      Kills all entities belonging to the configured list "hostile"
    • /spawn kill tnt
      Kills all tnt that's been lit (does NOT kill untriggered TNT)
    Using /spawn kill with a filter



    To kill entities that match your filters, add a parameter right after the entity's name. e.g. /spawn kill cow/f/t will kill all burning cows that currently have a target.
    • Angry/Powered /a
      Needs the spawn.kill.angry permission.
      Kills only angry/powered entities
    • Color /c:<color/number>
      Needs the spawn.kill.color permission.
      Kills only entities of specified color
    • Fire: /f
      Needs the spawn.kill.fire permission.
      Kills only entities currently on fire
    • Health: /h:<number>
      Needs the spawn.kill.health permission.
      Kills only entities with exactly this much health (percentage not supported)
    • Mount: /m
      Needs the spawn.kill.mount permission.
      By default, mounted/saddled entities are NOT killed. If you really want to kill them, /m will kill just the mounted ones.
    • Naked: /n
      Needs the spawn.kill.naked permission.
      By default, naked entities are NOT killed. If you really want to kill them, /n will kill just the naked ones.
    • Owner: /o:<online-player-name>
      Needs the spawn.kill.owner permission.
      By default, owned entities are NOT killed. If you really want to kill them, /o by itself will kill all owned entities, or /o:eek:nline-player-name will kill just the entities owned by that player.
    • Size: /s:<number>
      Needs the spawn.kill.size permission.
      Kills only entities with this specific size
    • Targeted: /t:<player-name>
      Needs the spawn.kill.target permission.
      Kills only entities that currently have a target
    • Velocity: /v:<number>
      Needs the spawn.kill.velocity permission.
    Lists and Aliases


    The configuration file can have Aliases (lists of entities in a group) and PlayerAliases (lists of players in a group). For example, if you have an alias called "hostile" with a list of all hostile mobs, then any time you type /spawn hostile, it will randomly select from the list of hostile mobs. If you type /kill hostile, it will kill ALL hostile mobs.

    You can also have PlayerAliases, such as "admin" with a list of admins. So if you want to let people play a joke on the admins, you can give them the "spawn.spawn-player.admin" permission, which will let them use /spawn tnt;admin , which would pick an administrator at random and tp them to the spot with primed TNT on their head.

    Fun stuff to try

    Enderman rockets

    To make the player named Astronaut ride an enderman rocket, type /spawn Astronaut;enderman;Astronaut

    This creates a passenger loop that has the effect of rocketing the player up. You can chain more endermen together to make it go faster, e.g. /spawn Astronaut;enderman;enderman;enderman;Astronaut. Since Enderman start burning up when the sun rises, this means that the player runs out of fuel and plummets to the ground.

    Enderman rocket with a parachute

    Perhaps you don't want to kill the player. Ok. But they are gonna be falling for a long, long, time. Have the player ride a chicken on top of an enderman rocket:

    /spawn Astronaut;chicken;enderman;enderman;Astronaut

    Griefer discipline

    Spawn the griefer with primed TNT as a passenger:

    /spawn tnt;griefer

    Yes, this will make a block of lit TNT ride the griefer. You can even set a fuse on the TNT to give them time to beg for mercy (you can give them mercy by typing /kill tntprimed)

    Ghasts on a fuse

    Spawn ghasts with TNT riding them so that they die after ten seconds.

    /spawn tnt/f:10;ghast

    Fireworks

    Spawn a bunch of cows that fly really fast in random directions... while on fire. Best aimed from far away.

    /spawn cow/v:10/f:10 100

    Creepy Chicken


    Spawn a single friendly mob that follows another player around, nudging them. (if player is AFK next to a cliff, they might get pushed over)

    /spawn chicken/t:OnlinePlayerName

    Suicide Bombers

    Spawn TNT riding electric creepers. Add more TNT to the chain for increased effect (doesn't spread very far, though)

    /spawn TNT;Creeper/a 10

    Angry Wolves with a Vengeance

    Target these wolves on a griefer for great justice:

    /spawn wolf/a/t:Griefer

    Administration - requires spawn.admin permission, can be run from console

    • /spawn-admin reload
      Reloads the plugin (does not save configuration)
    • /spawn-admin save
      Saves the configuration (only matters if you've discovered a new mob that throws exceptions)
    • /spawn-admin reset
      Overwrites the configuration file with a clean config. Right now, this is really bare bones and does not come with any aliases. I HIGHLY recommend grabbing the sample config!
    • The console can run /spawn kill without the radius parameter.
    Permissions


    Each command (and for the most part each entity and each parameter) has its own permission node. If the player does not have permission to use something, it won't show up in the help and if the player tries to use it, they will get a generic "Unknown console command, type /help for help" or "Invalid parameter".

    When specifying per-Entity permissions, the exact name of the class (the "CaseSensitiveName" part of org.bukkit.entity.CaseSensitiveName) needs to be used.

    spawn.spawn - needed to run /spawn
    spawn.spawn-ent.Cow - needed to spawn Cows
    spawn.spawn-ent.Skeleton...)
    spawn.spawn-player - needed to use the /spawn command on players
    spawn.kill - needed to run /spawn kill
    spawn.kill-ent.Skeleton - needed to kill Skeletons

    I have separated the entities from the commands to make it easier to do things like this
    spawn.spawn.* - allows all parameters to /spawn command
    spawn.spawn-ent.* - allows all mobs to be spawned
    spawn.spawn-player.* - allows all player lists to be spawn/teleported
    spawn.kill.* - allows all parameters to /spawn kill command
    spawn.kill-ent.* - allows all (practical) entities to be killed

    For the purposes of this plugin, ops have all permissions.

    Configuration file

    Should be in /plugins/Spawn/Spawn.yml. The scheme is as follows:

    Code:
    Spawn:
        use-permissions: true  - if you do not use something that supports Nijikokun's Permissions, please set this to false.
        spawn-limit: 300 - How many entity combinations can be spawned at once
        size-limit: 50   - The maximum size for a slime
    PlayerAlias:
        admin:
            Lihad: true
            Kside: true
            JorenCombs: true
            Pherce: true
    Alias:
        cavespider:      - This is the (lowercase!) name that the player types to refer to this entity
            CaveSpider: true - This is the ACTUAL class name (org.bukkit.entity.CaveSpider - the part after the last dot)
        kill:            - This is the default list of mobs that will be killed when you run /spawn kill
            CaveSpider: true
            Chicken: true
            Creeper: true
            Cow: true
            Enderman: true
            Ghast: true
            Giant: true
            Pig: true
            PigZombie: true
            Skeleton: true
            Sheep: true
            Silverfish: true
            Slime: true
            Spider: true
            Squid: true
            Wolf: true
            Zombie: true
        mob:             - This is a list of mobs to spawn if you type /spawn mob.  It will randomly select from this list
            CaveSpider: true
            Chicken: true
            Creeper: true
            Cow: true
            Enderman: true
            Pig: true
            PigZombie: true
            Skeleton: true
            Sheep: true
            Silverfish: true
            Slime: true
            Spider: true
            Squid: true
            Wolf: true
            Zombie: true
        mycustomlist:    - Another list, you could type /spawn mycustomlist and get a randomly selected member of this list
            Ghast: true
            Giant: true
            Creeper: true
            Enderman: true
    Avoid:               - This lists entities that should NEVER be spawned.  They throw bad exceptions when they do.
        Animals: true
        Creature: true
        Entity: true
        Explosive: true
        FallingSand: true
        Fish: true
        Flying: true
        HumanEntity: true
        Item: true
        LivingEntity: true
        Monster: true
        Painting: true
        Player: true
        Projectile: true
        Vehicle: true
        WaterMob: true
        Slime: false
        Giant: false
        CaveSpider: false
        Chicken: false
        Creeper: false
        Cow: false
        Enderman: false
        Ghast: false
        Pig: false
        PigZombie: false
        Skeleton: false
        Sheep: false
        Silverfish: false
        Spider: false
        Squid: false
        Wolf: false
        Zombie: false
        ExperienceOrb: false
        Minecart: false
        TNTPrimed: false
        Boat: false
        Fireball: false
        LightningStrike: false
    
    Known bugs:
    • Minecarts riding entities are unstable and WILL crash the server if they touch each other or a wall. Therefore, minecarts as passengers are disabled for now; they will drop on the ground.
    • Although players have a hard-coded limit on velocity, Entities apparently DO NOT. Players riding an entity with an insanely high velocity like 100 or 1000 can bring down the server! The player will end up several kilometers from where they started, and the server will have to load/generate every chunk in between, disconnecting everyone in the process. So please do not type commands like /spawn jorencombs;cow/v:1000 if you value your server. There may be a hard limit on entity velocity in 0.2 (does anyone really need more than 10? Or maybe I'll just make it vertical-only for values in excess of 10)
    Changelog:

    v0.2.1 - 2011-10-24
    - Config file: renamed spawn to settings to avoid confusion with similarly named subsections
    - Config file: use-permissions defaults to false to avoid exceptions when running without perms we can recognize. Want this plugin to run "out of the box" without tweaking in as many circumstances as possible
    - spawnLimit now counts every passenger instead of treating the whole combo as one unit

    v0.2 - 2011-10-22
    - Made it possible to spawn Items
    - Redid configuration file, made it use lists
    - Randomized direction entity faces when spawned (not the same as velocity)
    - Allow for the inclusion of default parameters in alias (e.g. supercreeper could be creeper/a)

    v0.1 - 2011-10-10
    - Initial release

    Enjoy :)



    -- Joren
     
    r3Fuze likes this.
  2. Offline

    Zaros

    Oh wow.
     
  3. Offline

    gamerluke

    1st plugin?... You are going to go far.
    Very very nice, like SpawnMob but with so many more functions :D
    I see no reason why I shouldn't use this!
     
  4. Offline

    Joren

    If you downloaded it and are using permissions, I threw up a quick update to make it work consistently. To be honest, on our server we tend to only let ops play with toys like this, so apparently I need to test the permissions more to make sure it's doing what it should. That, or stop being so absent-minded when I write this stuff :D

    So... I need to come up with a roadmap for 0.2:
    - Want to clean up the config file (use lists instead of booleans... bleh)
    - Need a horizontal velocity limit to prevent players from bringing down the server by riding a mob flying at 1000
    - Might want custom X,Y,Z velocity parameters?
    - Want to find a way to add items to the mix - the only reason they're not in it now is because it threw exceptions when I tried to spawn them, and I was too lazy to play with the dropItem function... but I'll get there :)

    -- Joren
     
  5. Offline

    emericask8ur

    Good job but one thing, you should shorten the thread just a bit........ its too long
     
  6. Offline

    Joren

  7. Offline

    MonsieurApple

  8. Offline

    Starmute

    Can you add a way for a mob to target a specific mob?
     
  9. Offline

    Lucce96

    could i spawn Ender crystals with this?

    i really hope i so:D
     
  10. Offline

    Starmute

    Yes, you can spawn EnderCrystals with /ent EnderCrystal
     
  11. Offline

    Lucce96

    Nice!! :p

    Edit: now i get invalid mob type :'(

    Edit: lol i really had to do /ent EnderCrystal i did /ent endercrystal but thx
     
  12. Offline

    KaiBB

    I say you should find some sort of loophole to allow EnderDragon spawning :p ! It's an amazing mod, very fun messing with my players like this. And just a tip, for a big explosion, and a short rocket ride, do " /ent [name];enderman;enderman;TNT;[name] " The two names should be the same player!

    EDIT: there's a bug where when a mob is spawned in a minecart or a boat, the vehicle sinks into the ground, becoming an un-ridable waste of space.
     
  13. oh man, u fucked my command ''/spawn'' for teleport to the spawn, choose another command plz =/, i cant take off the essentials for this plugin

    i changed it by myself, but u should change it cuz its not fun when u crash ur server just for spawn one endercrystal
     
  14. Offline

    RaydarScan

    you can use /sp instead of /spawn
     
  15. No, the problem is, the command spawn of this plugin override the ''/spawn'' of essentials, so the players cant go to the spawn, the alias not its the problem
     
  16. Offline

    op77

    UPDATE!!![diamond]
    [diamond][diamond][diamond][diamond][diamond]
     
  17. Offline

    edragy

    Please can you update this! I love this plugin!

    mmm cake [cake]
     
  18. Offline

    Tuckapokemon


    I have gone to org.bukkit.entity.Name but I cannot find the classnames. Also when I type in "/Spawn Chicken" it tells me "An internal error occurred while attempting to perform this command". What do I do?
     

Share This Page