Confirmedusers
711
edits
Lazy Warlock (talk | contribs) No edit summary |
m (Updated navbox to new code navbox.) |
||
(11 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
<languages/> | |||
{{GameVersion|1.19.3}} | |||
<translate> | |||
<!--T:1--> | |||
Ever wanted to know how to add a command to the game? If yes, this is the right place to get an answer. | Ever wanted to know how to add a command to the game? If yes, this is the right place to get an answer. | ||
== Preparations == | == Preparations == <!--T:2--> | ||
The idea is to add a command which makes it easier for your | <!--T:3--> | ||
The idea is to add a command which makes it easier for your friends to locate you. Therefore we will spawn some particles alongside a playing sound, so others can see and hear where you are at the moment. | |||
== Implementation == <!--T:7--> | |||
As always, we need to create a class extending <code>ModSystem</code>: | |||
== Implementation == | |||
As always we need to create a class extending <code>ModSystem</code>: | |||
<syntaxhighlight lang="c#"> | <syntaxhighlight lang="c#"> | ||
public class CommandMod : ModSystem | public class CommandMod : ModSystem | ||
{ | { | ||
<!--T:8--> | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<!--T:9--> | |||
We will be creating a server-side command, so our mod only needs to load on the server's side: | |||
<syntaxhighlight lang="c#"> | <syntaxhighlight lang="c#"> | ||
public override bool ShouldLoad(EnumAppSide side) | public override bool ShouldLoad(EnumAppSide side) | ||
Line 27: | Line 29: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Now we need to | <!--T:10--> | ||
Now we need to create the command itself: | |||
<syntaxhighlight lang="c#"> | <syntaxhighlight lang="c#"> | ||
public override void StartServerSide(ICoreServerAPI api) | public override void StartServerSide(ICoreServerAPI api) | ||
{ | { | ||
base.StartServerSide(api); | base.StartServerSide(api); | ||
api. | AssetLocation sound = new AssetLocation("here", "sounds/partyhorn"); | ||
api.ChatCommands.Create("here") | |||
.WithDescription("spawns particles around the player") | |||
.RequiresPrivilege(Privilege.chat) | |||
.RequiresPlayer(); | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<!--T:12--> | |||
This command can be used by any player who is allowed to send a message (by default everyone). When a player types in <code>/here</code>, the command will be executed. Now we the only thing missing is the actual code to spawn particles and to play the sound. | This command can be used by any player who is allowed to send a message (by default everyone). When a player types in <code>/here</code>, the command will be executed. Now we the only thing missing is the actual code to spawn particles and to play the sound. | ||
<!--T:13--> | |||
<syntaxhighlight lang="c#"> | <syntaxhighlight lang="c#"> | ||
public override void StartServerSide(ICoreServerAPI api) | public override void StartServerSide(ICoreServerAPI api) | ||
{ | { | ||
base.StartServerSide(api); | base.StartServerSide(api); | ||
AssetLocation sound = new AssetLocation("here", "sounds/partyhorn"); | AssetLocation sound = new AssetLocation("here", "sounds/partyhorn"); | ||
api. | api.ChatCommands.Create("here") | ||
.WithDescription("spawns particles around the player") | |||
.RequiresPrivilege(Privilege.chat) | |||
.RequiresPlayer() | |||
.HandleWith((args) => | |||
{ | |||
var byEntity = args.Caller.Entity; | |||
byEntity.World.PlaySoundAt(sound, byEntity); | |||
Vec3d pos = byEntity.Pos.XYZ.Add(0, byEntity.LocalEyePos.Y, 0); | |||
Random rand = new Random(); | |||
for (int i = 0; i < 100; i++) | |||
{ | |||
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.ToRgba(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); | |||
} | |||
return TextCommandResult.Success(); | |||
}); | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<!--T:15--> | |||
If you want to learn more about how to use particles you can check out this [[Simple Particles|tutorial]]. | If you want to learn more about how to use particles you can check out this [[Simple Particles|tutorial]]. | ||
== Testing == | == Testing == <!--T:16--> | ||
<!--T:17--> | |||
Finally, we are ready to run our first test: | Finally, we are ready to run our first test: | ||
<!--T:18--> | |||
<youtube>XjHMtl6rSF4</youtube> | <youtube>XjHMtl6rSF4</youtube> | ||
</translate> | |||
{{Navbox/codemodding}} | |||