Actor
The Actor plugin/library allows you to create "Actors" which playback pre-recorded actions as an NPC. Great for Machinima or for making your NPCs do exactly what you want. Actors can currently playback exact recordings of the following actions:
- Walking / Movement
- Block Placement / Removal
- Current Item selection
- Chatting
Multiple actors can be active at once. Scenes of actors can be saved to disk and loaded later. Actors can be dubbed into a translated position for crazy effects. See video.
Latest version notes: V0.10
Troupes! Now you can record more than one player at a time. If you have 'troupe' permission you can...
- /actor troupe add playername - add player to your troupe (they will be asked for confirmation and must type 'yes' in response)
- /actor troupe remove playername - remove player from troupe
- /actor troupe show - shows the current players in your troupe
Once your troupe is defined, use '/actor record' like normal but you will now be recording everyone in the troupe. '/actor hire' will hire an actor for every recorded troupe member.
Also in this release:
- /actor rename actorname newname - renames an actor
- minor bug fixes
Demo
Typical Usage / Getting Started
Typically the usage goes like this:
- /actor record <run around - place blocks, remove blocks, chat, etc>
- /actor cut
- /actor hire actorname
- /actor action <watch the actor do what you just recorded>
- /actor reset
- /actor actionrec <you are now playing back the actor and recording at the same time>
- /actor cut
- /actor reset
- /actor action <You now see both actors in the scene together>
- /actor savescene scenename
Installation
Put the ActorPlugin.jar into plugins on your server. The first time it is loaded it will create an Actor folder in your plugins dir where all your saved actors and scenes will be created.
Dependencies
Vault (optional)
Commands
In addition to being a library for use in other Bukkit mods, the Actor plugin provides commands to demo the basic functionality itself. Full table of commands and associated permission nodes can be found on this page. The following sub-commands have /actor as the root command:
- record:
Start recording into buffer.
- cut:
Stop recording and stop playback on all actors
- hire:
Spawn new actor using recording in buffer
usage: /actor hire [name]
- dub:
Duplicate one or all actors with a translation
usage: /actor dub [name|all] x y z
- fire:
Fire an actor (this means they are removed from the world). Name can be "all".
usage: /actor fire [name]
- action:
Playback actor or all actors
usage: /actor action [actorname]
- actionrec:
Playback actor or all actors and record
usage: /actor actionrec [actorname]
- loop:
Set an actor (or "all") to loop
usage: /actor loop [on|off] [actorname]
- reset:
Rewind actor or all actors
usage: /actor reset [actorname]
- remove:
Remove an actor. Alias for "fire".
usage: /actor remove [actorname]
- troupe:
Manage your troupe of actors. Subcommands: add, remove, show
usage: /actor troupe add [playername] - add player to troupe
usage: /actor troupe remove [playername] - remove troupe member
usage: /actor troupe show - list the current troupe members
- saveactor:
Save an actor's recording to a file
usage: /actor saveactor [actorname] [filename]
- savescene:
Save all actor recordings to dir/actorname
usage: /actor savescene [scenename]
- loadactor:
Spawn an actor with the give recording file
usage: /actor loadactor [actorname] [filename]
- loadscene:
Load and spawn all actor recordings from dir
usage: /actor loadscene [scenename]
The above list can be found in-game by using /actor. In-game list is based on the user's permissions.
Configuration
API
Actor is a libray which can be used in other plugins. View API here. Use the public "getInstance()' method on the ActorPlugin class which gives you access to the API commands. For example:
ActorPlugin.getInstance().record(player);
Beta Release
Currently in Beta this plugin will be revised to fix bugs and add features. Feel free to contribute.
GPL Licensed
The Actor Library is released under the GPL License.
Source
Image Credit
Thanks to Stugace for creating the RomeCraft texture pack used in the video: http://www.planetminecraft.com/texture_pack/romecraft/
Thanks to WLhokies for creating the Roman Villa used in the video: http://www.planetminecraft.com/project/roman-villa---villa-syndexioi-world-save-schematic/
Thanks
Thanks to Mitsugaru for adding permissions, maven, cleaning up the code, etc.
When i type the visible on [playername] command. the actor disappear. WTF?
@brickshot
Oh... So no one else can see it? Okay....:( Oh well! That's fine. Still an awesome plugin
I agree with Jessefjxm though.
@Mirmulniir
You need to give the actorname or "all" for all the actors.
when i write the remove command the plugin type in chat this: remove [actorname]
And actor removes only when i rejoin the server
Great Plugin!Can you make it compaitable with plugins like Chairs?I mean,make actors available to seat in the chairs,like a real player 0 0
@Matthiaswagg
@Akam123
I guess I could make a video about how to change skins but first let me try to explain it in words before you get your hopes up:
The main thing to understand is that the server has nothing to do with rendering skins on your minecraft characters. At all, period. That is all done by the client which is the minecraft program you run on your computer and it doesn't ask the minecraft server you connect to for the skin. It gets it from mojang's amazon aws server.
When you log in the minecraft server sends your client a bunch of information about who is logged in on the system. For every visible character your client then goes and downloads the skin not from the minecraft server you are connected to, but from "http://s3.amazonaws.com/MineCraftSkins/USERNAME.png". If the username of the character is "OgreBrad" (that's one of mine) then it would load the skin from:
http://s3.amazonaws.com/MineCraftSkins/OgreBrad.png
Go ahead and hit that link and you will see the png image which represents my skin. You can get any users skin that way - try:
http://s3.amazonaws.com/MinecraftSkins/Notch.png
That's Notch's skin. Try your own, etc...
So given that that is the architecture of the system you have to understand:
You can't make a server plugin to change peoples skins. Since the skin-loading is done completely by the client you can change your server until you're blue in the face but the client is still going to just go get the skin from http:s3.amazonaws.com...
So what can you do? Well all you can really do is make your client behave differently. You could do this with a client-side plugin or if you are lazy you can do it the way I did it. I just edited my local system hosts file to point "s3.amazonaws.com" to a different place. I made it point to a web server which I personally control and on that webserver in the /MinecraftSkins/ folder I put the new skins I wanted to see. So I'm tricking the client into loading a different skin than the one it should be because it's not contacting Mojang for it anymore but it's talking to my own web server.
Incidentally, this works for the actors in the Actor Plugin because it just sends normal character spawn packets to the client and the client thinks they are real users. So you can spawn a "Notch" Actor and it will have Notch's skin (try it!). But...
This is a hack. It doesn't change the way anyone else on the server sees the actors, only you. And it relies on an altered hosts file which has the side-effect of breaking all the normal skins (because I/you don't have all the skin files which mojang keeps on the amazon s3 server).
So for a video - it works great. For making machinima or something - perfect. But as a general solution to making actors look different for everyone who looks at them... no go.
Hope that helps.
tl;dr: You can use the hosts file technique to change actor skins on your personal system but no one else will see it.
@Akam123
I completely agree. I really want to know how to do that. Also, if you made an actor with default minecraft skin, then made a new skin character thingamigig, made another, would actor1 still have the default or the new default? ONE OTHER THING: Say I made an actor named Matthiaswagg, he would have my skin.
@brickshot
Due to the way that minecraft loads the character skins, a server mod cannot directly set them. The minecraft client goes off and loads the character skin from s3.amazonaws.com/MinecraftSkins/[charactername].png. Since the client is doing it, the server has no control over it.
That being said, it is possible to control it by running a client mod or by changing your hosts file so that s3.amazonaws.com points to another server where you store your own custom skins. That's what I did for the video.
----------------------------------------------------------------------------------------------------------Can you make a video about how you changed the host files and stored your own skin's, it would be great :)
Wait, how do you change the skin from default? I am confused... Could you add a video showing how you did it? And show where you would put the skin you want? Also, if you kept changing the skins in that new place, would it keep changing former actors, or could you keep the old ones skins, then point to a new one, and such? Sorry if that didn't make sense. EDIT: I just created an actor named Gladios, it gave it a skin, because, like DisguiseCraft, its taking the skin from the username, which most of the time is default. But because there is obviously a user out there with the name Gladios, it gave the actor his skin. This is good and bad... Intresting though. Would using the client thing way override this? I'm not saying get rid of this, because it could be used. One other possible feature, if you did add it I would hope it would be configurable, true or false: If you fought monsters in your play, it spawns them. But when killed, they don't drop drops
@mvdhoning
Correct, dub currently only translates the actor and not any of their actions. Might need to look into it at some point.
I have this idea to have an actor build buildings for a player at a certain spot in the world.
Now with this plugin i can record myself building it and have an actor replay building it.
I thought with dub i though i could change where the actor is doing this building but i dont know what numbers to fill in to make it work. As all what changes is where the actor is displayed but not where block appear and disappear.
@Nightsaver341
Thanks for the report. I will look in to that. I know there are some bugs with adding/removing blocks and doing 'reset' due to the order in which the undo packets are sent. This may be caused by the same issue.
I have found on my server that when I do a loop mode when building, some of the blocks dont dissapear so he can rebuild it.
@Akam123
The newest update has permission nodes for each command. Here is a full table of commands and associated permission nodes. Let me know if something isn't working or if you have any suggestions.
Hah, wow. Completely missed that while looking over the commands; well, thanks for the quick reply, in any case :D.
- BlackHand_111
@EdwinRophe
The commands will be restructured in a later release so that you won't have that issue.
@TierZero
Did you set the actor to be visible by others? When an actor is made, it is initially only visible by the creator.
visible: description: Set an actor visible to all other players or just the author. usage: /visible [on|off] actorname
And you can use the shortcut actor name "all" to apply to all known actors:
/visible on all
Hi,
Would there be any possible way to make this more friendly with a multiplayer server? As of now, it is working on the server - but the actor is seen by only the player that made him, which I believe is intended considering the entity is said to be made only for the player that created the actor.
But, (and as someone who doesn't know really anything about code/Java/etc., I'm not even sure if it would be possible to do), is there something that could be done to make the entity/actor able to be seen by all players on the server? Or, is there already a way to do this, and am I just missing it?
- BlackHand_111
I am have issues with remove as it is a system command, can we use the alias Fire?
@seanth
Yeah the actor is really a packet-level replay of what you do when you record it. So currently, even if the chest has no seeds, your actor will magically have them as you noticed.
@seanth
That'd be interesting... something to consider adding in for a future release.