<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.play.eco/en/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Thetestgame</id>
	<title>Eco - English Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.play.eco/en/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Thetestgame"/>
	<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/Special:Contributions/Thetestgame"/>
	<updated>2026-06-04T00:26:38Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=Tutorial:_Ceiling_Fan_Light&amp;diff=8609</id>
		<title>Tutorial: Ceiling Fan Light</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=Tutorial:_Ceiling_Fan_Light&amp;diff=8609"/>
		<updated>2022-05-29T03:20:15Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an introduction tutorial to help teach through practice, it covers:&lt;br /&gt;
*Setting up lights that play well with both Global Illumination&lt;br /&gt;
*Creating a server item/object based on an existing server item&lt;br /&gt;
*Custom interactions and interaction tooltips&lt;br /&gt;
*Using WorldObject.AnimationState to trigger both UnityEvents and Animator events&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(Thank to Phlo for donating the model for this tutorial!)&lt;br /&gt;
&lt;br /&gt;
[[File:Tutorial-_Ceiling_Fan_Light.gif|frameless|686x686px]]&lt;br /&gt;
&lt;br /&gt;
Install Unity &amp;amp; Eco ModKit [[Installation]] then start a new Unity project and add the [https://github.com/StrangeLoopGames/EcoModKit/raw/master/TutorialStart.unitypackage Tutorial Start Files]&lt;br /&gt;
&lt;br /&gt;
I usually copy and modify the Template scene by:&lt;br /&gt;
*opening Assets/EcoModKit/TemplateScene&lt;br /&gt;
*created a new folder Assets/Tutorial&lt;br /&gt;
*File-&amp;gt;Save Scene As -&amp;gt; Assets/Tutorial/Tutorial.unity&lt;br /&gt;
====Setting up the Icon====&lt;br /&gt;
*Create an icon in an image editing program (either draw one or take a screenshot of your model once it&#039;s done)&lt;br /&gt;
*Select the icon file in unity and in the inspector tab change &amp;quot;Texture Type&amp;quot; to &amp;quot;Sprite (2D and UI)&amp;quot; then hit Apply at the bottom of the inspector tab.&lt;br /&gt;
*Select the Items transform in the Hierarchy tab and enable it by checking the box top-left in the Inspector tab&lt;br /&gt;
*If you can&#039;t see anything in the scene view Double click on Items in the Hierarchy tab to focus [More Scene Navigation Help](https://docs.unity3d.com/2017.3/Documentation/Manual/SceneViewNavigation.html) [[File:CeilingFanTutorial_-_Icon_Setup.gif|none|frame]]Assign the Icon and fix the color tint:&lt;br /&gt;
*Renamed SampleItem to CeilingFanItem and deleted SampleItem2&lt;br /&gt;
====Initial Object Setup====&lt;br /&gt;
*Select the Objects transform in the Hierarchy tab and enable it by checking the box top-left in the Inspector tab&lt;br /&gt;
**If you can&#039;t see anything in the scene view Double click on Objects in the Hierarchy tab to focus [More Scene Navigation Help](https://docs.unity3d.com/2017.3/Documentation/Manual/SceneViewNavigation.html[[File:CeilingFanTutorial_-_Rename_and_Parent.gif|none|frame]]I renamed SampleObject to CeilingFanObject then dragged the model to set it as a child (Note I misspelled CeilingFanObject here and had to go back and fix it later. Don&#039;t do that, spelling matters 😅)&lt;br /&gt;
*The SampleObject Cube is already aligned to game voxels, so we want the base to align with the top [[File:CeilingFanTutorial_-_Align_Fan_mount.gif|none|frame]]&lt;br /&gt;
*In this example We&#039;re not using the renderer on the root CeilingFanObject so I removed it along with the Cube collider.&lt;br /&gt;
*Select the materials used by the object and ensure the Shader is set to &amp;quot;Curved/Standard&amp;quot;&lt;br /&gt;
====Building the first test bundle====&lt;br /&gt;
*Lets go ahead and run the first test at this point&lt;br /&gt;
*Do a Menu File -&amp;gt; Save Project to ensure misc things like material changes get saved.&lt;br /&gt;
*Then Menu ModKit -&amp;gt; Build Current Bundle&lt;br /&gt;
**Browse to your server folder then create a new folder under Mods, I used Mods/Tutorial and saved as tutorial.unity3d&lt;br /&gt;
**The top level transforms will automatically get deactivated every time you build bundles. (This is required for our mod system and it&#039;s easy to forget to do this so it&#039;s now automated)&lt;br /&gt;
====Initial Server Setup====&lt;br /&gt;
*The CeilingFan seems pretty similar to an ElectricWallLamp so I copied Mods/AutoGen/WorldObject/ElectricWallLamp.cs to Mods/Tutorial/CeilingFan.cs&lt;br /&gt;
*Then did a search and replace of &amp;quot;ElectricWallLamp&amp;quot; with &amp;quot;CeilingFan&amp;quot; and &amp;quot;Electric Wall Lamp&amp;quot; with &amp;quot;Ceiling Fan&amp;quot; in Mods/Tutorial/CeilingFan.cs&lt;br /&gt;
*Start the server and connect to it&lt;br /&gt;
*Within the ServerUI go to the ModKit tab and set LiveUpdateUnityFiles to true (so we don&#039;t have to restart the server if we reexport the bundle)&lt;br /&gt;
*Also make sure you&#039;re set as an Admin the Users tab&lt;br /&gt;
*Connect and give yourself a CeilingFan and power source with&lt;br /&gt;
**/give CeilingFan&lt;br /&gt;
**/give WindTurbine (if you don&#039;t have a power source &amp;amp; place nearby)&lt;br /&gt;
*Place the Ceiling Fan, it should appear but not do anything yet&lt;br /&gt;
====Server Code Environment Setup (optional)====&lt;br /&gt;
*You can use any text editor to edit the server scripts but if you plan on getting into it I&#039;d highly recommend getting&lt;br /&gt;
**Syntax highlighting - [Visual Studio Community](https://www.visualstudio.com/downloads/)&lt;br /&gt;
**Code Completion - For this tutorial I tried using [Pradoxzon&#039;s DumpDlls](https://pradoxzon.squarespace.com/eco-mods/dumpdlls/) which worked very nicely.&lt;br /&gt;
=====Customizing Server Code=====&lt;br /&gt;
*To make things interesting, lets have 2 switches for the fan.&lt;br /&gt;
*Delete the line `[RequireComponent(typeof(OnOffComponent))]` (one switch is boring!)&lt;br /&gt;
*Here is the modified CeilingFanObject code with comments included where something changed&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
    public partial class CeilingFanObject : WorldObject&lt;br /&gt;
    {&lt;br /&gt;
        // Added FanOn and LightOn so we have 2 switches &lt;br /&gt;
        // which will get saved thanks to the Serialized attribute&lt;br /&gt;
        [Serialized] public bool FanOn = true;&lt;br /&gt;
        [Serialized] public bool LightOn = true;&lt;br /&gt;
        public override string FriendlyName { get { return &amp;quot;Celing Fan&amp;quot;; } } &lt;br /&gt;
&lt;br /&gt;
        protected override void Initialize()&lt;br /&gt;
        {&lt;br /&gt;
            this.GetComponent&amp;lt;MinimapComponent&amp;gt;().Initialize(&amp;quot;Lights&amp;quot;);&lt;br /&gt;
            // Added custom power consumption&lt;br /&gt;
            this.InitPowerConsumption();&lt;br /&gt;
            this.GetComponent&amp;lt;PowerGridComponent&amp;gt;().Initialize(10, new ElectricPower());        &lt;br /&gt;
            this.GetComponent&amp;lt;HousingComponent&amp;gt;().Set(CeilingFanItem.HousingVal);                                &lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Added this to change power consumed based on if the light &amp;amp; fan are enabled&lt;br /&gt;
        public void InitPowerConsumption()&lt;br /&gt;
        {&lt;br /&gt;
            float power = 0f;&lt;br /&gt;
            if (FanOn)&lt;br /&gt;
                power += 50f;&lt;br /&gt;
            if (LightOn)&lt;br /&gt;
                power += 50f;&lt;br /&gt;
&lt;br /&gt;
            this.GetComponent&amp;lt;PowerConsumptionComponent&amp;gt;().Initialize(power); &lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // We will be sending the server &amp;quot;Fan&amp;quot; and &amp;quot;Light&amp;quot; when their switches&lt;br /&gt;
        // are right clicked, also update the power consumed when switches are toggled&lt;br /&gt;
        public override InteractResult OnActRight(InteractionContext context)&lt;br /&gt;
        {&lt;br /&gt;
            if (context.Parameters != null &amp;amp;&amp;amp; context.Parameters.ContainsKey(&amp;quot;Fan&amp;quot;))&lt;br /&gt;
            {&lt;br /&gt;
                FanOn = !FanOn;&lt;br /&gt;
                this.InitPowerConsumption();&lt;br /&gt;
                return InteractResult.Success;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if (context.Parameters != null &amp;amp;&amp;amp; context.Parameters.ContainsKey(&amp;quot;Light&amp;quot;))&lt;br /&gt;
            {&lt;br /&gt;
                LightOn = !LightOn;&lt;br /&gt;
                this.InitPowerConsumption();&lt;br /&gt;
                return InteractResult.Success;&lt;br /&gt;
            }&lt;br /&gt;
            return InteractResult.NoOp;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Finally we send the Fan &amp;amp; Light states to clients using Animated States&lt;br /&gt;
        // Operating indicates that room/power requirements are fulfilled&lt;br /&gt;
        public override void Tick()&lt;br /&gt;
        {&lt;br /&gt;
            base.Tick();&lt;br /&gt;
            SetAnimatedState(&amp;quot;Fan&amp;quot;, this.Operating &amp;amp;&amp;amp; FanOn);&lt;br /&gt;
            SetAnimatedState(&amp;quot;Light&amp;quot;, this.Operating &amp;amp;&amp;amp; LightOn);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*For bonus points you might want to vary the Housing value based on Fan/Light states&lt;br /&gt;
*You need to restart the server so these code changes take effect, might as well do that now&lt;br /&gt;
=====Sending Custom Interactions=====&lt;br /&gt;
*Back in Unity I added 2 chains for switches and changed their colliders to be triggers so you can walk through them. (just using cylinders/spheres for this example)&lt;br /&gt;
[[File:CeilingFanTutorial_-_Programmer_art_switches.png|none|frame]]Back in Unity I added 2 chains for switches and changed their colliders to be triggers so you can walk through them. (just using cylinders/spheres for this example)&lt;br /&gt;
*On the chains add a SpecificInteractable component using the same strings from the server code. Now interacting with these colliders will send those strings to the server to toggle light/fan state. Also add a CustomControlName component to display which interactions work and what each switch does. Set one to &amp;quot;Light&amp;quot; and the other &amp;quot;Fan&amp;quot; [[File:CeilingFanTutorial - Interaction setup light.png|none|frame]]&lt;br /&gt;
====Animating Rotation (Animation Controller)====&lt;br /&gt;
*There are many ways to accomplish things in unity. For the fan rotation we could use a tween script, import an animation from a modeling program or make our own animation in unity. In this case we will make one in unity and use an animation controller to demonstrate how to work with animation controllers.&lt;br /&gt;
*Setting up the Animator&lt;br /&gt;
**Select the CeilingLamp file in the Project tab and in the Inspector tab click &amp;quot;Rig&amp;quot; and change Animation Type to Generic then hit Apply. This will create an Avatar as a child of the model.&lt;br /&gt;
**In the Project tab right click in the files area and do Create -&amp;gt; AnimationController&lt;br /&gt;
**Select the CeilingLamp in the Hierarchy tab and add a Animator component if it doesn&#039;t already have one. Then assign the Avatar from the model and drag the new animation controller into the controller slot.&lt;br /&gt;
[[File:CeilingFanTutorial - Animation controller setup.gif|none|frame]]&lt;br /&gt;
*Creating a Rotation Animation&lt;br /&gt;
**Create a new animation by opening the Animation window and creating a new clip while the CeilingLamp is selected.&lt;br /&gt;
**Hit record and then rotating the fan automatically adds the rotation to the clip, then we set the end of the clip to 360 so the fan completes a rotation. You can adjust animation curves for finer control of the motion.&lt;br /&gt;
[[File:CeilingFanTutorial - Animation controller setup 2.gif|none|frame]]&lt;br /&gt;
*Animation Controller Setup&lt;br /&gt;
**Double click on the animation controller to open the editor. Notice the animation clip we just created is already included.&lt;br /&gt;
**Right click in the grid area and Create State -&amp;gt; Empty then rename it to Off. This will be our off state so it doesn&#039;t need an animation.&lt;br /&gt;
**Make transitions between the on/off states and add a parameter named &#039;Fan&#039; (This name must match the AnimationState name defined on the server, the WorldObject script will automatically keep it in sync with the server variable)&lt;br /&gt;
[[File:CeilingFanTutorial - Animation controller setup 3.gif|none|frame]]&lt;br /&gt;
*You can test the Fan with ModKit -&amp;gt; Build Current Bundle then reconnect to the server. The Fan switch should work now!&lt;br /&gt;
====Animating Lighting (Unity Events)====&lt;br /&gt;
*Material Swapping&lt;br /&gt;
**The model uses an emission texture that covers the light emitting area. One efficient way to make the light toggle on/off is to create a duplicate material with the emission turned off.&lt;br /&gt;
**We will also assign the off material to the light so it doesn&#039;t flicker on -&amp;gt; off when placing.&lt;br /&gt;
**(note you need to set smoothness on the lit materal to 0 after 0.7.4)&lt;br /&gt;
[[File:CeilingFanTutorial - ObjectSetupLight1.gif|none|frame]]&lt;br /&gt;
*Unity Event Setup&lt;br /&gt;
**We will be syncing the light by creating a new boolean state event named &amp;quot;Light&amp;quot; (matches the AnimationState set by the server script)&lt;br /&gt;
**Swap materials by dragging &amp;quot;Ceiling Fan Support&amp;quot; (which contains the light portion) into the Enabled/Disabled event slots and then selecting to override Renderer.sharedMaterial with our On/Off materials.&lt;br /&gt;
[[File:CeilingFanTutorial - ObjectSetupLight2.gif|none|frame]]&lt;br /&gt;
*Light &amp;amp; Global Illumination Setup&lt;br /&gt;
**Create a Point Light and add the EcoLight script, this enables the point light when GI is disabled&lt;br /&gt;
**Create a Sphere, assign it to layer &amp;quot;OnlyGI&amp;quot; and remove its collider&lt;br /&gt;
**Create a new material with a high emission property and assign it to the sphere. Also make sure it uses the curved/standard shader. (not shown in this gif)&lt;br /&gt;
[[File:CeilingFanTutorial - ObjectSetupLight3.gif|none|frame]]&lt;br /&gt;
*Unity Event Setup&lt;br /&gt;
**Disable the Light transform which contains our Point/GI lights so we don&#039;t get flickering if it spawns turned off&lt;br /&gt;
**Create a new entry in the Light boolean state event Changed event and set it to call GameObject.SetActive(bool) on our lights.&lt;br /&gt;
[[File:CeilingFanTutorial - ObjectSetupLight4.gif|none|frame]]&lt;br /&gt;
*You can test the Fan with ModKit -&amp;gt; Build Current Bundle then reconnect to the server. The fan should be fully functional! [https://github.com/StrangeLoopGames/EcoModKit/raw/master/Tutorial.unitypackage Completed Tutorial Download]&lt;br /&gt;
[[Category:Modding]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=Tutorial:_Ceiling_Fan_Light&amp;diff=8608</id>
		<title>Tutorial: Ceiling Fan Light</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=Tutorial:_Ceiling_Fan_Light&amp;diff=8608"/>
		<updated>2022-05-28T21:56:10Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: Initial port from EcoModkit wiki&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an introduction tutorial to help teach through practice, it covers:&lt;br /&gt;
*Setting up lights that play well with both Global Illumination&lt;br /&gt;
*Creating a server item/object based on an existing server item&lt;br /&gt;
*Custom interactions and interaction tooltips&lt;br /&gt;
*Using WorldObject.AnimationState to trigger both UnityEvents and Animator events&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(Thank to Phlo for donating the model for this tutorial!)&lt;br /&gt;
&lt;br /&gt;
[[File:Tutorial-_Ceiling_Fan_Light.gif|frameless|686x686px]]&lt;br /&gt;
&lt;br /&gt;
Install Unity &amp;amp; Eco ModKit [[Installation]] then start a new Unity project and add the [https://github.com/StrangeLoopGames/EcoModKit/raw/master/TutorialStart.unitypackage Tutorial Start Files]&lt;br /&gt;
&lt;br /&gt;
I usually copy and modify the Template scene by:&lt;br /&gt;
*opening Assets/EcoModKit/TemplateScene&lt;br /&gt;
*created a new folder Assets/Tutorial&lt;br /&gt;
*File-&amp;gt;Save Scene As -&amp;gt; Assets/Tutorial/Tutorial.unity&lt;br /&gt;
====Setting up the Icon====&lt;br /&gt;
*Create an icon in an image editing program (either draw one or take a screenshot of your model once it&#039;s done)&lt;br /&gt;
*Select the icon file in unity and in the inspector tab change &amp;quot;Texture Type&amp;quot; to &amp;quot;Sprite (2D and UI)&amp;quot; then hit Apply at the bottom of the inspector tab.&lt;br /&gt;
*Select the Items transform in the Hierarchy tab and enable it by checking the box top-left in the Inspector tab&lt;br /&gt;
*If you can&#039;t see anything in the scene view Double click on Items in the Hierarchy tab to focus [More Scene Navigation Help](https://docs.unity3d.com/2017.3/Documentation/Manual/SceneViewNavigation.html) [[File:CeilingFanTutorial_-_Icon_Setup.gif|none|frame]]Assign the Icon and fix the color tint:&lt;br /&gt;
*Renamed SampleItem to CeilingFanItem and deleted SampleItem2&lt;br /&gt;
====Initial Object Setup====&lt;br /&gt;
*Select the Objects transform in the Hierarchy tab and enable it by checking the box top-left in the Inspector tab&lt;br /&gt;
**If you can&#039;t see anything in the scene view Double click on Objects in the Hierarchy tab to focus [More Scene Navigation Help](https://docs.unity3d.com/2017.3/Documentation/Manual/SceneViewNavigation.html[[File:CeilingFanTutorial_-_Rename_and_Parent.gif|none|frame]]I renamed SampleObject to CeilingFanObject then dragged the model to set it as a child (Note I misspelled CeilingFanObject here and had to go back and fix it later. Don&#039;t do that, spelling matters 😅)&lt;br /&gt;
*The SampleObject Cube is already aligned to game voxels, so we want the base to align with the top [[File:CeilingFanTutorial_-_Align_Fan_mount.gif|none|frame]]&lt;br /&gt;
*In this example We&#039;re not using the renderer on the root CeilingFanObject so I removed it along with the Cube collider.&lt;br /&gt;
*Select the materials used by the object and ensure the Shader is set to &amp;quot;Curved/Standard&amp;quot;&lt;br /&gt;
====Building the first test bundle====&lt;br /&gt;
*Lets go ahead and run the first test at this point&lt;br /&gt;
*Do a Menu File -&amp;gt; Save Project to ensure misc things like material changes get saved.&lt;br /&gt;
*Then Menu ModKit -&amp;gt; Build Current Bundle&lt;br /&gt;
**Browse to your server folder then create a new folder under Mods, I used Mods/Tutorial and saved as tutorial.unity3d&lt;br /&gt;
**The top level transforms will automatically get deactivated every time you build bundles. (This is required for our mod system and it&#039;s easy to forget to do this so it&#039;s now automated)&lt;br /&gt;
====Initial Server Setup====&lt;br /&gt;
*The CeilingFan seems pretty similar to an ElectricWallLamp so I copied Mods/AutoGen/WorldObject/ElectricWallLamp.cs to Mods/Tutorial/CeilingFan.cs&lt;br /&gt;
*Then did a search and replace of &amp;quot;ElectricWallLamp&amp;quot; with &amp;quot;CeilingFan&amp;quot; and &amp;quot;Electric Wall Lamp&amp;quot; with &amp;quot;Ceiling Fan&amp;quot; in Mods/Tutorial/CeilingFan.cs&lt;br /&gt;
*Start the server and connect to it&lt;br /&gt;
*Within the ServerUI go to the ModKit tab and set LiveUpdateUnityFiles to true (so we don&#039;t have to restart the server if we reexport the bundle)&lt;br /&gt;
*Also make sure you&#039;re set as an Admin the Users tab&lt;br /&gt;
*Connect and give yourself a CeilingFan and power source with&lt;br /&gt;
**/give CeilingFan&lt;br /&gt;
**/give WindTurbine (if you don&#039;t have a power source &amp;amp; place nearby)&lt;br /&gt;
*Place the Ceiling Fan, it should appear but not do anything yet&lt;br /&gt;
====Server Code Environment Setup (optional)====&lt;br /&gt;
*You can use any text editor to edit the server scripts but if you plan on getting into it I&#039;d highly recommend getting&lt;br /&gt;
**Syntax highlighting - [Visual Studio Community](https://www.visualstudio.com/downloads/)&lt;br /&gt;
**Code Completion - For this tutorial I tried using [Pradoxzon&#039;s DumpDlls](https://pradoxzon.squarespace.com/eco-mods/dumpdlls/) which worked very nicely.&lt;br /&gt;
=====Customizing Server Code=====&lt;br /&gt;
*To make things interesting, lets have 2 switches for the fan.&lt;br /&gt;
*Delete the line `[RequireComponent(typeof(OnOffComponent))]` (one switch is boring!)&lt;br /&gt;
*Here is the modified CeilingFanObject code with comments included where something changed&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
    public partial class CeilingFanObject : WorldObject&lt;br /&gt;
    {&lt;br /&gt;
        // Added FanOn and LightOn so we have 2 switches &lt;br /&gt;
        // which will get saved thanks to the Serialized attribute&lt;br /&gt;
        [Serialized] public bool FanOn = true;&lt;br /&gt;
        [Serialized] public bool LightOn = true;&lt;br /&gt;
        public override string FriendlyName { get { return &amp;quot;Celing Fan&amp;quot;; } } &lt;br /&gt;
&lt;br /&gt;
        protected override void Initialize()&lt;br /&gt;
        {&lt;br /&gt;
            this.GetComponent&amp;lt;MinimapComponent&amp;gt;().Initialize(&amp;quot;Lights&amp;quot;);&lt;br /&gt;
            // Added custom power consumption&lt;br /&gt;
            this.InitPowerConsumption();&lt;br /&gt;
            this.GetComponent&amp;lt;PowerGridComponent&amp;gt;().Initialize(10, new ElectricPower());        &lt;br /&gt;
            this.GetComponent&amp;lt;HousingComponent&amp;gt;().Set(CeilingFanItem.HousingVal);                                &lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Added this to change power consumed based on if the light &amp;amp; fan are enabled&lt;br /&gt;
        public void InitPowerConsumption()&lt;br /&gt;
        {&lt;br /&gt;
            float power = 0f;&lt;br /&gt;
            if (FanOn)&lt;br /&gt;
                power += 50f;&lt;br /&gt;
            if (LightOn)&lt;br /&gt;
                power += 50f;&lt;br /&gt;
&lt;br /&gt;
            this.GetComponent&amp;lt;PowerConsumptionComponent&amp;gt;().Initialize(power); &lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // We will be sending the server &amp;quot;Fan&amp;quot; and &amp;quot;Light&amp;quot; when their switches&lt;br /&gt;
        // are right clicked, also update the power consumed when switches are toggled&lt;br /&gt;
        public override InteractResult OnActRight(InteractionContext context)&lt;br /&gt;
        {&lt;br /&gt;
            if (context.Parameters != null &amp;amp;&amp;amp; context.Parameters.ContainsKey(&amp;quot;Fan&amp;quot;))&lt;br /&gt;
            {&lt;br /&gt;
                FanOn = !FanOn;&lt;br /&gt;
                this.InitPowerConsumption();&lt;br /&gt;
                return InteractResult.Success;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if (context.Parameters != null &amp;amp;&amp;amp; context.Parameters.ContainsKey(&amp;quot;Light&amp;quot;))&lt;br /&gt;
            {&lt;br /&gt;
                LightOn = !LightOn;&lt;br /&gt;
                this.InitPowerConsumption();&lt;br /&gt;
                return InteractResult.Success;&lt;br /&gt;
            }&lt;br /&gt;
            return InteractResult.NoOp;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Finally we send the Fan &amp;amp; Light states to clients using Animated States&lt;br /&gt;
        // Operating indicates that room/power requirements are fulfilled&lt;br /&gt;
        public override void Tick()&lt;br /&gt;
        {&lt;br /&gt;
            base.Tick();&lt;br /&gt;
            SetAnimatedState(&amp;quot;Fan&amp;quot;, this.Operating &amp;amp;&amp;amp; FanOn);&lt;br /&gt;
            SetAnimatedState(&amp;quot;Light&amp;quot;, this.Operating &amp;amp;&amp;amp; LightOn);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*For bonus points you might want to vary the Housing value based on Fan/Light states&lt;br /&gt;
*You need to restart the server so these code changes take effect, might as well do that now&lt;br /&gt;
=====Sending Custom Interactions=====&lt;br /&gt;
*Back in Unity I added 2 chains for switches and changed their colliders to be triggers so you can walk through them. (just using cylinders/spheres for this example)&lt;br /&gt;
[[File:CeilingFanTutorial_-_Programmer_art_switches.png|none|frame]]Back in Unity I added 2 chains for switches and changed their colliders to be triggers so you can walk through them. (just using cylinders/spheres for this example)&lt;br /&gt;
*On the chains add a SpecificInteractable component using the same strings from the server code. Now interacting with these colliders will send those strings to the server to toggle light/fan state. Also add a CustomControlName component to display which interactions work and what each switch does. Set one to &amp;quot;Light&amp;quot; and the other &amp;quot;Fan&amp;quot; [[File:CeilingFanTutorial - Interaction setup light.png|none|frame]]&lt;br /&gt;
====Animating Rotation (Animation Controller)====&lt;br /&gt;
*There are many ways to accomplish things in unity. For the fan rotation we could use a tween script, import an animation from a modeling program or make our own animation in unity. In this case we will make one in unity and use an animation controller to demonstrate how to work with animation controllers.&lt;br /&gt;
*Setting up the Animator&lt;br /&gt;
**Select the CeilingLamp file in the Project tab and in the Inspector tab click &amp;quot;Rig&amp;quot; and change Animation Type to Generic then hit Apply. This will create an Avatar as a child of the model.&lt;br /&gt;
**In the Project tab right click in the files area and do Create -&amp;gt; AnimationController&lt;br /&gt;
**Select the CeilingLamp in the Hierarchy tab and add a Animator component if it doesn&#039;t already have one. Then assign the Avatar from the model and drag the new animation controller into the controller slot.&lt;br /&gt;
[[File:CeilingFanTutorial - Animation controller setup.gif|none|frame]]&lt;br /&gt;
*Creating a Rotation Animation&lt;br /&gt;
**Create a new animation by opening the Animation window and creating a new clip while the CeilingLamp is selected.&lt;br /&gt;
**Hit record and then rotating the fan automatically adds the rotation to the clip, then we set the end of the clip to 360 so the fan completes a rotation. You can adjust animation curves for finer control of the motion.&lt;br /&gt;
[[File:CeilingFanTutorial - Animation controller setup 2.gif|none|frame]]&lt;br /&gt;
*Animation Controller Setup&lt;br /&gt;
**Double click on the animation controller to open the editor. Notice the animation clip we just created is already included.&lt;br /&gt;
**Right click in the grid area and Create State -&amp;gt; Empty then rename it to Off. This will be our off state so it doesn&#039;t need an animation.&lt;br /&gt;
**Make transitions between the on/off states and add a parameter named &#039;Fan&#039; (This name must match the AnimationState name defined on the server, the WorldObject script will automatically keep it in sync with the server variable)&lt;br /&gt;
[[File:CeilingFanTutorial - Animation controller setup 3.gif|none|frame]]&lt;br /&gt;
*You can test the Fan with ModKit -&amp;gt; Build Current Bundle then reconnect to the server. The Fan switch should work now!&lt;br /&gt;
====Animating Lighting (Unity Events)====&lt;br /&gt;
*Material Swapping&lt;br /&gt;
**The model uses an emission texture that covers the light emitting area. One efficient way to make the light toggle on/off is to create a duplicate material with the emission turned off.&lt;br /&gt;
**We will also assign the off material to the light so it doesn&#039;t flicker on -&amp;gt; off when placing.&lt;br /&gt;
**(note you need to set smoothness on the lit materal to 0 after 0.7.4)&lt;br /&gt;
[[File:CeilingFanTutorial - ObjectSetupLight1.gif|none|frame]]&lt;br /&gt;
*Unity Event Setup&lt;br /&gt;
**We will be syncing the light by creating a new boolean state event named &amp;quot;Light&amp;quot; (matches the AnimationState set by the server script)&lt;br /&gt;
**Swap materials by dragging &amp;quot;Ceiling Fan Support&amp;quot; (which contains the light portion) into the Enabled/Disabled event slots and then selecting to override Renderer.sharedMaterial with our On/Off materials.&lt;br /&gt;
[[File:CeilingFanTutorial - ObjectSetupLight2.gif|none|frame]]&lt;br /&gt;
*Light &amp;amp; Global Illumination Setup&lt;br /&gt;
**Create a Point Light and add the EcoLight script, this enables the point light when GI is disabled&lt;br /&gt;
**Create a Sphere, assign it to layer &amp;quot;OnlyGI&amp;quot; and remove its collider&lt;br /&gt;
**Create a new material with a high emission property and assign it to the sphere. Also make sure it uses the curved/standard shader. (not shown in this gif)&lt;br /&gt;
[[File:CeilingFanTutorial - ObjectSetupLight3.gif|none|frame]]&lt;br /&gt;
*Unity Event Setup&lt;br /&gt;
**Disable the Light transform which contains our Point/GI lights so we don&#039;t get flickering if it spawns turned off&lt;br /&gt;
**Create a new entry in the Light boolean state event Changed event and set it to call GameObject.SetActive(bool) on our lights.&lt;br /&gt;
[[File:CeilingFanTutorial - ObjectSetupLight4.gif|none|frame]]&lt;br /&gt;
*You can test the Fan with ModKit -&amp;gt; Build Current Bundle then reconnect to the server. The fan should be fully functional! [https://github.com/StrangeLoopGames/EcoModKit/raw/master/Tutorial.unitypackage Completed Tutorial Download]&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=Custom_Sign_Images&amp;diff=7809</id>
		<title>Custom Sign Images</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=Custom_Sign_Images&amp;diff=7809"/>
		<updated>2022-01-13T02:20:17Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: Added warning about long names&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Starting with Eco 9.4.5 it is now possible to add image assets to Eco without the use of code for use on Signs or other text inputs that accept the &#039;&#039;&#039;&amp;lt;ecoicon&amp;gt;&#039;&#039;&#039; tag. &lt;br /&gt;
== Adding a Custom Image ==&lt;br /&gt;
To add a custom image to Eco. Create a blank new client Modkit project and open the default modkit scene template. Create a new GameObject under the Items root GameObject. Similar to items there are naming rules that must be followed when creating this object. It should match &amp;quot;[YourUsageName]Image&amp;quot; In this example we are going to add LogoPlanetImage which will appear in game under &amp;quot;LogoPlanet&amp;quot;.&lt;br /&gt;
[[File:LogoPlanetImage-SignTutorial.png|none|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Inside this GameObject you should have an Image component that contains your prepared sprite Image you&#039;d like to add. In our case this contains the Eco planet logo. For best results try and keep your image file names short and ideally matching the name of the GameObject. A name that is too long may fail to load and show as plain text instead of the intended image.&lt;br /&gt;
[[File:ExampleImage-SignTutorial.png|none|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
From here you assign your scene tag and publish the Modkit bundle as normal.&lt;br /&gt;
== Using the Custom Image ==&lt;br /&gt;
To use your new image in game use the ecoicon tag with the name attribute containing the name of your new image GameObject. In our case that is &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ecoicon name=&amp;quot;LogoPlanet&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The image will then try and automatically fill the available space. Note our example image is low resolution. You can use high resolution images for better quality.&lt;br /&gt;
[[File:SignExample-SignTutorial.png|none|thumb]]&lt;br /&gt;
== Tips for usability ==&lt;br /&gt;
This section outlines some easy to follow steps to make your custom images easy to use.&lt;br /&gt;
=== Easy to type names ===&lt;br /&gt;
If the images are intended to be used by everyone on the server try and come up with easy to remember and short names. No one enjoys typing out lengthy HTML code in their signs. Keeping it short makes it easier for people to remember their favorite images without having to constantly look it up.&lt;br /&gt;
=== Reference Page ===&lt;br /&gt;
To make sure your server knows what images are available for easy public use consider adding a custom Ecopedia page with all the available images and possibly a sample tag for displaying them on signs. This can be achieved by following the documentation available [[Ecopedia Modding|here]] about custom Ecopedia pages.&lt;br /&gt;
[[Category:Modding]]&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=Custom_Fonts&amp;diff=7747</id>
		<title>Custom Fonts</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=Custom_Fonts&amp;diff=7747"/>
		<updated>2021-09-13T23:40:56Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: Created page with &amp;quot;Starting in Eco 9.5 you can add custom fonts to the game using the new &amp;#039;&amp;#039;&amp;#039;FontContainer&amp;#039;&amp;#039;&amp;#039; object inside the Eco Modkit. These fonts can be used almost anywhere in Eco that ac...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Starting in Eco 9.5 you can add custom fonts to the game using the new &#039;&#039;&#039;FontContainer&#039;&#039;&#039; object inside the Eco Modkit. These fonts can be used almost anywhere in Eco that accepts text. Signs, Ecopedia, Tooltips, ect.&lt;br /&gt;
&lt;br /&gt;
== Adding a Custom Font ==&lt;br /&gt;
To add a custom font create a new &amp;quot;Fonts&amp;quot; GameObject in your mod scene and attach the &#039;&#039;&#039;FontContainer&#039;&#039;&#039; component to it. Inside this component there is a list of &amp;quot;Registered Fonts&amp;quot;. You can attach any valid Font Unity accepts to this list. In this example I will add the Clip font. The mod made in this example can be found [https://github.com/StrangeLoopGames/EcoModKit/tree/master/Examples/SignImages/Client here] for reference.&lt;br /&gt;
&lt;br /&gt;
[[File:FontContainer Example.png|none|thumb|554x554px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The rest of the process is the same as any other mod. Create and build your asset bundle and load it up into Eco. There is no code requirements for adding custom fonts to Eco. To demo how to use your new font place a sign and enter the &amp;lt;pre&amp;gt;&amp;lt;font=&amp;quot;nameofyourfont&amp;quot;&amp;gt;Testing&amp;lt;nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;. In the case of the example the final text should be &amp;lt;pre&amp;gt;&amp;lt;font=&amp;quot;Clip&amp;quot;&amp;gt;Testing&amp;lt;nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;. This will result in the following being displayed on the sign.&lt;br /&gt;
&lt;br /&gt;
[[File:FontSignExample.png|none|thumb|620x620px]]&lt;br /&gt;
[[Category:Modding]]&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=Custom_Sign_Images&amp;diff=7597</id>
		<title>Custom Sign Images</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=Custom_Sign_Images&amp;diff=7597"/>
		<updated>2021-08-06T18:03:48Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Starting with Eco 9.5 it is now possible to add image assets to Eco without the use of code for use on Signs or other text inputs that accept the &#039;&#039;&#039;&amp;lt;ecoicon&amp;gt;&#039;&#039;&#039; tag. &lt;br /&gt;
&lt;br /&gt;
== Adding a Custom Image ==&lt;br /&gt;
To add a custom image to Eco. Create a blank new client Modkit project and open the default modkit scene template. Create a new GameObject under the Items root GameObject. Similar to items there are naming rules that must be followed when creating this object. It should match &amp;quot;[YourUsageName]Image&amp;quot; In this example we are going to add LogoPlanetImage which will appear in game under &amp;quot;LogoPlanet&amp;quot;.&lt;br /&gt;
[[File:LogoPlanetImage-SignTutorial.png|none|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Inside this GameObject you should have an Image component that contains your prepared sprite Image you&#039;d like to add. In our case this contains the Eco planet logo.&lt;br /&gt;
[[File:ExampleImage-SignTutorial.png|none|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
From here you assign your scene tag and publish the Modkit bundle as normal.&lt;br /&gt;
&lt;br /&gt;
== Using the Custom Image ==&lt;br /&gt;
To use your new image in game use the ecoicon tag with the name attribute containing the name of your new image GameObject. In our case that is &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ecoicon name=&amp;quot;LogoPlanet&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The image will then try and automatically fill the available space. Note our example image is low resolution. You can use high resolution images for better quality.&lt;br /&gt;
[[File:SignExample-SignTutorial.png|none|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Tips for usability ==&lt;br /&gt;
This section outlines some easy to follow steps to make your custom images easy to use.&lt;br /&gt;
&lt;br /&gt;
=== Easy to type names ===&lt;br /&gt;
If the images are intended to be used by everyone on the server try and come up with easy to remember and short names. No one enjoys typing out lengthy HTML code in their signs. Keeping it short makes it easier for people to remember their favorite images without having to constantly look it up.&lt;br /&gt;
&lt;br /&gt;
=== Reference Page ===&lt;br /&gt;
To make sure your server knows what images are available for easy public use consider adding a custom Ecopedia page with all the available images and possibly a sample tag for displaying them on signs. This can be achieved by following the documentation available [[Ecopedia modding|here]] about custom Ecopedia pages.&lt;br /&gt;
[[Category:Modding]]&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=Custom_Sign_Images&amp;diff=7596</id>
		<title>Custom Sign Images</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=Custom_Sign_Images&amp;diff=7596"/>
		<updated>2021-08-05T20:41:57Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: Created page with &amp;quot;Starting with Eco 9.5 it is now possible to add image assets to Eco without the use of code for use on Signs or other text inputs that accept the &amp;#039;&amp;#039;&amp;#039;&amp;lt;ecoicon&amp;gt;&amp;#039;&amp;#039;&amp;#039; tag.   == Add...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Starting with Eco 9.5 it is now possible to add image assets to Eco without the use of code for use on Signs or other text inputs that accept the &#039;&#039;&#039;&amp;lt;ecoicon&amp;gt;&#039;&#039;&#039; tag. &lt;br /&gt;
&lt;br /&gt;
== Adding a Custom Image ==&lt;br /&gt;
To add a custom image to Eco. Create a blank new client Modkit project and open the default modkit scene template. Create a new GameObject under the Items root GameObject. Similar to items there are naming rules that must be followed when creating this object. It should match &amp;quot;[YourUsageName]Image&amp;quot; In this example we are going to add LogoPlanetImage which will appear in game under &amp;quot;LogoPlanet&amp;quot;.&lt;br /&gt;
[[File:LogoPlanetImage-SignTutorial.png|none|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Inside this GameObject you should have an Image component that contains your prepared sprite Image you&#039;d like to add. In our case this contains the Eco planet logo.&lt;br /&gt;
[[File:ExampleImage-SignTutorial.png|none|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
From here you assign your scene tag and publish the Modkit bundle as normal.&lt;br /&gt;
&lt;br /&gt;
== Using the Custom Image ==&lt;br /&gt;
To use your new image in game use the ecoicon tag with the name attribute containing the name of your new image GameObject. In our case that is &amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ecoicon name=&amp;quot;LogoPlanet&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;The image will then try and automatically fill the available space. Note our example image is low resolution. You can use high resolution images for better quality.&lt;br /&gt;
[[File:SignExample-SignTutorial.png|none|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Tips for usability ==&lt;br /&gt;
This section outlines some easy to follow steps to make your custom images easy to use. Taking from personal findings from a modder that has implemented custom sign images prior to this change.&lt;br /&gt;
&lt;br /&gt;
=== Easy to type names ===&lt;br /&gt;
If the images are intended to be used by everyone on the server try and come up with easy to remember and short names. No one enjoys typing out lengthy HTML code in their signs. Keeping it short makes it easier for people to remember their favorite images without having to constantly look it up.&lt;br /&gt;
&lt;br /&gt;
=== Reference Page ===&lt;br /&gt;
To make sure your server knows what images are available for easy public use consider adding a custom Ecopedia page with all the available images and possibly a sample tag for displaying them on signs. This can be achieved by following the documentation available [[Ecopedia modding|here]] about custom Ecopedia pages.&lt;br /&gt;
[[Category:Modding]]&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=Ecopedia_Modding&amp;diff=7593</id>
		<title>Ecopedia Modding</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=Ecopedia_Modding&amp;diff=7593"/>
		<updated>2021-08-01T20:07:35Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: Added custom pages example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;NOTE&#039;&#039;&#039;: The modding system is under heavy development. APIs are expected to change, which may break existing mods! Feel free to update any information on this wiki that is out of date.&lt;br /&gt;
== Adding Custom Items to Ecopedia ==&lt;br /&gt;
Using the same tools used by items and blocks created by Strange Loop Games modded objects can be automatically added to the Ecopedia. Ecopedia automatically generates pages for items and blocks using the &#039;&#039;&#039;EcopediaAttribute&#039;&#039;&#039; class. More information about this class can be found [https://docs.play.eco/api/server/eco.core/Eco.Core.Items.EcopediaAttribute.html here].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example Usage&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the following example we add a Flag item to Eco. The &#039;&#039;&#039;Ecopedia&#039;&#039;&#039; attribute adds a new sub category called &amp;quot;Flags&amp;quot; under &amp;quot;House Objects&amp;quot; and places our new item inside it.&amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
    [Serialized]&lt;br /&gt;
    [LocDisplayName(&amp;quot;Test Flag&amp;quot;)]&lt;br /&gt;
    [Ecopedia(&amp;quot;Housing Objects&amp;quot;, &amp;quot;Flags&amp;quot;, createAsSubPage: true, display: InPageTooltip.DynamicTooltip)]&lt;br /&gt;
    [Weight(10)]&lt;br /&gt;
    public partial class FlagItem : WorldObjectItem&amp;lt;FlagObject&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override LocString DisplayDescription { get { return Localizer.DoStr(&amp;quot;A piece of fabric with something on it. can be used for decorating.&amp;quot;); } }&lt;br /&gt;
&lt;br /&gt;
        static FlagItem()&lt;br /&gt;
        {&lt;br /&gt;
            WorldObject.AddOccupancy&amp;lt;FlagObject&amp;gt;(new List&amp;lt;BlockOccupancy&amp;gt;(){&lt;br /&gt;
            new BlockOccupancy(new Vector3i(0, 0, 0)),&lt;br /&gt;
            new BlockOccupancy(new Vector3i(0, 1, 0)),&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Custom Ecopedia Pages ==&lt;br /&gt;
It is possible to add custom Ecopedia pages that are hand written using XML files in your Eco server mod directory. These files support all tags available in Eco such as &#039;&#039;&#039;&amp;lt;ecoicon&amp;gt;&#039;&#039;&#039; as well as some custom tags only used by the Ecopedia UI.&lt;br /&gt;
&lt;br /&gt;
=== Modifying Existing Pages ===&lt;br /&gt;
Starting with Eco 9.4 custom pages created by Strange Loop Games can be found in your server&#039;s mod directory under &#039;&#039;&#039;Mods/__core__/Ecopedia.&#039;&#039;&#039; Editing the XML files found in this directory will effect the pages found in the Ecopedia in game.&lt;br /&gt;
&lt;br /&gt;
=== Adding Custom Ecopedia Pages ===&lt;br /&gt;
It is possible to add your own custom pages to the Ecopedia by creating XML files under &#039;&#039;&#039;Mods/UserCode/Ecopedia&#039;&#039;&#039;. These files must follow the same XML file layout as those found under &#039;&#039;&#039;Mods/__core__/Ecopedia.&#039;&#039;&#039; An example custom page can be found [https://github.com/StrangeLoopGames/EcoModKit/tree/master/Examples/EcopediaPage/Server/Ecopedia/Welcome here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The example mod is comprised of three parts.&lt;br /&gt;
&lt;br /&gt;
* Rules.xml - The root page file for the Ecopedia chapter.&lt;br /&gt;
* Rules;Server Rules.xml - The Server Rules sub page.&lt;br /&gt;
* ServerInfo.xml - The root Ecopedia chapter that shows up in the left navigation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example Chapter&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A chapter file contains only the &#039;&#039;&#039;ecopediachapter&#039;&#039;&#039; tag used to define the chapter on the left navigation bar. The priority is used to sort where it will be placed in the list.&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ecopediachapter priority=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Example Root Page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the root page XML document we define our &#039;&#039;&#039;ecopedia&#039;&#039;&#039; tag which contains the Icon we would like to display and the chapter file that owns this page. The chapter field must match the name used in the chapter file minus the extension. Inside the &#039;&#039;&#039;ecopedia&#039;&#039;&#039; tag we define our summary text used in the Ecopedia page.&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ecopedia icon=&amp;quot;PaperItem&amp;quot; chapter=&amp;quot;ServerInfo&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;summary&amp;gt;Summary of Server Rules&amp;lt;/summary&amp;gt;&lt;br /&gt;
&amp;lt;/ecopedia&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Example Sub Page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the sub example page we define another page using the &#039;&#039;&#039;ecopedia&#039;&#039;&#039; tag and icon however we do not define a parent field as this is defined by the file name which follows the rule of &amp;quot;OwningPage;SubPageName.xml&amp;quot;. Inside this file we again define our summary text we would like to display as well as our custom content. In this case a section defining our server rules. All tags supported by Eco such as the &#039;&#039;&#039;ecoicon&#039;&#039;&#039; as well as some custom tags relating to sections are supported on in this file.&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ecopedia icon=&amp;quot;PaperItem&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;summary&amp;gt;Welcome to our Eco Server!&amp;lt;/summary&amp;gt;&lt;br /&gt;
  &amp;lt;section&amp;gt;&lt;br /&gt;
1. Don&#039;t be an jerk.&lt;br /&gt;
2. Don&#039;t game the game, IE: Use waterwheels without a watersource.&lt;br /&gt;
3. All Structures must be supported, IE: no floating stockpile platforms.&lt;br /&gt;
3.1. Bridges can still float, but must have &amp;quot;support&amp;quot; columns for aesthetic purposes. &lt;br /&gt;
&lt;br /&gt;
We hope you enjoy your stay!&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;/ecopedia&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=Ecopedia_Modding&amp;diff=7592</id>
		<title>Ecopedia Modding</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=Ecopedia_Modding&amp;diff=7592"/>
		<updated>2021-08-01T19:50:49Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: Added example of EcopediaAttribute&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;NOTE&#039;&#039;&#039;: The modding system is under heavy development. APIs are expected to change, which may break existing mods! Feel free to update any information on this wiki that is out of date.&lt;br /&gt;
&lt;br /&gt;
== Adding Custom Items to Ecopedia ==&lt;br /&gt;
Using the same tools used by items and blocks created by Strange Loop Games modded objects can be automatically added to the Ecopedia. Ecopedia automatically generates pages for items and blocks using the &#039;&#039;&#039;EcopediaAttribute&#039;&#039;&#039; class. More information about this class can be found [https://docs.play.eco/api/server/eco.core/Eco.Core.Items.EcopediaAttribute.html here].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example Usage&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the following example we add a Flag item to Eco. The &#039;&#039;&#039;Ecopedia&#039;&#039;&#039; attribute adds a new sub category called &amp;quot;Flags&amp;quot; under &amp;quot;House Objects&amp;quot; and places our new item inside it.&amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
    [Serialized]&lt;br /&gt;
    [LocDisplayName(&amp;quot;Test Flag&amp;quot;)]&lt;br /&gt;
    [Ecopedia(&amp;quot;Housing Objects&amp;quot;, &amp;quot;Flags&amp;quot;, createAsSubPage: true, display: InPageTooltip.DynamicTooltip)]&lt;br /&gt;
    [Weight(10)]&lt;br /&gt;
    public partial class FlagItem : WorldObjectItem&amp;lt;FlagObject&amp;gt;&lt;br /&gt;
    {&lt;br /&gt;
        public override LocString DisplayDescription { get { return Localizer.DoStr(&amp;quot;A piece of fabric with something on it. can be used for decorating.&amp;quot;); } }&lt;br /&gt;
&lt;br /&gt;
        static FlagItem()&lt;br /&gt;
        {&lt;br /&gt;
            WorldObject.AddOccupancy&amp;lt;FlagObject&amp;gt;(new List&amp;lt;BlockOccupancy&amp;gt;(){&lt;br /&gt;
            new BlockOccupancy(new Vector3i(0, 0, 0)),&lt;br /&gt;
            new BlockOccupancy(new Vector3i(0, 1, 0)),&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=URI_Commands&amp;diff=7591</id>
		<title>URI Commands</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=URI_Commands&amp;diff=7591"/>
		<updated>2021-08-01T05:03:02Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Starting with Eco 9.4 the game client now supports its own custom Uri protocol on Windows. This protocol can be used to quickly access startup options for Eco as well as be used for implementing custom launcher type applications. Such as a quick join link on a community website. &lt;br /&gt;
== Initial Setup ==&lt;br /&gt;
Currently because Eco does not have a dedicated installer you must run the Eco client at least once before the eco:// Uri protocol will be recognized by Windows. This first time setup runs the ClientSetupUtility.exe application to configure your machine to accept Eco&#039;s protocol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notice&#039;&#039;&#039;: The protocol will stop working if you move the game&#039;s install. To configure the protocol simply run the game again or launch the ClientSetupUtility found in the install folder directory.&lt;br /&gt;
&lt;br /&gt;
== Server QuickJoin Links ==&lt;br /&gt;
A QuickJoin link can now be found on all Eco servers starting with version 9.4. This link can be found as a button under server version. Clicking the QuickJoin button will automatically launch Eco and start connecting to the server. QuickJoin respects the configured server password and will force the user to enter it once the game launches if configured. &lt;br /&gt;
[[File:QuickJoinLink.png|none|thumb|323x323px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There is also a copy to clipboard button next to the QuickJoin link that will copy the sharable QuickJoin link to your clipboard to share with your friends.&lt;br /&gt;
&lt;br /&gt;
== Supported Commands ==&lt;br /&gt;
All of Eco&#039;s Uri commands start with the eco:// prefix. This creates a valid link that can be shared, used in Windows shortcuts, website links, ect. Anything that accepts a valid website URL should be able to execute a Eco Uri command.&lt;br /&gt;
&lt;br /&gt;
Currently the following commands are supported:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Command&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|eco://run/&lt;br /&gt;
|Simply starts the Eco client with no startup options.&lt;br /&gt;
|-&lt;br /&gt;
|eco://connect/&amp;lt;serverid&amp;gt;&lt;br /&gt;
|Starts the Eco client and connects to the supplied server identifier. This server id can be found in your networking configuration page on the Eco server.&lt;br /&gt;
|}&lt;br /&gt;
[[Category:Modding]]&lt;br /&gt;
{{DEFAULTSORT:URI Commands}}&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=URI_Commands&amp;diff=7590</id>
		<title>URI Commands</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=URI_Commands&amp;diff=7590"/>
		<updated>2021-08-01T04:53:37Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: Created page with &amp;quot;Starting with Eco 9.4 the game client now supports its own custom Uri protocol on Windows. This protocol can be used to quickly access startup options for Eco as well as be us...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Starting with Eco 9.4 the game client now supports its own custom Uri protocol on Windows. This protocol can be used to quickly access startup options for Eco as well as be used for implementing custom launcher type applications. Such as a quick join link on a community website.  &lt;br /&gt;
&lt;br /&gt;
== Initial Setup ==&lt;br /&gt;
Currently because Eco does not have a dedicated installer you must run the Eco client at least once before the eco:// Uri protocol will be recognized by Windows. This first time setup runs the ClientSetupUtility.exe application to configure your machine to accept Eco&#039;s protocol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notice&#039;&#039;&#039;: The protocol will stop working if you move the game&#039;s install. To configure the protocol simply run the game again or launch the ClientSetupUtility found in the install folder directory.&lt;br /&gt;
&lt;br /&gt;
== Supported Commands ==&lt;br /&gt;
All of Eco&#039;s Uri commands start with the eco:// prefix. This creates a valid link that can be shared, used in Windows shortcuts, website links, ect. Anything that accepts a valid website URL should be able to execute a Eco Uri command.&lt;br /&gt;
&lt;br /&gt;
Currently the following  commands are supported:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Command&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|eco://run/&lt;br /&gt;
|Simply starts the Eco client with no startup options.&lt;br /&gt;
|-&lt;br /&gt;
|eco://connect/&amp;lt;serverid&amp;gt;&lt;br /&gt;
|Starts the Eco client and connects to the supplied server identifier. This server id can be found in your networking configuration page on the Eco server.&lt;br /&gt;
|}&lt;br /&gt;
[[Category:Modding]]&lt;br /&gt;
{{DEFAULTSORT:URI Commands}}&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=Creating_Custom_Blocks&amp;diff=7385</id>
		<title>Creating Custom Blocks</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=Creating_Custom_Blocks&amp;diff=7385"/>
		<updated>2021-05-25T19:57:04Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Stained Glass Block.png|frame]]&lt;br /&gt;
This page will walk you through the basics of adding custom blocks to Eco utilizing the Glass models found already in the game to make a Green Stained Glass block. A completed tutorial can be [https://github.com/StrangeLoopGames/EcoModKit/tree/examples/Examples/Blockset here] as well as the asset files needed to complete this tutorial.&lt;br /&gt;
https://github.com/StrangeLoopGames/EcoModKit/tree/examples/Examples/Blockset&lt;br /&gt;
== Initial Scene Setup ==&lt;br /&gt;
Eco has special naming requirements for GameObjects within the mod scene. For blocks this involves a empty GameObject with the name &amp;quot;Blocks&amp;quot; and a BlockSetContainer attached. This object will contain all BlockSets used by your mod.&lt;br /&gt;
[[File:BlockSetContainerStructure.png|none|thumb|542x542px]]&lt;br /&gt;
== Creating your BlockSet ==&lt;br /&gt;
The first step to implementing a block into your new BlockSetContainer is by creating a BlockSet object inside the Unity asset explorer. A BlockSet represents one block type within the project. It contains the BlockBuilder objects used to represent each form of the new block as well as visual properties about how it should be rendered. To create a new BlockSet right click inside the Unity asset explorer and click Create -&amp;gt; VoxelEngine -&amp;gt; BlockSet. The name of the newly created BlockSet file is not important for the mod to function however for best practice it should be named similar to the internal or display name of the new block. Once the file is created attach it to the BlockSetContainer made in the previous step.&lt;br /&gt;
[[File:BlockSet Menu Location.png|none|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating your first BlockBuilder ==&lt;br /&gt;
[[File:Green Stained Glass BlockSet.png|thumb]]&lt;br /&gt;
A BlockBuilder represents a single form of a block inside Eco and defines the rules and meshes used to display it in the world. For the purposes of this tutorial we will be creating seven BlockBuilder objects for our new BlockSet. This list includes three block forms and four builders to represent the various stack states.&lt;br /&gt;
&lt;br /&gt;
* GreenStainedGlassWindow&lt;br /&gt;
* GreenStainedGlassStacked1&lt;br /&gt;
* GreenStainedGlassStacked2&lt;br /&gt;
* GreenStainedGlassStacked3&lt;br /&gt;
* GreenStainedGlassStacked4&lt;br /&gt;
* GreenStainedGlassCube&lt;br /&gt;
* GreenStainedGlassFlatRoof&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The naming of these block sets is important for the code step later in the tutorial. Eco associates client side object with code by matching the given name. To create the seven required BlockBuilders right click the Unity asset explorer and go to Create -&amp;gt; VoxelEngine -&amp;gt; CustomBuilder. Do this for all seven builders and name them matching the list above. Once you have all seven builders return to the BlockSet object you previously created and click &amp;quot;New Block&amp;quot; and assign your first BlockBuilder and repeat for all seven. The order in which these are added is not important.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Common Bugs ==&lt;br /&gt;
Below are a list of common bugs encountered while making custom blocks and how to solve them.&lt;br /&gt;
==== My block does not appear using the right mesh or in the spot I placed it. ====&lt;br /&gt;
This should be automatically handled in 9.4&#039;s ModKit. However if the issue is still present uncheck the &amp;quot;Optimize Mesh Data&amp;quot; option inside Unity&#039;s Player Settings prior to exporting the mesh. &lt;br /&gt;
[[File:OptimizeMeshData-Unity-PlayerSettings.png|none|thumb|462x462px]]&lt;br /&gt;
==== My block is changing changing between my material and a different material ====&lt;br /&gt;
This usually is caused by a conflicting name with a material inside the client. If this happens a simple rename of the material should resolve this. This is also true with similar issues relating to the block mesh.&lt;br /&gt;
[[Category:Modding]]&lt;br /&gt;
{{DEFAULTSORT:CreatingCustomBlocks}}&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=Creating_Custom_Blocks&amp;diff=7384</id>
		<title>Creating Custom Blocks</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=Creating_Custom_Blocks&amp;diff=7384"/>
		<updated>2021-05-25T19:21:49Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Stained Glass Block.png|frame]]&lt;br /&gt;
This page will walk you through the basics of adding custom blocks to Eco utilizing the Glass models found already in the game to make a Green Stained Glass block. A completed tutorial can be [https://github.com/StrangeLoopGames/EcoModKit/tree/examples/Examples/Blockset here] as well as the asset files needed to complete this tutorial.&lt;br /&gt;
https://github.com/StrangeLoopGames/EcoModKit/tree/examples/Examples/Blockset&lt;br /&gt;
== Initial Scene Setup ==&lt;br /&gt;
Eco has special naming requirements for GameObjects within the mod scene. For blocks this involves a empty GameObject with the name &amp;quot;Blocks&amp;quot; and a BlockSetContainer attached. This object will contain all BlockSets used by your mod.&lt;br /&gt;
[[File:BlockSetContainerStructure.png|none|thumb|542x542px]]&lt;br /&gt;
== Creating your BlockSet ==&lt;br /&gt;
&lt;br /&gt;
The first step to implementing a block into your new BlockSetContainer is by creating a BlockSet object inside the Unity asset explorer. A BlockSet represents one block type within the project. It contains the BlockBuilder objects used to represent each form of the new block as well as visual properties about how it should be rendered. To create a new BlockSet right click inside the Unity asset explorer and click Create -&amp;gt; VoxelEngine -&amp;gt; BlockSet. The name of the newly created BlockSet file is not important for the mod to function however for best practice it should be named similar to the internal or display name of the new block. Once the file is created attach it to the BlockSetContainer made in the previous step.&lt;br /&gt;
[[File:BlockSet Menu Location.png|none|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating your first BlockBuilder ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Common Bugs ==&lt;br /&gt;
Below are a list of common bugs encountered while making custom blocks and how to solve them.&lt;br /&gt;
==== My block does not appear using the right mesh or in the spot I placed it. ====&lt;br /&gt;
This should be automatically handled in 9.4&#039;s ModKit. However if the issue is still present uncheck the &amp;quot;Optimize Mesh Data&amp;quot; option inside Unity&#039;s Player Settings prior to exporting the mesh. &lt;br /&gt;
[[File:OptimizeMeshData-Unity-PlayerSettings.png|none|thumb|462x462px]]&lt;br /&gt;
==== My block is changing changing between my material and a different material ====&lt;br /&gt;
This usually is caused by a conflicting name with a material inside the client. If this happens a simple rename of the material should resolve this. This is also true with similar issues relating to the block mesh.&lt;br /&gt;
[[Category:Modding]]&lt;br /&gt;
{{DEFAULTSORT:CreatingCustomBlocks}}&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=Creating_Custom_Blocks&amp;diff=7383</id>
		<title>Creating Custom Blocks</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=Creating_Custom_Blocks&amp;diff=7383"/>
		<updated>2021-05-24T20:38:29Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page will walk you through the basics of adding custom blocks to Eco utilizing the Glass models found already in the game to make a Green Stained Glass block. A completed tutorial can be [https://github.com/StrangeLoopGames/EcoModKit/tree/examples/Examples/Blockset here] as well as the asset files needed to complete this tutorial.&lt;br /&gt;
&lt;br /&gt;
https://github.com/StrangeLoopGames/EcoModKit/tree/examples/Examples/Blockset&lt;br /&gt;
== Initial Scene Setup ==&lt;br /&gt;
Eco has special naming requirements for GameObjects within the mod scene. For blocks this involves a empty GameObject with the name &amp;quot;Blocks&amp;quot; and a BlockSetContainer attached. This object will contain all BlockSets used by your mod.&lt;br /&gt;
[[File:BlockSetContainerStructure.png|none|thumb|542x542px]]&lt;br /&gt;
== Creating your BlockSet ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating your first BlockBuilder ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Common Bugs ==&lt;br /&gt;
Below are a list of common bugs encountered while making custom blocks and how to solve them.&lt;br /&gt;
==== My block does not appear using the right mesh or in the spot I placed it. ====&lt;br /&gt;
This should be automatically handled in 9.4&#039;s ModKit. However if the issue is still present uncheck the &amp;quot;Optimize Mesh Data&amp;quot; option inside Unity&#039;s Player Settings prior to exporting the mesh. &lt;br /&gt;
[[File:OptimizeMeshData-Unity-PlayerSettings.png|none|thumb|462x462px]]&lt;br /&gt;
==== My block is changing changing between my material and a different material ====&lt;br /&gt;
This usually is caused by a conflicting name with a material inside the client. If this happens a simple rename of the material should resolve this. This is also true with similar issues relating to the block mesh.&lt;br /&gt;
[[Category:Modding]]&lt;br /&gt;
{{DEFAULTSORT:CreatingCustomBlocks}}&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=Creating_Custom_Blocks&amp;diff=7382</id>
		<title>Creating Custom Blocks</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=Creating_Custom_Blocks&amp;diff=7382"/>
		<updated>2021-05-24T20:28:56Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page will walk you through the basics of adding custom blocks to Eco utilizing the Glass models found already in the game to make a Green Stained Glass block. A completed tutorial can be [https://github.com/StrangeLoopGames/EcoModKit/tree/examples/Examples/Blockset here] as well as the asset files needed to complete this tutorial.&lt;br /&gt;
&lt;br /&gt;
https://github.com/StrangeLoopGames/EcoModKit/tree/examples/Examples/Blockset&lt;br /&gt;
&lt;br /&gt;
== Initial Scene Setup ==&lt;br /&gt;
Eco has special naming requirements for GameObjects within the mod scene. For blocks this involves a empty GameObject with the name &amp;quot;Blocks&amp;quot; and a BlockSetContainer attached. This object will contain all BlockSets used by your mod.&lt;br /&gt;
[[File:BlockSetContainerStructure.png|none|thumb|542x542px]]&lt;br /&gt;
&lt;br /&gt;
== Creating your BlockSet ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating your first BlockBuilder ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Common Bugs ==&lt;br /&gt;
Below are a list of common bugs encountered while making custom blocks and how to solve them.&lt;br /&gt;
&lt;br /&gt;
==== My block does not appear using the right mesh or in the spot I placed it. ====&lt;br /&gt;
This should be automatically handled in 9.4&#039;s ModKit. However if the issue is still present uncheck the &amp;quot;Optimize Mesh Data&amp;quot; option inside Unity&#039;s Player Settings prior to exporting the mesh. &lt;br /&gt;
[[File:OptimizeMeshData-Unity-PlayerSettings.png|none|thumb|462x462px]]&lt;br /&gt;
&lt;br /&gt;
==== My block is changing changing between my material and a different material ====&lt;br /&gt;
This usually is caused by a conflicting name with a material inside the client. If this happens a simple rename of the material should resolve this. This is also true with similar issues relating to the block mesh.&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=Creating_Custom_Blocks&amp;diff=7381</id>
		<title>Creating Custom Blocks</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=Creating_Custom_Blocks&amp;diff=7381"/>
		<updated>2021-05-24T20:20:43Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: Initial skeleton&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page will walk you through the basics of adding custom blocks to Eco utilizing the Glass models found already in the game to make a Green Stained Glass block. A completed tutorial can be [https://github.com/StrangeLoopGames/EcoModKit/tree/examples/Examples/Blockset here] as well as the asset files needed to complete this tutorial.&lt;br /&gt;
&lt;br /&gt;
https://github.com/StrangeLoopGames/EcoModKit/tree/examples/Examples/Blockset&lt;br /&gt;
&lt;br /&gt;
== Initial Scene Setup ==&lt;br /&gt;
&lt;br /&gt;
== Creating your BlockSet ==&lt;br /&gt;
&lt;br /&gt;
=== Creating your first BlockBuilder ===&lt;br /&gt;
&lt;br /&gt;
== Common Bugs ==&lt;br /&gt;
Below are a list of common bugs encountered while making custom blocks/blocksets and how to solve them.&lt;br /&gt;
&lt;br /&gt;
==== My block does not appear using the right mesh or in the spot I placed it. ====&lt;br /&gt;
This should be automatically handled in 9.4&#039;s ModKit. However if the issue is still present uncheck the &amp;quot;Optimize Mesh Data&amp;quot; option inside Unity&#039;s Player Settings prior to exporting the mesh.&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=Home_D%C3%A9cor_Modding&amp;diff=7102</id>
		<title>Home Décor Modding</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=Home_D%C3%A9cor_Modding&amp;diff=7102"/>
		<updated>2021-05-01T04:30:16Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: Initial tutorial and documentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;NOTE&#039;&#039;&#039;: The modding system is under heavy development. APIs are expected to change, which may break existing mods!  Feel free to update any information on this wiki that is out of date.&lt;br /&gt;
&lt;br /&gt;
== Ecko Statue Modding Tutorial ==&lt;br /&gt;
Starting in version 9.4 you can adjust the values of housing décor items from the new UserCode overrides and partial hook systems. This introductory is an tutorial into the new WorldObject housing item mod features and will help teach through modding a core object using partials to reduce the SkillValue of the Ecko statue by half.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools required for this tutorial&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* A text editor/IDE&lt;br /&gt;
&lt;br /&gt;
=== Adjusting the default Housing Décor  values ===&lt;br /&gt;
Starting in version 9.4 the mods directory is split up into two parts a __core__ folder and a UserCode folder. __core__ contains the base objects and files created by the Eco team. For this tutorial we will be working out of the new UserCode directory. This folder is guaranteed to not change across server updates. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To start we will create a &#039;&#039;&#039;EckoStatue.cs&#039;&#039;&#039; file in our UserCode directory and populate it with a base partial class for the game&#039;s Ecko Statue with our &#039;&#039;&#039;ModsPreInitialize&#039;&#039;&#039; hook to access the HomeValue object.&amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
namespace Eco.Mods.TechTree&lt;br /&gt;
{&lt;br /&gt;
    // Partial class extending the built in __core__ mod EckoStatue class&lt;br /&gt;
    public partial class EckoStatueObject&lt;br /&gt;
    {&lt;br /&gt;
        partial void ModsPreInitialize()&lt;br /&gt;
        {&lt;br /&gt;
            EckoStatueItem.HomeValue.SkillValue = 50; // Accesses the SkillValue of the Ecko Statue and reduces it by half its normal value (Default: 100)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Category:Modding]]&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=RCON&amp;diff=7081</id>
		<title>RCON</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=RCON&amp;diff=7081"/>
		<updated>2021-05-01T03:17:16Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: Added link to chat commands page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Eco RCON Protocol ==&lt;br /&gt;
The Eco RCON Protocol is a TCP based communication protocol loosely based on the Source RCON Protocol standard. It allows admin commands to be issued to the server via a &amp;quot;remote console&amp;quot;. The most common use of RCON is to allow server owners to control their game servers without being in game for easy administration or automated processes.&lt;br /&gt;
== Server Owner/Admin Documentation ==&lt;br /&gt;
=== Using Eco RCON ===&lt;br /&gt;
By default, Eco&#039;s RCON implementation listens on TCP port 3002. This setting can be changed inside the network configuration options as well as the IP/host address the RCON server binds to. To use RCON a valid password must be set inside the Network plugin configuration. Servers without a valid password will reject all incoming authentication requests.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When executing a command through ECO RCON you do not need to supply the forward slash like you would in game. Below is an example of remote command execution to ban a using the mcrcon tool linked in the tool section below.&lt;br /&gt;
&lt;br /&gt;
[[File:2021-04-30 22-04-51.mp4|800px]]&lt;br /&gt;
&lt;br /&gt;
A complete list of commands that can be used with RCON or in game can be found [[Chat_Commands|here]].&lt;br /&gt;
===Public Tools and Libraries===&lt;br /&gt;
Most standard tools for communicating with standard RCON will work with Eco RCON. A short list of known working tools can be found below&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;&lt;br /&gt;
*https://github.com/n0la/rcon (RCON command line tool)&lt;br /&gt;
*https://github.com/Tiiffi/mcrcon (RCON command line client)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All command requests sent through RCON are executed with server admin permissions. For best practice its advised you keep your RCON information secure and only let trusted users or trusted programs access your RCON server. &lt;br /&gt;
== Developer Documentation==&lt;br /&gt;
===Establishing a Connection===&lt;br /&gt;
To establish a TCP connection to an Eco RCON server you need to know the server&#039;s configured RCON port and the server&#039;s configured password and connect via a standard TCP client. Once connected you must authenticate your selves by sending a &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; packet. Failure to do so will result in no response. If your authentication request was successful you should receive back a &#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039; packet with a matching id of the authentication request packet. Receiving an packet id of -1 means the authentication request has failed. An authentication request can fail if the password is incorrect, misconfigured, or if there is already an active RCON client connection.&lt;br /&gt;
===Packet Structure===&lt;br /&gt;
==== Basic Packet Structure====&lt;br /&gt;
All Eco RCON packets payloads follow this basic structure and are sent over a TCP socket&lt;br /&gt;
{| class=&amp;quot;wikitable standard-table&amp;quot;&lt;br /&gt;
!Field||Type|||Value&lt;br /&gt;
|-&lt;br /&gt;
|Size||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|ID||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Type||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Body||[[wiki:Null-terminated string|Null-terminated]] [[wiki:ASCII|ASCII]] [[String]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Empty String||[[wiki:Null-terminated string|Null-terminated]] [[wiki:ASCII|ASCII]] [[String]]||0x00&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
====Packet Size====&lt;br /&gt;
The RCON packet size field is represented by a 32-bit little endian integer, It represents the total length of the request in bytes. Note that the &#039;&#039;&#039;packet size&#039;&#039;&#039; field itself is &#039;&#039;&#039;not&#039;&#039;&#039; included when determining the size of the packet, so the value of this field is always 4 less than the packet&#039;s actual length. The minimum possible value for &#039;&#039;&#039;packet size&#039;&#039;&#039; is 14.&lt;br /&gt;
{| class=&amp;quot;wikitable standard-table&amp;quot;&lt;br /&gt;
!Size||Containing&lt;br /&gt;
|-&lt;br /&gt;
|4 [[Byte|Bytes]]||ID Field&lt;br /&gt;
|-&lt;br /&gt;
|4 [[Byte|Bytes]]||Type Field&lt;br /&gt;
|-&lt;br /&gt;
|At least 1 [[Byte]]||Packet body (potentially empty)&lt;br /&gt;
|-&lt;br /&gt;
|1 [[Byte|Bytes]]||Empty string terminator&lt;br /&gt;
|}&lt;br /&gt;
====Packet ID====&lt;br /&gt;
The packet id field is a 32-bit little endian integer which is specified by the requesting client for each request. Its value can be any positive integer. When the server responds to a client request it will send back the same packet id it received for that command request allowing you match the original request to the server response. &lt;br /&gt;
====Packet Type ====&lt;br /&gt;
The packet type field is represented by a 32-bit little endian integer. It the intended purpose of the packet.&lt;br /&gt;
{| class=&amp;quot;wikitable standard-table&amp;quot;&lt;br /&gt;
!Value||String Descriptor&lt;br /&gt;
|-&lt;br /&gt;
|3||SERVERDATA_AUTH&lt;br /&gt;
|-&lt;br /&gt;
|2|| SERVERDATA_AUTH_RESPONSE&lt;br /&gt;
|-&lt;br /&gt;
|2||SERVERDATA_EXECCOMMAND&lt;br /&gt;
|-&lt;br /&gt;
|0||SERVERDATA_RESPONSE_VALUE&lt;br /&gt;
|}&lt;br /&gt;
====Packet Body ====&lt;br /&gt;
The packet body field is a null-terminated ASCII encoded string. The contents of the packet body vary by the executed request.&lt;br /&gt;
====Packet Types====&lt;br /&gt;
=====&#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039;=====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; is the first packet to be sent by a newly connected client. It is used to authenticate with the RCON server and gain access to the &#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039; request. The values of this packet type&#039;s fields are as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|any positive integer, chosen by the client (will be mirrored back in the server&#039;s response)&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
| the RCON password of the server (If this field matches the password set in the Network configuration the auth request will succeed)&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: If the password is not properly configured on the server all &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; requests will be refused.&lt;br /&gt;
=====&#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039;=====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039; is the response notification packet of a client&#039;s &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; request and contains the results of its authentication attempt. The status is represented by the id of the packet. A -1 value denotes a failed authentication request. If authentication was a success it matches the packet id provided in the original authentication request.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
! Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|The ID of the original authentication request if it was successful, otherwise -1 on failure.&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
| Empty string (0x00)&lt;br /&gt;
|}&lt;br /&gt;
=====&#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039;=====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039; represents a command issued to the server by a client. This can be any valid player or admin command that does not require a physical player in the world to execute. The response will vary depending on the command issued.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|any positive integer, chosen by the client (will be mirrored back in the server&#039;s response)&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
|the command to be executed on the server&lt;br /&gt;
|}&lt;br /&gt;
=====&#039;&#039;&#039;SERVERDATA_RESPONSE_VALUE&#039;&#039;&#039;=====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_RESPONSE_VALUE&#039;&#039;&#039; is sent when a command had finished executing from a &#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039; request and contains the chat displayed results of the requested command. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
| The ID assigned by the original request&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
|The server&#039;s response to the original command.&lt;br /&gt;
|}&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
[[Category:Server Management]]&lt;br /&gt;
[[Category:Modding]]&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=RCON&amp;diff=7080</id>
		<title>RCON</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=RCON&amp;diff=7080"/>
		<updated>2021-05-01T03:09:58Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Eco RCON Protocol ==&lt;br /&gt;
The Eco RCON Protocol is a TCP based communication protocol loosely based on the Source RCON Protocol standard. It allows admin commands to be issued to the server via a &amp;quot;remote console&amp;quot;. The most common use of RCON is to allow server owners to control their game servers without being in game for easy administration or automated processes.&lt;br /&gt;
== Server Owner/Admin Documentation ==&lt;br /&gt;
=== Using Eco RCON ===&lt;br /&gt;
By default, Eco&#039;s RCON implementation listens on TCP port 3002. This setting can be changed inside the network configuration options as well as the IP/host address the RCON server binds to. To use RCON a valid password must be set inside the Network plugin configuration. Servers without a valid password will reject all incoming authentication requests.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When executing a command through ECO RCON you do not need to supply the forward slash like you would in game. Below is an example of remote command execution to ban a  using the mcrcon tool linked in the tool section below.&lt;br /&gt;
&lt;br /&gt;
[[File:2021-04-30 22-04-51.mp4|800px]]&lt;br /&gt;
===Public Tools and Libraries===&lt;br /&gt;
Most standard tools for communicating with standard RCON will work with Eco RCON. A short list of known working tools can be found below&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;&lt;br /&gt;
*https://github.com/n0la/rcon (RCON command line tool)&lt;br /&gt;
*https://github.com/Tiiffi/mcrcon (RCON command line client)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All command requests sent through RCON are executed with server admin permissions. For best practice its advised you keep your RCON information secure and only let trusted users or trusted programs access your RCON server. &lt;br /&gt;
== Developer Documentation ==&lt;br /&gt;
===Establishing a Connection===&lt;br /&gt;
To establish a TCP connection to an Eco RCON server you need to know the server&#039;s configured RCON port and the server&#039;s configured password and connect via a standard TCP client. Once connected you must authenticate your selves by sending a &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; packet. Failure to do so will result in no response. If your authentication request was successful you should receive back a &#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039; packet with a matching id of the authentication request packet. Receiving an packet id of -1 means the authentication request has failed. An authentication request can fail if the password is incorrect, misconfigured, or if there is already an active RCON client connection.&lt;br /&gt;
=== Packet Structure===&lt;br /&gt;
====Basic Packet Structure====&lt;br /&gt;
All Eco RCON packets payloads follow this basic structure and are sent over a TCP socket&lt;br /&gt;
{| class=&amp;quot;wikitable standard-table&amp;quot;&lt;br /&gt;
!Field||Type|||Value&lt;br /&gt;
|-&lt;br /&gt;
|Size||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|ID||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Type||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Body||[[wiki:Null-terminated string|Null-terminated]] [[wiki:ASCII|ASCII]] [[String]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Empty String ||[[wiki:Null-terminated string|Null-terminated]] [[wiki:ASCII|ASCII]] [[String]]||0x00&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
==== Packet Size====&lt;br /&gt;
The RCON packet size field is represented by a 32-bit little endian integer, It represents the total length of the request in bytes. Note that the &#039;&#039;&#039;packet size&#039;&#039;&#039; field itself is &#039;&#039;&#039;not&#039;&#039;&#039; included when determining the size of the packet, so the value of this field is always 4 less than the packet&#039;s actual length. The minimum possible value for &#039;&#039;&#039;packet size&#039;&#039;&#039; is 14.&lt;br /&gt;
{| class=&amp;quot;wikitable standard-table&amp;quot;&lt;br /&gt;
!Size||Containing&lt;br /&gt;
|-&lt;br /&gt;
|4 [[Byte|Bytes]]||ID Field&lt;br /&gt;
|-&lt;br /&gt;
|4 [[Byte|Bytes]]|| Type Field&lt;br /&gt;
|-&lt;br /&gt;
|At least 1 [[Byte]]||Packet body (potentially empty)&lt;br /&gt;
|-&lt;br /&gt;
|1 [[Byte|Bytes]]||Empty string terminator&lt;br /&gt;
|}&lt;br /&gt;
====Packet ID====&lt;br /&gt;
The packet id field is a 32-bit little endian integer which is specified by the requesting client for each request. Its value can be any positive integer. When the server responds to a client request it will send back the same packet id it received for that command request allowing you match the original request to the server response. &lt;br /&gt;
==== Packet Type====&lt;br /&gt;
The packet type field is represented by a 32-bit little endian integer. It the intended purpose of the packet.&lt;br /&gt;
{| class=&amp;quot;wikitable standard-table&amp;quot;&lt;br /&gt;
!Value||String Descriptor&lt;br /&gt;
|-&lt;br /&gt;
|3||SERVERDATA_AUTH&lt;br /&gt;
|-&lt;br /&gt;
|2||SERVERDATA_AUTH_RESPONSE&lt;br /&gt;
|-&lt;br /&gt;
|2||SERVERDATA_EXECCOMMAND&lt;br /&gt;
|-&lt;br /&gt;
|0||SERVERDATA_RESPONSE_VALUE&lt;br /&gt;
|}&lt;br /&gt;
====Packet Body====&lt;br /&gt;
The packet body field is a null-terminated ASCII encoded string. The contents of the packet body vary by the executed request.&lt;br /&gt;
====Packet Types====&lt;br /&gt;
=====&#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039;=====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; is the first packet to be sent by a newly connected client. It is used to authenticate with the RCON server and gain access to the &#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039; request. The values of this packet type&#039;s fields are as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|any positive integer, chosen by the client (will be mirrored back in the server&#039;s response)&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
| the RCON password of the server (If this field matches the password set in the Network configuration the auth request will succeed)&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: If the password is not properly configured on the server all &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; requests will be refused.&lt;br /&gt;
=====&#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039;=====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039; is the response notification packet of a client&#039;s &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; request and contains the results of its authentication attempt. The status is represented by the id of the packet. A -1 value denotes a failed authentication request. If authentication was a success it matches the packet id provided in the original authentication request.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|The ID of the original authentication request if it was successful, otherwise -1 on failure.&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
|Empty string (0x00)&lt;br /&gt;
|}&lt;br /&gt;
=====&#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039;=====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039; represents a command issued to the server by a client. This can be any valid player or admin command that does not require a physical player in the world to execute. The response will vary depending on the command issued.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|any positive integer, chosen by the client (will be mirrored back in the server&#039;s response)&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
| the command to be executed on the server&lt;br /&gt;
|}&lt;br /&gt;
=====&#039;&#039;&#039;SERVERDATA_RESPONSE_VALUE&#039;&#039;&#039;=====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_RESPONSE_VALUE&#039;&#039;&#039; is sent when a command had finished executing from a &#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039; request and contains the chat displayed results of the requested command. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|The ID assigned by the original request&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
| Body&lt;br /&gt;
|The server&#039;s response to the original command.&lt;br /&gt;
|}&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
[[Category:Server Management]]&lt;br /&gt;
[[Category:Modding]]&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=RCON&amp;diff=7070</id>
		<title>RCON</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=RCON&amp;diff=7070"/>
		<updated>2021-05-01T00:40:07Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: Adjusted the document into a developer and user section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Eco RCON Protocol ==&lt;br /&gt;
The Eco RCON Protocol is a TCP based communication protocol loosely based on the Source RCON Protocol standard. It allows admin commands to be issued to the server via a &amp;quot;remote console&amp;quot;. The most common use of RCON is to allow server owners to control their game servers without being in game for easy administration or automated processes.&lt;br /&gt;
&lt;br /&gt;
== Server Owner/Admin Documentation ==&lt;br /&gt;
&lt;br /&gt;
=== Using Eco RCON ===&lt;br /&gt;
By default, Eco&#039;s RCON implementation listens on TCP port 3002. This setting can be changed inside the network configuration options as well as the IP/host address the RCON server binds to. To use RCON a valid password must be set inside the Network plugin configuration. Servers without a valid password will reject all incoming authentication requests.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When executing a command through ECO RCON you do not need to supply the forward slash like you would in game. Below is an example of remote command execution using the mcrcon tool linked in the tools/libraries section below.&lt;br /&gt;
&lt;br /&gt;
[[File:RconExample.png|800px]]&lt;br /&gt;
===Public Tools and Libraries===&lt;br /&gt;
Most standard tools for communicating with standard RCON will work with Eco RCON. A short list of known working tools can be found below&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;&lt;br /&gt;
*https://github.com/n0la/rcon (RCON command line tool)&lt;br /&gt;
*https://github.com/Tiiffi/mcrcon (RCON command line client)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All command requests sent through RCON are executed with server admin permissions. For best practice its advised you keep your RCON information secure and only let trusted users or trusted programs access your RCON server. &lt;br /&gt;
&lt;br /&gt;
== Developer Documentation ==&lt;br /&gt;
&lt;br /&gt;
===Establishing a Connection===&lt;br /&gt;
To establish a TCP connection to an Eco RCON server you need to know the server&#039;s configured RCON port and the server&#039;s configured password and connect via a standard TCP client. Once connected you must authenticate your selves by sending a &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; packet. Failure to do so will result in no response. If your authentication request was successful you should receive back a &#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039; packet with a matching id of the authentication request packet. Receiving an packet id of -1 means the authentication request has failed. An authentication request can fail if the password is incorrect, misconfigured, or if there is already an active RCON client connection.&lt;br /&gt;
=== Packet Structure===&lt;br /&gt;
====Basic Packet Structure====&lt;br /&gt;
All Eco RCON packets payloads follow this basic structure and are sent over a TCP socket&lt;br /&gt;
{| class=&amp;quot;wikitable standard-table&amp;quot;&lt;br /&gt;
!Field||Type|||Value&lt;br /&gt;
|-&lt;br /&gt;
|Size||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|ID||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Type||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Body||[[wiki:Null-terminated string|Null-terminated]] [[wiki:ASCII|ASCII]] [[String]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Empty String ||[[wiki:Null-terminated string|Null-terminated]] [[wiki:ASCII|ASCII]] [[String]]||0x00&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
==== Packet Size====&lt;br /&gt;
The RCON packet size field is represented by a 32-bit little endian integer, It represents the total length of the request in bytes. Note that the &#039;&#039;&#039;packet size&#039;&#039;&#039; field itself is &#039;&#039;&#039;not&#039;&#039;&#039; included when determining the size of the packet, so the value of this field is always 4 less than the packet&#039;s actual length. The minimum possible value for &#039;&#039;&#039;packet size&#039;&#039;&#039; is 14.&lt;br /&gt;
{| class=&amp;quot;wikitable standard-table&amp;quot;&lt;br /&gt;
!Size||Containing&lt;br /&gt;
|-&lt;br /&gt;
|4 [[Byte|Bytes]]||ID Field&lt;br /&gt;
|-&lt;br /&gt;
|4 [[Byte|Bytes]]|| Type Field&lt;br /&gt;
|-&lt;br /&gt;
|At least 1 [[Byte]]||Packet body (potentially empty)&lt;br /&gt;
|-&lt;br /&gt;
|1 [[Byte|Bytes]]||Empty string terminator&lt;br /&gt;
|}&lt;br /&gt;
====Packet ID====&lt;br /&gt;
The packet id field is a 32-bit little endian integer which is specified by the requesting client for each request. Its value can be any positive integer. When the server responds to a client request it will send back the same packet id it received for that command request allowing you match the original request to the server response. &lt;br /&gt;
==== Packet Type====&lt;br /&gt;
The packet type field is represented by a 32-bit little endian integer. It the intended purpose of the packet.&lt;br /&gt;
{| class=&amp;quot;wikitable standard-table&amp;quot;&lt;br /&gt;
!Value||String Descriptor&lt;br /&gt;
|-&lt;br /&gt;
|3||SERVERDATA_AUTH&lt;br /&gt;
|-&lt;br /&gt;
|2||SERVERDATA_AUTH_RESPONSE&lt;br /&gt;
|-&lt;br /&gt;
|2||SERVERDATA_EXECCOMMAND&lt;br /&gt;
|-&lt;br /&gt;
|0||SERVERDATA_RESPONSE_VALUE&lt;br /&gt;
|}&lt;br /&gt;
====Packet Body====&lt;br /&gt;
The packet body field is a null-terminated ASCII encoded string. The contents of the packet body vary by the executed request.&lt;br /&gt;
====Packet Types====&lt;br /&gt;
=====&#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039;=====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; is the first packet to be sent by a newly connected client. It is used to authenticate with the RCON server and gain access to the &#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039; request. The values of this packet type&#039;s fields are as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|any positive integer, chosen by the client (will be mirrored back in the server&#039;s response)&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
| the RCON password of the server (If this field matches the password set in the Network configuration the auth request will succeed)&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: If the password is not properly configured on the server all &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; requests will be refused.&lt;br /&gt;
=====&#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039;=====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039; is the response notification packet of a client&#039;s &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; request and contains the results of its authentication attempt. The status is represented by the id of the packet. A -1 value denotes a failed authentication request. If authentication was a success it matches the packet id provided in the original authentication request.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|The ID of the original authentication request if it was successful, otherwise -1 on failure.&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
|Empty string (0x00)&lt;br /&gt;
|}&lt;br /&gt;
=====&#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039;=====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039; represents a command issued to the server by a client. This can be any valid player or admin command that does not require a physical player in the world to execute. The response will vary depending on the command issued.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|any positive integer, chosen by the client (will be mirrored back in the server&#039;s response)&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
| the command to be executed on the server&lt;br /&gt;
|}&lt;br /&gt;
=====&#039;&#039;&#039;SERVERDATA_RESPONSE_VALUE&#039;&#039;&#039;=====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_RESPONSE_VALUE&#039;&#039;&#039; is sent when a command had finished executing from a &#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039; request and contains the chat displayed results of the requested command. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|The ID assigned by the original request&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
| Body&lt;br /&gt;
|The server&#039;s response to the original command.&lt;br /&gt;
|}&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
[[Category:Server Management]]&lt;br /&gt;
[[Category:Modding]]&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=RCON&amp;diff=7016</id>
		<title>RCON</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=RCON&amp;diff=7016"/>
		<updated>2021-04-29T19:48:56Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: Added proper example image&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Eco RCON Protocol ==&lt;br /&gt;
The Eco RCON Protocol is a TCP based communication protocol loosely based on the Source RCON Protocol standard. It allows admin commands to be issued to the server via a &amp;quot;remote console&amp;quot;. The most common use of RCON is to allow server owners to control their game servers without being in game for easy administration or automated processes.&lt;br /&gt;
== Using Eco RCON ==&lt;br /&gt;
By default, Eco&#039;s RCON implementation listens on TCP port 3002. This setting can be changed inside the network configuration options as well as the IP/host address the RCON server binds to. To use RCON a valid password must be set inside the Network plugin configuration. Servers without a valid password will reject all incoming authentication requests.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When executing a command through ECO RCON you do not need to supply the forward slash like you would in game. Below is an example of remote command execution using the mcrcon tool linked in the tools/libraries section below.&lt;br /&gt;
&lt;br /&gt;
[[File:RconExample.png|800px]]&lt;br /&gt;
===Public Tools and Libraries===&lt;br /&gt;
Most standard tools/libraries for communicating with standard RCON will work with Eco RCON. A short list of known working tools and libraries can be found below&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;&lt;br /&gt;
*https://github.com/n0la/rcon (RCON command line tool)&lt;br /&gt;
*https://github.com/Tiiffi/mcrcon (RCON command line client)&lt;br /&gt;
&#039;&#039;&#039;Libraries&#039;&#039;&#039;&lt;br /&gt;
*https://github.com/Subtixx/source-rcon-library (C# Library)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All command requests sent through RCON are executed with server admin permissions. For best practice its advised you keep your RCON information secure and only let trusted users or trusted programs access your RCON server. &lt;br /&gt;
==Establishing a Connection==&lt;br /&gt;
To establish a TCP connection to an Eco RCON server you need to know the server&#039;s configured RCON port and the server&#039;s configured password and connect via a standard TCP client. Once connected you must authenticate your selves by sending a &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; packet. Failure to do so will result in no response. If your authentication request was successful you should receive back a &#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039; packet with a matching id of the authentication request packet. Receiving an packet id of -1 means the authentication request has failed. An authentication request can fail if the password is incorrect, misconfigured, or if there is already an active RCON client connection.&lt;br /&gt;
== Packet Structure==&lt;br /&gt;
===Basic Packet Structure===&lt;br /&gt;
All Eco RCON packets payloads follow this basic structure and are sent over a TCP socket&lt;br /&gt;
{| class=&amp;quot;wikitable standard-table&amp;quot;&lt;br /&gt;
!Field||Type|||Value&lt;br /&gt;
|-&lt;br /&gt;
|Size||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|ID||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Type||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Body||[[wiki:Null-terminated string|Null-terminated]] [[wiki:ASCII|ASCII]] [[String]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Empty String ||[[wiki:Null-terminated string|Null-terminated]] [[wiki:ASCII|ASCII]] [[String]]||0x00&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
=== Packet Size===&lt;br /&gt;
The RCON packet size field is represented by a 32-bit little endian integer, It represents the total length of the request in bytes. Note that the &#039;&#039;&#039;packet size&#039;&#039;&#039; field itself is &#039;&#039;&#039;not&#039;&#039;&#039; included when determining the size of the packet, so the value of this field is always 4 less than the packet&#039;s actual length. The minimum possible value for &#039;&#039;&#039;packet size&#039;&#039;&#039; is 14.&lt;br /&gt;
{| class=&amp;quot;wikitable standard-table&amp;quot;&lt;br /&gt;
!Size||Containing&lt;br /&gt;
|-&lt;br /&gt;
|4 [[Byte|Bytes]]||ID Field&lt;br /&gt;
|-&lt;br /&gt;
|4 [[Byte|Bytes]]|| Type Field&lt;br /&gt;
|-&lt;br /&gt;
|At least 1 [[Byte]]||Packet body (potentially empty)&lt;br /&gt;
|-&lt;br /&gt;
|1 [[Byte|Bytes]]||Empty string terminator&lt;br /&gt;
|}&lt;br /&gt;
===Packet ID===&lt;br /&gt;
The packet id field is a 32-bit little endian integer which is specified by the requesting client for each request. Its value can be any positive integer. When the server responds to a client request it will send back the same packet id it received for that command request allowing you match the original request to the server response. &lt;br /&gt;
=== Packet Type===&lt;br /&gt;
The packet type field is represented by a 32-bit little endian integer. It the intended purpose of the packet.&lt;br /&gt;
{| class=&amp;quot;wikitable standard-table&amp;quot;&lt;br /&gt;
!Value||String Descriptor&lt;br /&gt;
|-&lt;br /&gt;
|3||SERVERDATA_AUTH&lt;br /&gt;
|-&lt;br /&gt;
|2||SERVERDATA_AUTH_RESPONSE&lt;br /&gt;
|-&lt;br /&gt;
|2||SERVERDATA_EXECCOMMAND&lt;br /&gt;
|-&lt;br /&gt;
|0||SERVERDATA_RESPONSE_VALUE&lt;br /&gt;
|}&lt;br /&gt;
===Packet Body===&lt;br /&gt;
The packet body field is a null-terminated ASCII encoded string. The contents of the packet body vary by the executed request.&lt;br /&gt;
===Packet Types===&lt;br /&gt;
====&#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039;====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; is the first packet to be sent by a newly connected client. It is used to authenticate with the RCON server and gain access to the &#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039; request. The values of this packet type&#039;s fields are as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|any positive integer, chosen by the client (will be mirrored back in the server&#039;s response)&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
| the RCON password of the server (If this field matches the password set in the Network configuration the auth request will succeed)&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: If the password is not properly configured on the server all &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; requests will be refused.&lt;br /&gt;
====&#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039;====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039; is the response notification packet of a client&#039;s &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; request and contains the results of its authentication attempt. The status is represented by the id of the packet. A -1 value denotes a failed authentication request. If authentication was a success it matches the packet id provided in the original authentication request.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|The ID of the original authentication request if it was successful, otherwise -1 on failure.&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
|Empty string (0x00)&lt;br /&gt;
|}&lt;br /&gt;
====&#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039;====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039; represents a command issued to the server by a client. This can be any valid player or admin command that does not require a physical player in the world to execute. The response will vary depending on the command issued.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|any positive integer, chosen by the client (will be mirrored back in the server&#039;s response)&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
| the command to be executed on the server&lt;br /&gt;
|}&lt;br /&gt;
====&#039;&#039;&#039;SERVERDATA_RESPONSE_VALUE&#039;&#039;&#039;====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_RESPONSE_VALUE&#039;&#039;&#039; is sent when a command had finished executing from a &#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039; request and contains the chat displayed results of the requested command. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|The ID assigned by the original request&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
| Body&lt;br /&gt;
|The server&#039;s response to the original command.&lt;br /&gt;
|}&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
[[Category:Server Management]]&lt;br /&gt;
[[Category:Modding]]&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=RCON&amp;diff=7015</id>
		<title>RCON</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=RCON&amp;diff=7015"/>
		<updated>2021-04-29T19:14:27Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Eco RCON Protocol ==&lt;br /&gt;
The Eco RCON Protocol is a TCP based communication protocol loosely based on the Source RCON Protocol standard. It allows admin commands to be issued to the server via a &amp;quot;remote console&amp;quot;. The most common use of RCON is to allow server owners to control their game servers without being in game for easy administration or automated processes.&lt;br /&gt;
== Using Eco RCON ==&lt;br /&gt;
By default, Eco&#039;s RCON implementation listens on TCP port 3002. This setting can be changed inside the network configuration options as well as the IP/host address the RCON server binds to. To use RCON a valid password must be set inside the Network plugin configuration. Servers without a valid password will reject all incoming authentication requests.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When executing a command through ECO RCON you do not need to supply the forward slash like you would in game. Below is an example of remote command execution using the mcrcon tool linked in the tools/libraries section below.&lt;br /&gt;
&lt;br /&gt;
https://i.gyazo.com/1b0bc2d991d5c780d0376adc4ec46411.png&lt;br /&gt;
===Public Tools and Libraries===&lt;br /&gt;
Most standard tools/libraries for communicating with standard RCON will work with Eco RCON. A short list of known working tools and libraries can be found below&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;&lt;br /&gt;
*https://github.com/n0la/rcon (RCON command line tool)&lt;br /&gt;
*https://github.com/Tiiffi/mcrcon (RCON command line client)&lt;br /&gt;
&#039;&#039;&#039;Libraries&#039;&#039;&#039;&lt;br /&gt;
*https://github.com/Subtixx/source-rcon-library (C# Library)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All command requests sent through RCON are executed with server admin permissions. For best practice its advised you keep your RCON information secure and only let trusted users or trusted programs access your RCON server. &lt;br /&gt;
==Establishing a Connection==&lt;br /&gt;
To establish a TCP connection to an Eco RCON server you need to know the server&#039;s configured RCON port and the server&#039;s configured password and connect via a standard TCP client. Once connected you must authenticate your selves by sending a &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; packet. Failure to do so will result in no response. If your authentication request was successful you should receive back a &#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039; packet with a matching id of the authentication request packet. Receiving an packet id of -1 means the authentication request has failed. An authentication request can fail if the password is incorrect, misconfigured, or if there is already an active RCON client connection.&lt;br /&gt;
==Packet Structure==&lt;br /&gt;
===Basic Packet Structure===&lt;br /&gt;
All Eco RCON packets payloads follow this basic structure and are sent over a TCP socket&lt;br /&gt;
{| class=&amp;quot;wikitable standard-table&amp;quot;&lt;br /&gt;
!Field||Type||| Value&lt;br /&gt;
|-&lt;br /&gt;
|Size||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|ID||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Type||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Body ||[[wiki:Null-terminated string|Null-terminated]] [[wiki:ASCII|ASCII]] [[String]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Empty String ||[[wiki:Null-terminated string|Null-terminated]] [[wiki:ASCII|ASCII]] [[String]]||0x00&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
===Packet Size===&lt;br /&gt;
The RCON packet size field is represented by a 32-bit little endian integer, It represents the total length of the request in bytes. Note that the &#039;&#039;&#039;packet size&#039;&#039;&#039; field itself is &#039;&#039;&#039;not&#039;&#039;&#039; included when determining the size of the packet, so the value of this field is always 4 less than the packet&#039;s actual length. The minimum possible value for &#039;&#039;&#039;packet size&#039;&#039;&#039; is 14.&lt;br /&gt;
{| class=&amp;quot;wikitable standard-table&amp;quot;&lt;br /&gt;
! Size||Containing&lt;br /&gt;
|-&lt;br /&gt;
| 4 [[Byte|Bytes]]||ID Field&lt;br /&gt;
|-&lt;br /&gt;
|4 [[Byte|Bytes]]||Type Field&lt;br /&gt;
|-&lt;br /&gt;
|At least 1 [[Byte]]||Packet body (potentially empty)&lt;br /&gt;
|-&lt;br /&gt;
| 1 [[Byte|Bytes]]||Empty string terminator&lt;br /&gt;
|}&lt;br /&gt;
===Packet ID ===&lt;br /&gt;
The packet id field is a 32-bit little endian integer which is specified by the requesting client for each request. Its value can be any positive integer. When the server responds to a client request it will send back the same packet id it received for that command request allowing you match the original request to the server response. &lt;br /&gt;
===Packet Type===&lt;br /&gt;
The packet type field is represented by a 32-bit little endian integer. It the intended purpose of the packet.&lt;br /&gt;
{| class=&amp;quot;wikitable standard-table&amp;quot;&lt;br /&gt;
!Value||String Descriptor&lt;br /&gt;
|-&lt;br /&gt;
| 3|| SERVERDATA_AUTH&lt;br /&gt;
|-&lt;br /&gt;
|2||SERVERDATA_AUTH_RESPONSE&lt;br /&gt;
|-&lt;br /&gt;
|2||SERVERDATA_EXECCOMMAND&lt;br /&gt;
|-&lt;br /&gt;
|0|| SERVERDATA_RESPONSE_VALUE&lt;br /&gt;
|}&lt;br /&gt;
===Packet Body===&lt;br /&gt;
The packet body field is a null-terminated ASCII encoded string. The contents of the packet body vary by the executed request.&lt;br /&gt;
===Packet Types===&lt;br /&gt;
====&#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039;====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; is the first packet to be sent by a newly connected client. It is used to authenticate with the RCON server and gain access to the &#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039; request. The values of this packet type&#039;s fields are as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
| any positive integer, chosen by the client (will be mirrored back in the server&#039;s response)&lt;br /&gt;
|-&lt;br /&gt;
| Type&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
|the RCON password of the server (If this field matches the password set in the Network configuration the auth request will succeed)&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: If the password is not properly configured on the server all &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; requests will be refused.&lt;br /&gt;
====&#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039;====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039; is the response notification packet of a client&#039;s &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; request and contains the results of its authentication attempt. The status is represented by the id of the packet. A -1 value denotes a failed authentication request. If authentication was a success it matches the packet id provided in the original authentication request.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|The ID of the original authentication request if it was successful, otherwise -1 on failure.&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
|Empty string (0x00)&lt;br /&gt;
|}&lt;br /&gt;
====&#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039;====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039; represents a command issued to the server by a client. This can be any valid player or admin command that does not require a physical player in the world to execute. The response will vary depending on the command issued.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|any positive integer, chosen by the client (will be mirrored back in the server&#039;s response)&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
| the command to be executed on the server&lt;br /&gt;
|}&lt;br /&gt;
====&#039;&#039;&#039;SERVERDATA_RESPONSE_VALUE&#039;&#039;&#039;====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_RESPONSE_VALUE&#039;&#039;&#039; is sent when a command had finished executing from a &#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039; request and contains the chat displayed results of the requested command. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|The ID assigned by the original request&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
|The server&#039;s response to the original command.&lt;br /&gt;
|}&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
[[Category:Server Management]]&lt;br /&gt;
[[Category:Modding]]&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=RCON&amp;diff=7013</id>
		<title>RCON</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=RCON&amp;diff=7013"/>
		<updated>2021-04-29T17:34:53Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Eco RCON Protocol ==&lt;br /&gt;
The Eco RCON Protocol is a TCP based communication protocol loosely based on the Source RCON Protocol standard. It allows admin commands to be issued to the server via a &amp;quot;remote console&amp;quot;. The most common use of RCON is to allow server owners to control their game servers without being in game for easy administration or automated processes.&lt;br /&gt;
== Using Eco RCON ==&lt;br /&gt;
By default, Eco&#039;s RCON implementation listens on TCP port 3002. This setting can be changed inside the network configuration options as well as the IP/host address the RCON server binds to. To use RCON a valid password must be set inside the Network plugin configuration. Servers without a valid password will reject all incoming authentication requests.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When executing a command through ECO RCON you do not need to supply the forward slash like you would in game. Below is an example of remote command execution using the mcrcon tool linked in the tools/libraries section below.&lt;br /&gt;
&lt;br /&gt;
https://i.gyazo.com/1b0bc2d991d5c780d0376adc4ec46411.png&lt;br /&gt;
&lt;br /&gt;
===Public Tools and Libraries===&lt;br /&gt;
Most standard tools/libraries for communicating with standard RCON will work with Eco RCON. A short list of known working tools and libraries can be found below&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;&lt;br /&gt;
*https://github.com/n0la/rcon (RCON command line tool)&lt;br /&gt;
*https://github.com/Tiiffi/mcrcon (RCON command line client)&lt;br /&gt;
&#039;&#039;&#039;Libraries&#039;&#039;&#039;&lt;br /&gt;
*https://github.com/Subtixx/source-rcon-library (C# Library)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All command requests sent through RCON are executed with server admin permissions. For best practice its advised you keep your RCON information secure and only let trusted users or trusted programs access your RCON server. &lt;br /&gt;
==Establishing a Connection==&lt;br /&gt;
To establish a TCP connection to an Eco RCON server you need to know the server&#039;s configured RCON port and the server&#039;s configured password and connect via a standard TCP client. Once connected you must authenticate your selves by sending a &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; packet. Failure to do so will result in no response. If your authentication request was successful you should receive back a &#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039; packet with a matching id of the authentication request packet. Receiving an packet id of -1 means the authentication request has failed. An authentication request can fail if the password is incorrect, misconfigured, or if there is already an active RCON client connection.&lt;br /&gt;
==Packet Structure==&lt;br /&gt;
===Basic Packet Structure===&lt;br /&gt;
All Eco RCON packets payloads follow this basic structure and are sent over a TCP socket&lt;br /&gt;
{| class=&amp;quot;wikitable standard-table&amp;quot;&lt;br /&gt;
!Field||Type||| Value&lt;br /&gt;
|-&lt;br /&gt;
|Size||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|ID||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Type||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Body ||[[wiki:Null-terminated string|Null-terminated]] [[wiki:ASCII|ASCII]] [[String]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Empty String ||[[wiki:Null-terminated string|Null-terminated]] [[wiki:ASCII|ASCII]] [[String]]||0x00&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
===Packet Size===&lt;br /&gt;
The RCON packet size field is represented by a 32-bit little endian integer, It represents the total length of the request in bytes. Note that the &#039;&#039;&#039;packet size&#039;&#039;&#039; field itself is &#039;&#039;&#039;not&#039;&#039;&#039; included when determining the size of the packet, so the value of this field is always 4 less than the packet&#039;s actual length. The minimum possible value for &#039;&#039;&#039;packet size&#039;&#039;&#039; is 14.&lt;br /&gt;
{| class=&amp;quot;wikitable standard-table&amp;quot;&lt;br /&gt;
! Size||Containing&lt;br /&gt;
|-&lt;br /&gt;
| 4 [[Byte|Bytes]]||ID Field&lt;br /&gt;
|-&lt;br /&gt;
|4 [[Byte|Bytes]]||Type Field&lt;br /&gt;
|-&lt;br /&gt;
|At least 1 [[Byte]]||Packet body (potentially empty)&lt;br /&gt;
|-&lt;br /&gt;
| 1 [[Byte|Bytes]]||Empty string terminator&lt;br /&gt;
|}&lt;br /&gt;
===Packet ID ===&lt;br /&gt;
The packet id field is a 32-bit little endian integer which is specified by the requesting client for each request. Its value can be any positive integer. When the server responds to a client request it will send back the same packet id it received for that command request allowing you match the original request to the server response. &lt;br /&gt;
===Packet Type===&lt;br /&gt;
The packet type field is represented by a 32-bit little endian integer. It the intended purpose of the packet.&lt;br /&gt;
{| class=&amp;quot;wikitable standard-table&amp;quot;&lt;br /&gt;
!Value||String Descriptor&lt;br /&gt;
|-&lt;br /&gt;
| 3|| SERVERDATA_AUTH&lt;br /&gt;
|-&lt;br /&gt;
|2||SERVERDATA_AUTH_RESPONSE&lt;br /&gt;
|-&lt;br /&gt;
|2||SERVERDATA_EXECCOMMAND&lt;br /&gt;
|-&lt;br /&gt;
|0|| SERVERDATA_RESPONSE_VALUE&lt;br /&gt;
|}&lt;br /&gt;
===Packet Body===&lt;br /&gt;
The packet body field is a null-terminated ASCII encoded string. The contents of the packet body vary by the executed request.&lt;br /&gt;
===Packet Types===&lt;br /&gt;
====&#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039;====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; is the first packet to be sent by a newly connected client. It is used to authenticate with the RCON server and gain access to the &#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039; request. The values of this packet type&#039;s fields are as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
| any positive integer, chosen by the client (will be mirrored back in the server&#039;s response)&lt;br /&gt;
|-&lt;br /&gt;
| Type&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
|the RCON password of the server (If this field matches the password set in the Network configuration the auth request will succeed)&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: If the password is not properly configured on the server all &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; requests will be refused.&lt;br /&gt;
====&#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039;====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039; is the response notification packet of a client&#039;s &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; request and contains the results of its authentication attempt. The status is represented by the id of the packet. A -1 value denotes a failed authentication request. If authentication was a success it matches the packet id provided in the original authentication request.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|The ID of the original authentication request if it was successful, otherwise -1 on failure.&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
|Empty string (0x00)&lt;br /&gt;
|}&lt;br /&gt;
====&#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039;====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039; represents a command issued to the server by a client. This can be any valid player or admin command that does not require a physical player in the world to execute. The response will vary depending on the command issued.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|any positive integer, chosen by the client (will be mirrored back in the server&#039;s response)&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
| the command to be executed on the server&lt;br /&gt;
|}&lt;br /&gt;
====&#039;&#039;&#039;SERVERDATA_RESPONSE_VALUE&#039;&#039;&#039;====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_RESPONSE_VALUE&#039;&#039;&#039; is sent when a command had finished executing from a &#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039; request and contains the chat displayed results of the requested command. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|The ID assigned by the original request&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
|The server&#039;s response to the original command.&lt;br /&gt;
|}&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
[[Category:Server Management]]&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=Server&amp;diff=7012</id>
		<title>Server</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=Server&amp;diff=7012"/>
		<updated>2021-04-29T17:28:27Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: Added RCON link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[File:Server_Console_0.7.0.4.jpg|Server console in Windows 10, Eco version 0.7.0.4|thumb|600px]]&lt;br /&gt;
A [[server]] is an [[Eco]] world that is generated by a local or remote computer. To play Eco, you must join a server or start your own. Each server is a distinct world.&lt;br /&gt;
&lt;br /&gt;
Players can also configure a locally hosted server to be visible to the public on the in-game server browser. Even non-listed servers can also be found by players that know the server IP address and port.&lt;br /&gt;
&lt;br /&gt;
Server administrators may configure various [[world]] attributes, such as the size of their world, rate of skill gain, and player starting conditions.&lt;br /&gt;
&lt;br /&gt;
The Eco server can be run through Steam directly. Go to Library -&amp;gt; Tools -&amp;gt; Eco Server to download and launch the server. Note that the server is also included in the Steam client download, so players wishing to play single-player don&#039;t need to download the server separately.&lt;br /&gt;
&lt;br /&gt;
Steam is not required to run an Eco server. The server can also be downloaded directly from the [https://play.eco Strange Loop Games website]&lt;br /&gt;
&lt;br /&gt;
Since running an Eco server is demanding for computer hardware, and the server must always be running to be playable, many players choose to rent dedicated servers from hosting services.&lt;br /&gt;
== Server Browser ==&lt;br /&gt;
{{Main|Server Browser}}&lt;br /&gt;
An improved [[Server Browser]] was introduced in Eco Beta release 7. Clicking &amp;quot;New Game&amp;quot; in the main menu will bring it up. The browser allows players to select between several types of worlds, as well as browse all available servers.&lt;br /&gt;
&lt;br /&gt;
Players can also choose to host solo or private worlds, though it is not recommended, especially for new players.&lt;br /&gt;
== Guides ==&lt;br /&gt;
* [[System Requirements]] for a server. (Located at the bottom of the page following the link)&lt;br /&gt;
* [[Setting Up a Server]] for a basic guide to downloading, running, and updating the server.&lt;br /&gt;
* [[Setting Up a Server (advanced)]] for a more detailed guide on server configuration and troubleshooting.&lt;br /&gt;
* [[Updating a Server]] for instructions on how to manually update a server and migrate a saved world.&lt;br /&gt;
* [[Server Management]] for a few basic management tips.&lt;br /&gt;
* [[Server Configuration]] for a guide to configuring and modding the server.&lt;br /&gt;
* [[Chat Commands]] for a list of admin-only commands that can be used in the game client.&lt;br /&gt;
* [[RCON]] for documentation on Eco&#039;s RCON support.&lt;br /&gt;
[[de:Server]]&lt;br /&gt;
[[Category: Guide Pages]]&lt;br /&gt;
[[Category: Server management| ]]&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=RCON&amp;diff=7011</id>
		<title>RCON</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=RCON&amp;diff=7011"/>
		<updated>2021-04-29T17:26:05Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Eco RCON Protocol ==&lt;br /&gt;
The Eco RCON Protocol is a TCP based communication protocol loosely based on the Source RCON Protocol standard. It allows admin commands to be issued to the server via a &amp;quot;remote console&amp;quot;. The most common use of RCON is to allow server owners to control their game servers without being in game for easy administration or automated processes.&lt;br /&gt;
== Using Eco RCON ==&lt;br /&gt;
By default, Eco&#039;s RCON implementation listens on TCP port 3002. This setting can be changed inside the Network plugin configuration options as well as the IP/host address the RCON server binds to. To use RCON a valid password must be set inside the Network plugin configuration. Servers without a valid password will reject all incoming authentication requests.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When executing a command through ECO RCON you do not need to supply the forward slash like you would in game. Below is an example of remote command execution using the mcrcon tool linked in the tools/libraries section below.&lt;br /&gt;
&lt;br /&gt;
https://i.gyazo.com/1b0bc2d991d5c780d0376adc4ec46411.png&lt;br /&gt;
&lt;br /&gt;
===Public Tools and Libraries===&lt;br /&gt;
Most standard tools/libraries for communicating with standard RCON will work with Eco RCON. A short list of known working tools and libraries can be found below&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;&lt;br /&gt;
*https://github.com/n0la/rcon (RCON command line tool)&lt;br /&gt;
*https://github.com/Tiiffi/mcrcon (RCON command line client)&lt;br /&gt;
&#039;&#039;&#039;Libraries&#039;&#039;&#039;&lt;br /&gt;
*[https://github.com/Subtixx/source-rcon-library https://github.com/Subtixx/source-rcon-library (C# Library)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All command requests sent through RCON are executed with server admin permissions. For best practice its advised you keep your RCON information secure and only let trusted users or trusted programs access your RCON server. &lt;br /&gt;
==Establishing a Connection==&lt;br /&gt;
To establish a TCP connection to an Eco RCON server you need to know the server&#039;s configured RCON port and the server&#039;s configured password and connect via a standard TCP client. Once connected you must authenticate your selves by sending a &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; packet. Failure to do so will result in no response. If your authentication request was successful you should receive back a &#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039; packet with a matching id of the authentication request packet. Receiving an packet id of -1 means the authentication request has failed. An authentication request can fail if the password is incorrect, misconfigured, or if there is already an active RCON client connection.&lt;br /&gt;
==Packet Structure==&lt;br /&gt;
===Basic Packet Structure===&lt;br /&gt;
All Eco RCON packets payloads follow this basic structure and are sent over a TCP socket&lt;br /&gt;
{| class=&amp;quot;wikitable standard-table&amp;quot;&lt;br /&gt;
!Field||Type||| Value&lt;br /&gt;
|-&lt;br /&gt;
|Size||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|ID||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Type||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Body ||[[wiki:Null-terminated string|Null-terminated]] [[wiki:ASCII|ASCII]] [[String]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Empty String ||[[wiki:Null-terminated string|Null-terminated]] [[wiki:ASCII|ASCII]] [[String]]||0x00&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
===Packet Size===&lt;br /&gt;
The RCON packet size field is represented by a 32-bit little endian integer, It represents the total length of the request in bytes. Note that the &#039;&#039;&#039;packet size&#039;&#039;&#039; field itself is &#039;&#039;&#039;not&#039;&#039;&#039; included when determining the size of the packet, so the value of this field is always 4 less than the packet&#039;s actual length. The minimum possible value for &#039;&#039;&#039;packet size&#039;&#039;&#039; is 14.&lt;br /&gt;
{| class=&amp;quot;wikitable standard-table&amp;quot;&lt;br /&gt;
! Size||Containing&lt;br /&gt;
|-&lt;br /&gt;
| 4 [[Byte|Bytes]]||ID Field&lt;br /&gt;
|-&lt;br /&gt;
|4 [[Byte|Bytes]]||Type Field&lt;br /&gt;
|-&lt;br /&gt;
|At least 1 [[Byte]]||Packet body (potentially empty)&lt;br /&gt;
|-&lt;br /&gt;
| 1 [[Byte|Bytes]]||Empty string terminator&lt;br /&gt;
|}&lt;br /&gt;
===Packet ID ===&lt;br /&gt;
The packet id field is a 32-bit little endian integer which is specified by the requesting client for each request. Its value can be any positive integer. When the server responds to a client request it will send back the same packet id it received for that command request allowing you match the original request to the server response. &lt;br /&gt;
===Packet Type===&lt;br /&gt;
The packet type field is represented by a 32-bit little endian integer. It the intended purpose of the packet.&lt;br /&gt;
{| class=&amp;quot;wikitable standard-table&amp;quot;&lt;br /&gt;
!Value||String Descriptor&lt;br /&gt;
|-&lt;br /&gt;
| 3|| SERVERDATA_AUTH&lt;br /&gt;
|-&lt;br /&gt;
|2||SERVERDATA_AUTH_RESPONSE&lt;br /&gt;
|-&lt;br /&gt;
|2||SERVERDATA_EXECCOMMAND&lt;br /&gt;
|-&lt;br /&gt;
|0|| SERVERDATA_RESPONSE_VALUE&lt;br /&gt;
|}&lt;br /&gt;
===Packet Body===&lt;br /&gt;
The packet body field is a null-terminated ASCII encoded string. The contents of the packet body vary by the executed request.&lt;br /&gt;
===Packet Types===&lt;br /&gt;
====&#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039;====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; is the first packet to be sent by a newly connected client. It is used to authenticate with the RCON server and gain access to the &#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039; request. The values of this packet type&#039;s fields are as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
| any positive integer, chosen by the client (will be mirrored back in the server&#039;s response)&lt;br /&gt;
|-&lt;br /&gt;
| Type&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
|the RCON password of the server (If this field matches the password set in the Network configuration the auth request will succeed)&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: If the password is not properly configured on the server all &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; requests will be refused.&lt;br /&gt;
====&#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039;====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039; is the response notification packet of a client&#039;s &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; request and contains the results of its authentication attempt. The status is represented by the id of the packet. A -1 value denotes a failed authentication request. If authentication was a success it matches the packet id provided in the original authentication request.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|The ID of the original authentication request if it was successful, otherwise -1 on failure.&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
|Empty string (0x00)&lt;br /&gt;
|}&lt;br /&gt;
====&#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039;====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039; represents a command issued to the server by a client. This can be any valid player or admin command that does not require a physical player in the world to execute. The response will vary depending on the command issued.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|any positive integer, chosen by the client (will be mirrored back in the server&#039;s response)&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
| the command to be executed on the server&lt;br /&gt;
|}&lt;br /&gt;
====&#039;&#039;&#039;SERVERDATA_RESPONSE_VALUE&#039;&#039;&#039;====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_RESPONSE_VALUE&#039;&#039;&#039; is sent when a command had finished executing from a &#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039; request and contains the chat displayed results of the requested command. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|The ID assigned by the original request&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
|The server&#039;s response to the original command.&lt;br /&gt;
|}&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
[[Category:Server Management]]&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=RCON&amp;diff=7010</id>
		<title>RCON</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=RCON&amp;diff=7010"/>
		<updated>2021-04-29T16:35:49Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: Fixed formatting error&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Eco RCON Protocol ==&lt;br /&gt;
The Eco RCON Protocol is a TCP based communication protocol loosely based on the Source RCON Protocol standard. It allows admin commands to be issued to the server via a &amp;quot;remote console&amp;quot;. The most common use of RCON is to allow server owners to control their game servers without being in game for easy administration or automated processes.&lt;br /&gt;
== Using Eco RCON ==&lt;br /&gt;
By default, Eco&#039;s RCON implementation listens on TCP port 3002. This setting can be changed inside the Network plugin configuration options as well as the IP/host address the RCON server binds to. To use RCON a valid password must be set inside the Network plugin configuration. Servers without a valid password will reject all incoming authentication requests.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Most standard tools/libraries for communicating with standard RCON will work with Eco RCON. A short list of known working tools and libraries can be found below&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;&lt;br /&gt;
* https://github.com/n0la/rcon (RCON command line tool)&lt;br /&gt;
&#039;&#039;&#039;Libraries&#039;&#039;&#039;&lt;br /&gt;
* [https://github.com/Subtixx/source-rcon-library https://github.com/Subtixx/source-rcon-library (C# Library)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All command requests sent through RCON are executed with server admin permissions. For best practice its advised you keep your RCON information secure and only let trusted users or trusted programs access your RCON server. &lt;br /&gt;
== Establishing a Connection ==&lt;br /&gt;
To establish a TCP connection to an Eco RCON server you need to know the server&#039;s configured RCON port and the server&#039;s configured password and connect via a standard TCP client. Once connected you must authenticate your selves by sending a &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; packet. Failure to do so will result in no response. If your authentication request was successful you should receive back a &#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039; packet with a matching id of the authentication request packet. Receiving an packet id of -1 means the authentication request has failed. An authentication request can fail if the password is incorrect, misconfigured, or if there is already an active RCON client connection.&lt;br /&gt;
== Packet Structure ==&lt;br /&gt;
=== Basic Packet Structure ===&lt;br /&gt;
All Eco RCON packets payloads follow this basic structure and are sent over a TCP socket&lt;br /&gt;
{| class=&amp;quot;wikitable standard-table&amp;quot;&lt;br /&gt;
!Field||Type|||Value&lt;br /&gt;
|-&lt;br /&gt;
|Size||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|ID||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Type||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Body||[[wiki:Null-terminated string|Null-terminated]] [[wiki:ASCII|ASCII]] [[String]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Empty String||[[wiki:Null-terminated string|Null-terminated]] [[wiki:ASCII|ASCII]] [[String]]||0x00&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
=== Packet Size ===&lt;br /&gt;
The RCON packet size field is represented by a 32-bit little endian integer, It represents the total length of the request in bytes. Note that the &#039;&#039;&#039;packet size&#039;&#039;&#039; field itself is &#039;&#039;&#039;not&#039;&#039;&#039; included when determining the size of the packet, so the value of this field is always 4 less than the packet&#039;s actual length. The minimum possible value for &#039;&#039;&#039;packet size&#039;&#039;&#039; is 14.&lt;br /&gt;
{| class=&amp;quot;wikitable standard-table&amp;quot;&lt;br /&gt;
!Size||Containing&lt;br /&gt;
|-&lt;br /&gt;
|4 [[Byte|Bytes]]||ID Field&lt;br /&gt;
|-&lt;br /&gt;
|4 [[Byte|Bytes]]||Type Field&lt;br /&gt;
|-&lt;br /&gt;
|At least 1 [[Byte]]||Packet body (potentially empty)&lt;br /&gt;
|-&lt;br /&gt;
|1 [[Byte|Bytes]]||Empty string terminator&lt;br /&gt;
|}&lt;br /&gt;
=== Packet ID ===&lt;br /&gt;
The packet id field is a 32-bit little endian integer which is specified by the requesting client for each request. Its value can be any positive integer. When the server responds to a client request it will send back the same packet id it received for that command request allowing you match the original request to the server response. &lt;br /&gt;
=== Packet Type ===&lt;br /&gt;
The packet type field is represented by a 32-bit little endian integer. It the intended purpose of the packet.&lt;br /&gt;
{| class=&amp;quot;wikitable standard-table&amp;quot;&lt;br /&gt;
! Value || String Descriptor&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SERVERDATA_AUTH&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SERVERDATA_AUTH_RESPONSE&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SERVERDATA_EXECCOMMAND&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SERVERDATA_RESPONSE_VALUE&lt;br /&gt;
|}&lt;br /&gt;
=== Packet Body ===&lt;br /&gt;
The packet body field is a null-terminated ASCII encoded string. The contents of the packet body vary by the executed request.&lt;br /&gt;
=== Packet Types ===&lt;br /&gt;
==== &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; ====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; is the first packet to be sent by a newly connected client. It is used to authenticate with the RCON server and gain access to the &#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039; request. The values of this packet type&#039;s fields are as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|any positive integer, chosen by the client (will be mirrored back in the server&#039;s response)&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
|the RCON password of the server (If this field matches the password set in the Network configuration the auth request will succeed)&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: If the password is not properly configured on the server all &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; requests will be refused.&lt;br /&gt;
==== &#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039; ====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039; is the response notification packet of a client&#039;s &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; request and contains the results of its authentication attempt. The status is represented by the id of the packet. A -1 value denotes a failed authentication request. If authentication was a success it matches the packet id provided in the original authentication request.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|The ID of the original authentication request if it was successful, otherwise -1 on failure.&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
|Empty string (0x00)&lt;br /&gt;
|}&lt;br /&gt;
====&#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039;====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039; represents a command issued to the server by a client. This can be any valid player or admin command that does not require a physical player in the world to execute. The response will vary depending on the command issued.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|any positive integer, chosen by the client (will be mirrored back in the server&#039;s response)&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
|the command to be executed on the server&lt;br /&gt;
|}&lt;br /&gt;
====&#039;&#039;&#039;SERVERDATA_RESPONSE_VALUE&#039;&#039;&#039;====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_RESPONSE_VALUE&#039;&#039;&#039; is sent when a command had finished executing from a &#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039; request and contains the chat displayed results of the requested command. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|The ID assigned by the original request&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
|The server&#039;s response to the original command.&lt;br /&gt;
|}&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
[[Category:Server Management]]&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=RCON&amp;diff=7009</id>
		<title>RCON</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=RCON&amp;diff=7009"/>
		<updated>2021-04-29T16:34:41Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: Added packet types doc&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Eco RCON Protocol ==&lt;br /&gt;
The Eco RCON Protocol is a TCP based communication protocol loosely based on the Source RCON Protocol standard. It allows admin commands to be issued to the server via a &amp;quot;remote console&amp;quot;. The most common use of RCON is to allow server owners to control their game servers without being in game for easy administration or automated processes.&lt;br /&gt;
== Using Eco RCON ==&lt;br /&gt;
By default, Eco&#039;s RCON implementation listens on TCP port 3002. This setting can be changed inside the Network plugin configuration options as well as the IP/host address the RCON server binds to. To use RCON a valid password must be set inside the Network plugin configuration. Servers without a valid password will reject all incoming authentication requests.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Most standard tools/libraries for communicating with standard RCON will work with Eco RCON. A short list of known working tools and libraries can be found below&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* https://github.com/n0la/rcon (RCON command line tool)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Libraries&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/Subtixx/source-rcon-library https://github.com/Subtixx/source-rcon-library (C# Library)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All command requests sent through RCON are executed with server admin permissions. For best practice its advised you keep your RCON information secure and only let trusted users or trusted programs access your RCON server.  &lt;br /&gt;
== Establishing a Connection ==&lt;br /&gt;
To establish a TCP connection to an Eco RCON server you need to know the server&#039;s configured RCON port and the server&#039;s configured password and connect via a standard TCP client. Once connected you must authenticate your selves by sending a &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; packet. Failure to do so will result in no response. If your authentication request was successful you should receive back a &#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039; packet with a matching id of the authentication request packet. Receiving an packet id of -1 means the authentication request has failed. An authentication request can fail if the password is incorrect, misconfigured, or if there is already an active RCON client connection.&lt;br /&gt;
== Packet Structure ==&lt;br /&gt;
=== Basic Packet Structure ===&lt;br /&gt;
All Eco RCON packets payloads follow this basic structure and are sent over a TCP socket&lt;br /&gt;
{| class=&amp;quot;wikitable standard-table&amp;quot;&lt;br /&gt;
!Field||Type|||Value&lt;br /&gt;
|-&lt;br /&gt;
|Size||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|ID||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Type||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Body||[[wiki:Null-terminated string|Null-terminated]] [[wiki:ASCII|ASCII]] [[String]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Empty String||[[wiki:Null-terminated string|Null-terminated]] [[wiki:ASCII|ASCII]] [[String]]||0x00&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
=== Packet Size ===&lt;br /&gt;
The RCON packet size field is represented by a 32-bit little endian integer, It represents the total length of the request in bytes. Note that the &#039;&#039;&#039;packet size&#039;&#039;&#039; field itself is &#039;&#039;&#039;not&#039;&#039;&#039; included when determining the size of the packet, so the value of this field is always 4 less than the packet&#039;s actual length. The minimum possible value for &#039;&#039;&#039;packet size&#039;&#039;&#039; is 14.&lt;br /&gt;
{| class=&amp;quot;wikitable standard-table&amp;quot;&lt;br /&gt;
!Size||Containing&lt;br /&gt;
|-&lt;br /&gt;
|4 [[Byte|Bytes]]||ID Field&lt;br /&gt;
|-&lt;br /&gt;
|4 [[Byte|Bytes]]||Type Field&lt;br /&gt;
|-&lt;br /&gt;
|At least 1 [[Byte]]||Packet body (potentially empty)&lt;br /&gt;
|-&lt;br /&gt;
|1 [[Byte|Bytes]]||Empty string terminator&lt;br /&gt;
|}&lt;br /&gt;
=== Packet ID ===&lt;br /&gt;
The packet id field is a 32-bit little endian integer which is specified by the requesting client for each request. Its value can be any positive integer. When the server responds to a client request it will send back the same packet id it received for that command request allowing you match the original request to the server response. &lt;br /&gt;
=== Packet Type ===&lt;br /&gt;
The packet type field is represented by a 32-bit little endian integer. It the intended purpose of the packet.&lt;br /&gt;
{| class=&amp;quot;wikitable standard-table&amp;quot;&lt;br /&gt;
! Value || String Descriptor&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SERVERDATA_AUTH&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SERVERDATA_AUTH_RESPONSE&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SERVERDATA_EXECCOMMAND&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SERVERDATA_RESPONSE_VALUE&lt;br /&gt;
|}&lt;br /&gt;
=== Packet Body ===&lt;br /&gt;
The packet body field is a null-terminated ASCII encoded string. The contents of the packet body vary by the executed request.&lt;br /&gt;
&lt;br /&gt;
=== Packet Types ===&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; ====&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; is the first packet to be sent by a newly connected client. It is used to authenticate with the RCON server and gain access to the &#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039; request. The values of this packet type&#039;s fields are as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|any positive integer, chosen by the client (will be mirrored back in the server&#039;s response)&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
|the RCON password of the server (If this field matches the password set in the Network configuration the auth request will succeed)&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: If the password is not properly configured on the server all &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; requests will be refused.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039; ===&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039; is the response notification packet of a client&#039;s &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; request and contains the results of its authentication attempt. The status is represented by the id of the packet. A -1 value denotes a failed authentication request. If authentication was a success it matches the packet id provided in the original authentication request.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|The ID of the original authentication request if it was successful, otherwise -1 on failure.&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
|Empty string (0x00)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039; ===&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039; represents a command issued to the server by a client. This can be any valid player or admin command that does not require a physical player in the world to execute. The response will vary depending on the command issued.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|any positive integer, chosen by the client (will be mirrored back in the server&#039;s response)&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
|the command to be executed on the server&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;SERVERDATA_RESPONSE_VALUE&#039;&#039;&#039; ===&lt;br /&gt;
&#039;&#039;&#039;SERVERDATA_RESPONSE_VALUE&#039;&#039;&#039; is sent when a command had finished executing from a &#039;&#039;&#039;SERVERDATA_EXECCOMMAND&#039;&#039;&#039; request and contains the chat displayed results of the requested command. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Field&lt;br /&gt;
!Contains&lt;br /&gt;
|-&lt;br /&gt;
|ID&lt;br /&gt;
|The ID assigned by the original request&lt;br /&gt;
|-&lt;br /&gt;
|Type&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|Body&lt;br /&gt;
|The server&#039;s response to the original command.&lt;br /&gt;
|}&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
[[Category:Server Management]]&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=RCON&amp;diff=7001</id>
		<title>RCON</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=RCON&amp;diff=7001"/>
		<updated>2021-04-29T04:00:47Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: Set proper category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Eco RCON Protocol ==&lt;br /&gt;
The Eco RCON Protocol is a TCP based communication protocol loosely based on the Source RCON Protocol standard. It allows admin commands to be issued to the server via a &amp;quot;remote console&amp;quot;. The most common use of RCON is to allow server owners to control their game servers without being in game for easy administration or automated processes.&lt;br /&gt;
== Using Eco RCON ==&lt;br /&gt;
By default, Eco&#039;s RCON implementation listens on TCP port 3002. This setting can be changed inside the Network plugin configuration options as well as the IP/host address the RCON server binds to. To use RCON a valid password must be set inside the Network plugin configuration. Servers without a valid password will reject all incoming authentication requests.&lt;br /&gt;
== Establishing a Connection ==&lt;br /&gt;
To establish a TCP connection to an Eco RCON server you need to know the server&#039;s configured RCON port and the server&#039;s configured password and connect via a standard TCP client. Once connected you must authenticate your selves by sending a &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; packet. Failure to do so will result in no response. If your authentication request was successful you should receive back a &#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039; packet with a matching id of the authentication request packet. Receiving an packet id of -1 means the authentication request has failed. An authentication request can fail if the password is incorrect, misconfigured, or if there is already an active RCON client connection.&lt;br /&gt;
== Packet Structure ==&lt;br /&gt;
=== Basic Packet Structure ===&lt;br /&gt;
All Eco RCON packets payloads follow this basic structure and are sent over a TCP socket&lt;br /&gt;
{| class=&amp;quot;standard-table&amp;quot;&lt;br /&gt;
!Field||Type|||Value&lt;br /&gt;
|-&lt;br /&gt;
|Size||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|ID||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Type||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Body||[[wiki:Null-terminated string|Null-terminated]] [[wiki:ASCII|ASCII]] [[String]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Empty String||[[wiki:Null-terminated string|Null-terminated]] [[wiki:ASCII|ASCII]] [[String]]||0x00&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
=== Packet Size ===&lt;br /&gt;
The RCON packet size field is represented by a 32-bit little endian integer, It represents the total length of the request in bytes. Note that the &#039;&#039;&#039;packet size&#039;&#039;&#039; field itself is &#039;&#039;&#039;not&#039;&#039;&#039; included when determining the size of the packet, so the value of this field is always 4 less than the packet&#039;s actual length. The minimum possible value for &#039;&#039;&#039;packet size&#039;&#039;&#039; is 14.&lt;br /&gt;
{| class=&amp;quot;standard-table&amp;quot;&lt;br /&gt;
!Size||Containing&lt;br /&gt;
|-&lt;br /&gt;
|4 [[Byte|Bytes]]||ID Field&lt;br /&gt;
|-&lt;br /&gt;
|4 [[Byte|Bytes]]||Type Field&lt;br /&gt;
|-&lt;br /&gt;
|At least 1 [[Byte]]||Packet body (potentially empty)&lt;br /&gt;
|-&lt;br /&gt;
|1 [[Byte|Bytes]]||Empty string terminator&lt;br /&gt;
|}&lt;br /&gt;
=== Packet ID ===&lt;br /&gt;
The packet id field is a 32-bit little endian integer which is specified by the requesting client for each request. Its value can be any positive integer. When the server responds to a client request it will send back the same packet id it received for that command request allowing you match the original request to the server response. &lt;br /&gt;
=== Packet Type ===&lt;br /&gt;
The packet type field is represented by a 32-bit little endian integer. It the intended purpose of the packet.&lt;br /&gt;
{| class=standard-table&lt;br /&gt;
! Value || String Descriptor&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SERVERDATA_AUTH&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SERVERDATA_AUTH_RESPONSE&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SERVERDATA_EXECCOMMAND&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SERVERDATA_RESPONSE_VALUE&lt;br /&gt;
|}&lt;br /&gt;
=== Packet Body ===&lt;br /&gt;
The packet body field is a null-terminated ASCII encoded string. The contents of the packet body vary by the executed request.&lt;br /&gt;
[[Category:Modding]]&lt;br /&gt;
__NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=RCON&amp;diff=7000</id>
		<title>RCON</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=RCON&amp;diff=7000"/>
		<updated>2021-04-29T03:57:49Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Eco RCON Protocol ==&lt;br /&gt;
The Eco RCON Protocol is a TCP based communication protocol loosely based on the Source RCON Protocol standard. It allows admin commands to be issued to the server via a &amp;quot;remote console&amp;quot;. The most common use of RCON is to allow server owners to control their game servers without being in game for easy administration or automated processes.&lt;br /&gt;
== Using Eco RCON ==&lt;br /&gt;
By default, Eco&#039;s RCON implementation listens on TCP port 3002. This setting can be changed inside the Network plugin configuration options as well as the IP/host address the RCON server binds to. To use RCON a valid password must be set inside the Network plugin configuration. Servers without a valid password will reject all incoming authentication requests.&lt;br /&gt;
== Establishing a Connection ==&lt;br /&gt;
To establish a TCP connection to an Eco RCON server you need to know the server&#039;s configured RCON port and the server&#039;s configured password and connect via a standard TCP client. Once connected you must authenticate your selves by sending a &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; packet. Failure to do so will result in no response. If your authentication request was successful you should receive back a &#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039; packet with a matching id of the authentication request packet. Receiving an packet id of -1 means the authentication request has failed. An authentication request can fail if the password is incorrect, misconfigured, or if there is already an active RCON client connection.&lt;br /&gt;
== Packet Structure ==&lt;br /&gt;
=== Basic Packet Structure ===&lt;br /&gt;
All Eco RCON packets payloads follow this basic structure and are sent over a TCP socket&lt;br /&gt;
{| class=&amp;quot;standard-table&amp;quot;&lt;br /&gt;
!Field||Type|||Value&lt;br /&gt;
|-&lt;br /&gt;
|Size||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|ID||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Type||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Body||[[wiki:Null-terminated string|Null-terminated]] [[wiki:ASCII|ASCII]] [[String]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Empty String||[[wiki:Null-terminated string|Null-terminated]] [[wiki:ASCII|ASCII]] [[String]]||0x00&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
=== Packet Size ===&lt;br /&gt;
The RCON packet size field is represented by a 32-bit little endian integer, It represents the total length of the request in bytes. Note that the &#039;&#039;&#039;packet size&#039;&#039;&#039; field itself is &#039;&#039;&#039;not&#039;&#039;&#039; included when determining the size of the packet, so the value of this field is always 4 less than the packet&#039;s actual length. The minimum possible value for &#039;&#039;&#039;packet size&#039;&#039;&#039; is 14.&lt;br /&gt;
{| class=&amp;quot;standard-table&amp;quot;&lt;br /&gt;
!Size||Containing&lt;br /&gt;
|-&lt;br /&gt;
|4 [[Byte|Bytes]]||ID Field&lt;br /&gt;
|-&lt;br /&gt;
|4 [[Byte|Bytes]]||Type Field&lt;br /&gt;
|-&lt;br /&gt;
|At least 1 [[Byte]]||Packet body (potentially empty)&lt;br /&gt;
|-&lt;br /&gt;
|1 [[Byte|Bytes]]||Empty string terminator&lt;br /&gt;
|}&lt;br /&gt;
=== Packet ID ===&lt;br /&gt;
&lt;br /&gt;
The packet id field is a 32-bit little endian integer which is specified by the requesting client for each request. Its value can be any positive integer. When the server responds to a client request it will send back the same packet id it received for that command request allowing you match the original request to the server response. &lt;br /&gt;
=== Packet Type ===&lt;br /&gt;
The packet type field is represented by a 32-bit little endian integer. It the intended purpose of the packet.&lt;br /&gt;
{| class=standard-table&lt;br /&gt;
! Value || String Descriptor&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SERVERDATA_AUTH&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SERVERDATA_AUTH_RESPONSE&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SERVERDATA_EXECCOMMAND&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SERVERDATA_RESPONSE_VALUE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Packet Body ===&lt;br /&gt;
The packet body field is a null-terminated ASCII encoded string. The contents of the packet body vary by the executed request.&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
	<entry>
		<id>https://wiki.play.eco/en/index.php?title=RCON&amp;diff=6999</id>
		<title>RCON</title>
		<link rel="alternate" type="text/html" href="https://wiki.play.eco/en/index.php?title=RCON&amp;diff=6999"/>
		<updated>2021-04-29T03:53:09Z</updated>

		<summary type="html">&lt;p&gt;Thetestgame: Created page with &amp;quot;== Eco RCON Protocol == The Eco RCON Protocol is a TCP based communication protocol loosely based on the Source RCON Protocol standard. It allows admin commands to be issued t...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Eco RCON Protocol ==&lt;br /&gt;
The Eco RCON Protocol is a TCP based communication protocol loosely based on the Source RCON Protocol standard. It allows admin commands to be issued to the server via a &amp;quot;remote console&amp;quot;. The most common use of RCON is to allow server owners to control their game servers without being in game for easy administration or automated processes.&lt;br /&gt;
&lt;br /&gt;
== Using Eco RCON ==&lt;br /&gt;
By default, Eco&#039;s RCON implementation listens on TCP port 3002. This setting can be changed inside the Network plugin configuration options as well as the IP/host address the RCON server binds to.  To use RCON a valid password must be set inside the Network plugin configuration. Servers without a valid password will reject all incoming authentication requests.&lt;br /&gt;
&lt;br /&gt;
== Establishing a Connection ==&lt;br /&gt;
To establish a TCP connection to an Eco RCON server you need to know the server&#039;s configured RCON port and the server&#039;s configured password and connect via a standard TCP client. Once connected you must authenticate your selves by sending a &#039;&#039;&#039;SERVERDATA_AUTH&#039;&#039;&#039; packet. Failure to do so will result in no response. If your authentication request was successful you should receive back a &#039;&#039;&#039;SERVERDATA_AUTH_RESPONSE&#039;&#039;&#039; packet with a matching id of the authentication request packet. Receiving an packet id of -1 means the authentication request has failed. An authentication request can fail if the password is incorrect, misconfigured, or if there is already an active RCON client connection.&lt;br /&gt;
&lt;br /&gt;
== Packet Structure ==&lt;br /&gt;
&lt;br /&gt;
=== Basic Packet Structure ===&lt;br /&gt;
All Eco RCON packets payloads follow this basic structure and are sent over a TCP socket&lt;br /&gt;
{| class=&amp;quot;standard-table&amp;quot;&lt;br /&gt;
!Field||Type|||Value&lt;br /&gt;
|-&lt;br /&gt;
|Size||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|ID||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Type||32-bit [[wiki:Endianness|little-endian]] Signed [[Integer]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Body||[[wiki:Null-terminated string|Null-terminated]] [[wiki:ASCII|ASCII]] [[String]]||Varies, see below.&lt;br /&gt;
|-&lt;br /&gt;
|Empty String||[[wiki:Null-terminated string|Null-terminated]] [[wiki:ASCII|ASCII]] [[String]]||0x00&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Packet Size ===&lt;br /&gt;
The RCON packet size field is represented by a 32-bit little endian integer, It represents the total length of the request in bytes.  Note that the &#039;&#039;&#039;packet size&#039;&#039;&#039; field itself is &#039;&#039;&#039;not&#039;&#039;&#039; included when determining the size of the packet, so the value of this field is always 4 less than the packet&#039;s actual length. The minimum possible value for &#039;&#039;&#039;packet size&#039;&#039;&#039; is 14.&lt;br /&gt;
{| class=&amp;quot;standard-table&amp;quot;&lt;br /&gt;
!Size||Containing&lt;br /&gt;
|-&lt;br /&gt;
|4 [[Byte|Bytes]]||ID Field&lt;br /&gt;
|-&lt;br /&gt;
|4 [[Byte|Bytes]]||Type Field&lt;br /&gt;
|-&lt;br /&gt;
|At least 1 [[Byte]]||Packet body (potentially empty)&lt;br /&gt;
|-&lt;br /&gt;
|1 [[Byte|Bytes]]||Empty string terminator&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Packet ID ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Packet Type ===&lt;br /&gt;
{| class=standard-table&lt;br /&gt;
! Value || String Descriptor&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SERVERDATA_AUTH&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SERVERDATA_AUTH_RESPONSE&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SERVERDATA_EXECCOMMAND&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SERVERDATA_RESPONSE_VALUE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Packet Body ===&lt;br /&gt;
&lt;br /&gt;
== Packet Types ==&lt;/div&gt;</summary>
		<author><name>Thetestgame</name></author>
	</entry>
</feed>