Confirmedusers, editor, Administrators
886
edits
CreativeMD (talk | contribs) (Created page with "Ever wanted to know how to add a command to the game? If yes, this is the right place to get an answer. == Preparations == The idea is to add a command which makes it easier...") |
CreativeMD (talk | contribs) No edit summary |
||
Line 9: | Line 9: | ||
== Implementation == | == Implementation == | ||
First of all you need to add another mod to your workspace. I will use the modid <code>here</code>, so I will type in <code>add here</code> in modtools to create a new mod. Additionally I will create <code>Command.cs</code> in the <code>src</code> directory. | |||
As always we need to create a class extending <code>ModSystem</code>: | |||
<syntaxhighlight lang="c#"> | |||
public class CommandMod : ModSystem | |||
{ | |||
} | |||
</syntaxhighlight> | |||
Commands are processed by the server, so our mod only needs to load on server side: | |||
<syntaxhighlight lang="c#"> | |||
public override bool ShouldLoad(EnumAppSide side) | |||
{ | |||
return side == EnumAppSide.Server; | |||
} | |||
</syntaxhighlight> | |||
Now we need to register the command itself: | |||
<syntaxhighlight lang="c#"> | |||
public override void StartServerSide(ICoreServerAPI api) | |||
{ | |||
base.StartServerSide(api); | |||
api.RegisterCommand("here", "spawns particles around the player", "", | |||
(IServerPlayer player, int groupId, CmdArgs args) => | |||
{ | |||
}, Privilege.chat); | |||
} | |||
</syntaxhighlight> | |||
This command can be used by any player which is allowed to send a message (by default everyone). Once a player will type in <code>/here</code> this command will be executed. Now we the only thing missing is the actual code to spawn particles and to player the sound. | |||
<syntaxhighlight lang="c#"> | |||
public override void StartServerSide(ICoreServerAPI api) | |||
{ | |||
base.StartServerSide(api); | |||
AssetLocation sound = new AssetLocation("here", "sounds/partyhorn"); // Create sound location | |||
api.RegisterCommand("here", "spawns particles around the player", "", | |||
(IServerPlayer player, int groupId, CmdArgs args) => | |||
{ | |||
IEntityPlayer byEntity = player.Entity; | |||
byEntity.World.PlaySoundAt(sound, byEntity); // Play sound | |||
Vec3d pos = byEntity.Pos.XYZ.Add(0, byEntity.EyeHeight(), 0); // Setting up position to spawn particles | |||
Random rand = new Random(); | |||
for (int i = 0; i < 100; i++) // Spawn 100 particles | |||
{ | |||
Vec3d realPos = pos.AddCopy(-0.1 + rand.NextDouble() * 0.2, 0, -0.1 + rand.NextDouble() * 0.2); | |||
Vec3f velocity = new Vec3f(-0.2F + (float) rand.NextDouble() * 0.4F, 0.4F + (float) rand.NextDouble() * 2F, -0.2F + (float) rand.NextDouble() * 0.4F); | |||
byEntity.World.SpawnParticles(1, ColorUtil.ColorFromArgb(255, rand.Next(0, 255), rand.Next(0, 255), rand.Next(0, 255)), | |||
realPos, realPos, | |||
velocity, velocity, (float) rand.NextDouble()*1 + 1, 0.01F, | |||
1, EnumParticleModel.Cube); | |||
} | |||
}, Privilege.chat); | |||
} | |||
</syntaxhighlight> | |||
If you want to learn more about how to use particles you can check out this [[Simple Particles|tutorial]]. | |||
== Testing == | == Testing == | ||
Finally we are ready to run our first test: | |||
<youtube>XjHMtl6rSF4</youtube> | |||
== Download == | == Download == | ||
Feel free to try it out yourself: | |||
[http://wiki.vintagestory.at/images/4/47/Here_v1.0.zip Here_v1.0.zip] |