示例#1
0
        public override void Start(ICoreAPI api)
        {
            base.Start(api);
            this.Api     = api;
            this.wireMod = api.ModLoader.GetModSystem <HangingWiresMod>();

            if (api.World is IClientWorldAccessor)
            {
                //(api as ICoreClientAPI).Event.RegisterRenderer(this, EnumRenderStage.Before, "signalnetworktick");
                clientNetworkChannel =
                    ((ICoreClientAPI)api).Network.RegisterChannel("signalnetwork");
                //.RegisterMessageType(typeof(MechNetworkPacket))
                //.RegisterMessageType(typeof(NetworkRemovedPacket))
                //.RegisterMessageType(typeof(MechClientRequestPacket))
                //.SetMessageHandler<MechNetworkPacket>(OnPacket)
                //.SetMessageHandler<NetworkRemovedPacket>(OnNetworkRemovePacket);
            }
            else
            {
                api.World.RegisterGameTickListener(OnServerGameTick, 20);
                serverNetworkChannel =
                    ((ICoreServerAPI)api).Network.RegisterChannel("signalnetwork");
                //.RegisterMessageType(typeof(MechNetworkPacket))
                //.RegisterMessageType(typeof(NetworkRemovedPacket))
                //.RegisterMessageType(typeof(MechClientRequestPacket))
                //.SetMessageHandler<MechClientRequestPacket>(OnClientRequestPacket);
            }
        }
        public override void StartClientSide(ICoreClientAPI api)
        {
            capi = api;
            api.Event.RegisterEventBusListener(OnConfigEventClient, 0.5, "configTeleporter");

            clientChannel =
                api.Network.RegisterChannel("tpManager")
                .RegisterMessageType(typeof(TpLocations))
                .RegisterMessageType(typeof(TeleporterLocation))
                .SetMessageHandler <TpLocations>(OnLocationsReceived)
            ;

            if (teleportingSound == null)
            {
                teleportingSound = ((IClientWorldAccessor)api.World).LoadSound(new SoundParams()
                {
                    Location         = new AssetLocation("sounds/block/teleporter.ogg"),
                    ShouldLoop       = true,
                    Position         = null,
                    RelativePosition = true,
                    DisposeOnFinish  = false,
                    Volume           = 1
                });
            }

            api.Event.RegisterGameTickListener(OnClientTick, 50);
            api.Event.LeaveWorld += () => teleportingSound?.Dispose();
        }
        public override void StartClientSide(ICoreClientAPI api)
        {
            base.StartClientSide(api);

            capi = api;
            capi.Event.BlockTexturesLoaded += OnLoaded;
            capi.Event.LevelFinalize       += OnLvlFinalize;

            capi.Settings.AddWatcher <bool>("showMinimapHud", (on) => {
                ToggleMap(EnumDialogType.HUD);
            });

            capi.Event.LeaveWorld += () =>
            {
                isShuttingDown = true;
                worldMapDlg?.Dispose();

                foreach (var layer in MapLayers)
                {
                    layer?.Dispose();
                }
            };

            clientChannel =
                api.Network.RegisterChannel("worldmap")
                .RegisterMessageType(typeof(MapLayerUpdate))
                .RegisterMessageType(typeof(OnViewChangedPacket))
                .RegisterMessageType(typeof(OnMapToggle))
                .SetMessageHandler <MapLayerUpdate>(OnMapLayerDataReceivedClient)
            ;
        }
        public ClientSkinNetwork(ICoreClientAPI api)
        {
            this.capi = api;

            this.clientNetworkChannel = api.Network.RegisterChannel("playerskins");
            this.clientNetworkChannel.RegisterMessageType(typeof(SkinChange));
        }
示例#5
0
        public override void StartClientSide(ICoreClientAPI capi)
        {
            this.capi = capi;
            base.Initialize();

            clientChannel =
                capi.Network.GetChannel("weather")
                .SetMessageHandler <WeatherState>(OnWeatherUpdatePacket)
                .SetMessageHandler <WeatherConfigPacket>(OnWeatherConfigUpdatePacket)
                .SetMessageHandler <WeatherPatternAssetsPacket>(OnAssetsPacket)
            ;

            capi.Event.RegisterGameTickListener(OnClientGameTick, 50);

            capi.Event.LevelFinalize += LevelFinalizeInit;

            capi.Event.RegisterRenderer(this, EnumRenderStage.Before, "weatherSystem");
            capi.Event.RegisterRenderer(this, EnumRenderStage.Done, "weatherSystem");
            capi.Event.LeaveWorld   += () => cloudRenderer?.Dispose();
            capi.Event.OnGetClimate += Event_OnGetClimate;

            simSounds      = new WeatherSimulationSound(capi as ICoreClientAPI, this);
            simParticles   = new WeatherSimulationParticles(capi as ICoreClientAPI, this);
            simLightning   = new WeatherSimulationLightning(capi as ICoreClientAPI, this);
            auroraRenderer = new AuroraRenderer(capi as ICoreClientAPI, this);
        }
        public override void Start(ICoreAPI api)
        {
            base.Start(api);

            this.Api = api;

            if (api.World is IClientWorldAccessor)
            {
                (api as ICoreClientAPI).Event.RegisterRenderer(this, EnumRenderStage.Before, "mechanicalpowertick");

                clientNwChannel =
                    ((ICoreClientAPI)api).Network.RegisterChannel("vsmechnetwork")
                    .RegisterMessageType(typeof(MechNetworkPacket))
                    .RegisterMessageType(typeof(NetworkRemovedPacket))
                    .RegisterMessageType(typeof(MechClientRequestPacket))
                    .SetMessageHandler <MechNetworkPacket>(OnPacket)
                    .SetMessageHandler <NetworkRemovedPacket>(OnNetworkRemovePacket)
                ;
            }
            else
            {
                api.World.RegisterGameTickListener(OnServerGameTick, 20);
                serverNwChannel =
                    ((ICoreServerAPI)api).Network.RegisterChannel("vsmechnetwork")
                    .RegisterMessageType(typeof(MechNetworkPacket))
                    .RegisterMessageType(typeof(NetworkRemovedPacket))
                    .RegisterMessageType(typeof(MechClientRequestPacket))
                    .SetMessageHandler <MechClientRequestPacket>(OnClientRequestPacket)
                ;
            }
        }
        public override void StartClientSide(ICoreClientAPI api)
        {
            base.StartClientSide(api);

            capi = api;
            capi.Input.RegisterHotKey("worldmaphud", "World Map HUD (Small overlay)", GlKeys.F6, HotkeyType.GeneralControls);
            capi.Input.RegisterHotKey("worldmapdialog", "World Map Dialog", GlKeys.M, HotkeyType.GeneralControls);
            capi.Input.SetHotKeyHandler("worldmaphud", OnHotKeyWorldMapHud);
            capi.Input.SetHotKeyHandler("worldmapdialog", OnHotKeyWorldMapDlg);
            capi.Event.BlockTexturesLoaded += OnLoaded;
            capi.Event.LevelFinalize       += OnLvlFinalize;

            capi.Event.LeaveWorld += () =>
            {
                isShuttingDown = true;
                worldMapDlg?.Dispose();
            };

            clientChannel =
                api.Network.RegisterChannel("worldmap")
                .RegisterMessageType(typeof(MapLayerData[]))
                .RegisterMessageType(typeof(OnViewChangedPacket))
                .RegisterMessageType(typeof(OnMapToggle))
                .SetMessageHandler <MapLayerData[]>(OnMapLayerDataReceivedClient)
            ;
        }
示例#8
0
        public WorldEditClientHandler(ICoreClientAPI capi)
        {
            this.capi = capi;
            capi.RegisterCommand("we", "World edit toolbar", "", CmdEditClient);
            capi.Input.RegisterHotKey("worldedit", "World Edit", GlKeys.Tilde, HotkeyType.CreativeTool);
            capi.Input.SetHotKeyHandler("worldedit", OnHotkeyWorldEdit);
            capi.Event.LeaveWorld += Event_LeaveWorld;
            capi.Event.FileDrop   += Event_FileDrop;

            clientChannel =
                capi.Network.RegisterChannel("worldedit")
                .RegisterMessageType(typeof(RequestWorkSpacePacket))
                .RegisterMessageType(typeof(WorldEditWorkspace))
                .RegisterMessageType(typeof(ChangePlayerModePacket))
                .RegisterMessageType(typeof(CopyToClipboardPacket))
                .RegisterMessageType(typeof(SchematicJsonPacket))
                .SetMessageHandler <WorldEditWorkspace>(OnServerWorkspace)
                .SetMessageHandler <CopyToClipboardPacket>(OnClipboardCopy)
                .SetMessageHandler <SchematicJsonPacket>(OnReceivedSchematic)
            ;

            if (!capi.Settings.Int.Exists("schematicMaxUploadSizeKb"))
            {
                capi.Settings.Int["schematicMaxUploadSizeKb"] = 75;
            }
        }
示例#9
0
        public override void StartClientSide(ICoreClientAPI api)
        {
            this.capi = api;
            this.api  = api;

            clientChannel =
                api.Network.RegisterChannel("gameeffects")
                .RegisterMessageType(typeof(GameEffectsPacket))
                .SetMessageHandler <GameEffectsPacket>(OnGameEffectToggle)
            ;

            blackAirParticles = new SimpleParticleProperties()
            {
                color                = ColorUtil.ToRgba(150, 50, 25, 15),
                model                = EnumParticleModel.Quad,
                minSize              = 0.1f,
                maxSize              = 1f,
                gravityEffect        = 0,
                lifeLength           = 1.2f,
                WithTerrainCollision = false,
                ShouldDieInLiquid    = true,
                minVelocity          = new Vec3f(-5f, 10f, -3f),
                minQuantity          = 1,
                addQuantity          = 0,
            };
            blackAirParticles.addVelocity   = new Vec3f(0f, 30f, 0);
            blackAirParticles.OpacityEvolve = EvolvingNatFloat.create(EnumTransformFunction.QUADRATIC, -8);

            api.Event.RegisterRenderer(this, EnumRenderStage.Before, "gameeffects");
        }
        public override void StartClientSide(ICoreClientAPI api)
        {
            base.StartClientSide(api);

            clientChannel = api.Network
                            .RegisterChannel("blockreinforcement")
                            .RegisterMessageType(typeof(ChunkReinforcementData))
                            .SetMessageHandler <ChunkReinforcementData>(onData)
            ;
        }
        public override void StartClientSide(ICoreClientAPI api)
        {
            this.capi = api;

            clientChannel =
                api.Network.RegisterChannel("lootrandomizer")
                .RegisterMessageType(typeof(SaveLootRandomizerAttributes))
                .RegisterMessageType(typeof(SaveStackRandomizerAttributes))
            ;
        }
示例#12
0
 public override void StartClientSide(ICoreClientAPI api)
 {
     capi     = api;
     cChannel =
         capi.Network.RegisterChannel("sortchannel")
         .RegisterMessageType(typeof(SortMessage))
         .RegisterMessageType(typeof(SortResponse))
         .SetMessageHandler <SortMessage>(OnServerMessage);
     api.Event.PlayerJoin += RegisterSort;
 }
示例#13
0
        private void PlayerSitDown(IWorldAccessor world, IPlayer byPlayer, BlockPos chairPosition)
        {
            PlayerData playerData = PlayerManager.Instance.GetOrAddPlayerData(byPlayer);

            // Sets the player to the center of the chair
            Vec3d centerOfChair = chairPosition.ToVec3d().Add(0.5, 0.5, 0.5);

            byPlayer.Entity.Pos.SetPos(centerOfChair);

            // Set player's status to sitting
            playerData.TogglePlayerSitting();
            playerData.SatChairPos = chairPosition;

            // If there is a table next to chair, set player to face chair
            BlockPos adjacentTable = GetAdjacentTable(world, chairPosition);

            // Send packet to server to sync all clients
            IClientNetworkChannel networkChannel = (IClientNetworkChannel)api.Network.GetChannel("networksit");

            networkChannel.SendPacket(new NetworkAnimationSit()
            {
                isSitting = true, playerUID = byPlayer.PlayerUID
            });

            // Modify eye height
            byPlayer.Entity.Properties.SetEyeHeight(SITTINGEYEHEIGHT);

            // Set player's sitting direction
            if (adjacentTable != null)
            {
                if (byPlayer.Entity.Pos.AsBlockPos.East().Equals(adjacentTable))
                {
                    playerData.SetSittingDirection(Cardinal.East);
                    ((ICoreClientAPI)api).Input.MouseYaw = 0;
                }

                if (byPlayer.Entity.Pos.AsBlockPos.West().Equals(adjacentTable))
                {
                    playerData.SetSittingDirection(Cardinal.West);
                    ((ICoreClientAPI)api).Input.MouseYaw = 0.5f * GameMath.TWOPI;
                }

                if (byPlayer.Entity.Pos.AsBlockPos.South().Equals(adjacentTable))
                {
                    playerData.SetSittingDirection(Cardinal.South);
                    ((ICoreClientAPI)api).Input.MouseYaw = 0.75f * GameMath.TWOPI;
                }

                if (byPlayer.Entity.Pos.AsBlockPos.North().Equals(adjacentTable))
                {
                    playerData.SetSittingDirection(Cardinal.North);
                    ((ICoreClientAPI)api).Input.MouseYaw = 0.25f * GameMath.TWOPI;
                }
            }
        }
示例#14
0
        public override void StartClientSide(ICoreClientAPI api)
        {
            capi = api;

            clientChannel = api.Network
                            .RegisterChannel("tpnet")
                            .RegisterMessageType(typeof(ForTeleportingData))
                            .RegisterMessageType(typeof(TeleportMsg))
                            .SetMessageHandler <TeleportMsg>(OnClientReceiveTeleportMsg)
            ;
        }
示例#15
0
        /// <summary>
        /// Initializes the client side channel. Must be called at startup if SynchronizedBusSystem is disabled.
        /// </summary>
        /// <param name="capi">The Client API</param>
        public static void StartClientSide(ICoreClientAPI capi)
        {
            api = capi;

            if (clientChannel == null)
            {
                clientChannel = capi.Network.RegisterChannel("synchronizedbus")
                                .RegisterMessageType <SynchronizedEvent>()
                                .SetMessageHandler <SynchronizedEvent>(OnPacket);
            }
        }
示例#16
0
        public override void StartClientSide(ICoreClientAPI api)
        {
            clientApi = api;

            clientChannel =
                api.Network.RegisterChannel("networkapitest")
                .RegisterMessageType(typeof(NetworkApiTestMessage))
                .RegisterMessageType(typeof(NetworkApiTestResponse))
                .SetMessageHandler <NetworkApiTestMessage>(OnServerMessage)
            ;
        }
        public override void StartClientSide(ICoreClientAPI api)
        {
            base.StartClientSide(api);
            api.Event.BlockTexturesLoaded += LoadNoise;


            clientChannel =
                api.Network.RegisterChannel("temporalstability")
                .RegisterMessageType(typeof(TemporalStormRunTimeData))
                .SetMessageHandler <TemporalStormRunTimeData>(onServerData)
            ;
        }
示例#18
0
        public override void StartClientSide(ICoreClientAPI api)
        {
            this.capi = api;

            api.RegisterCommand("errorreporter", "Reopens the error reporting dialog", "[on|off]", ClientCmdErrorRep);

            api.Event.LevelFinalize += OnClientReady;
            clientChannel            =
                api.Network.RegisterChannel("errorreporter")
                .RegisterMessageType(typeof(ServerLogEntries))
                .SetMessageHandler <ServerLogEntries>(OnServerLogEntriesReceived)
            ;
        }
示例#19
0
        public override void StartClientSide(ICoreClientAPI api)
        {
            clientAPI = api;

            clientAPI.Event.MouseMove  += OnMouseMove;
            clientAPI.Event.KeyDown    += OnKeyDown;
            clientAPI.Event.PlayerJoin += OnPlayerJoinClient;

            clientChannel =
                api.Network.RegisterChannel("networksit")
                .RegisterMessageType(typeof(NetworkAnimationSit))
                .SetMessageHandler <NetworkAnimationSit>(OnServerMessage)
            ;
        }
        public override void StartClientSide(ICoreClientAPI api)
        {
            capi = api;
            api.Event.RegisterEventBusListener(OnConfigEventClient, 0.5, "configTeleporter");

            clientChannel =
                api.Network.RegisterChannel("tpManager")
                .RegisterMessageType(typeof(TpLocations))
                .RegisterMessageType(typeof(TeleporterLocation))
                .RegisterMessageType(typeof(DidTeleport))
                .SetMessageHandler <TpLocations>(OnLocationsReceived)
                .SetMessageHandler <DidTeleport>(OnTranslocateClient)
            ;
        }
示例#21
0
        public override void StartClientSide(ICoreClientAPI api)
        {
            this.capi = api;

            capi.Input.RegisterHotKey("journal", "Journal", GlKeys.J, HotkeyType.GUIOrOtherControls);
            capi.Input.SetHotKeyHandler("journal", OnHotkeyJournal);

            clientChannel =
                api.Network.RegisterChannel("journal")
                .RegisterMessageType(typeof(JournalEntry))
                .RegisterMessageType(typeof(Journal))
                .RegisterMessageType(typeof(JournalPiecce))
                .SetMessageHandler <Journal>(OnJournalItemsReceived)
                .SetMessageHandler <JournalEntry>(OnJournalItemReceived)
                .SetMessageHandler <JournalPiecce>(OnJournalPieceReceived)
            ;
        }
示例#22
0
        private void PlayerStandUp(IPlayer byPlayer)
        {
            // Modify eye height
            byPlayer.Entity.Properties.SetEyeHeight(DEFAULTEYEHEIGHT);

            // Set sitting direction to something not used
            playerManager.GetOrAddPlayerData(byPlayer).SetSittingDirection(Cardinal.SouthWest);

            // Send packet to server to sync all clients
            IClientNetworkChannel networkChannel = (IClientNetworkChannel)api.Network.GetChannel("networksit");

            networkChannel.SendPacket(new NetworkAnimationSit()
            {
                isSitting = false, playerUID = byPlayer.PlayerUID
            });

            // Set player's status to not sitting
            PlayerManager.Instance.GetOrAddPlayerData(byPlayer).TogglePlayerSitting();
        }
示例#23
0
        public override void StartClientSide(ICoreClientAPI api)
        {
            capi = api;
            api.Event.RegisterEventBusListener(OnConfigEventClient, 0.5, "configTeleporter");

            clientChannel =
                api.Network.RegisterChannel("tpManager")
                .RegisterMessageType(typeof(TpLocations))
                .RegisterMessageType(typeof(TeleporterLocation))
                .RegisterMessageType(typeof(DidTeleport))
                .SetMessageHandler <TpLocations>(OnLocationsReceived)
                .SetMessageHandler <DidTeleport>(OnTranslocateClient)
            ;


            api.Event.BlockTexturesLoaded += Event_BlockTexturesLoaded;
            api.Event.RegisterGameTickListener(OnClientTick, 50);
            api.Event.LeaveWorld += () => teleportingSound?.Dispose();
        }
示例#24
0
        public override void Start(ICoreAPI api)
        {
            base.Start(api);
            this.api = api;

            if (api.World is IClientWorldAccessor)
            {
                clientChannel = ((ICoreClientAPI)api).Network.RegisterChannel("hangingwires")
                                .RegisterMessageType(typeof(HangingWiresData))
                                .RegisterMessageType(typeof(AddConnectionPacket))
                                .SetMessageHandler <HangingWiresData>(onDataFromServer);
            }
            else
            {
                serverChannel = ((ICoreServerAPI)api).Network.RegisterChannel("hangingwires")
                                .RegisterMessageType(typeof(HangingWiresData))
                                .RegisterMessageType(typeof(AddConnectionPacket))
                                .SetMessageHandler <AddConnectionPacket>(OnAddConnectionFromClient);
            }
        }
示例#25
0
        public override void StartClientSide(ICoreClientAPI capi)
        {
            this.capi     = capi;
            clientChannel =
                capi.Network.RegisterChannel("weather")
                .RegisterMessageType(typeof(WeatherState))
                .SetMessageHandler <WeatherState>(OnWeatherUpdate)
            ;

            capi.RegisterCommand("cdensity", "Set cloud density", "[density] (best values between -1 and 1)", cDensity);

            capi.RegisterCommand("clight", "Set global Cloud brightness", "global brightness (best values between 0 and 1)", cLight);
            //capi.RegisterCommand("crand", "Set large and small cloud noise.", "amp1 amp2 freq1 freq2  (best values between 0.5 and 20)", cRandom);
            capi.RegisterCommand("cviewdist", "Sets the cloud view distance. Will be reset when view distance in graphics settings are changed.", "dist (length in cloud tiles)", cTileLength);

            capi.RegisterCommand("weather", "Show current weather info", "", cmdWeatherClient);

            capi.Event.RegisterGameTickListener(OnGameTick, 50);
            capi.Event.LevelFinalize += InitWeatherSim;
            capi.Event.LeaveWorld    += () => (cloudRenderer as CloudRenderer)?.Dispose();
        }
        public override void StartClientSide(ICoreClientAPI api)
        {
            base.StartClientSide(api);

            capi = api;
            capi.Event.BlockTexturesLoaded += OnLoaded;
            capi.Event.LevelFinalize       += OnLvlFinalize;
            capi.Event.RegisterGameTickListener(OnClientTick, 20);

            capi.Settings.AddWatcher <bool>("showMinimapHud", (on) => {
                ToggleMap(EnumDialogType.HUD);
            });

            capi.Event.LeaveWorld += () =>
            {
                IsShuttingDown = true;
                int i = 0;
                while (mapLayerGenThread != null && mapLayerGenThread.IsAlive && i < 20)
                {
                    Thread.Sleep(50);
                    i++;
                }

                worldMapDlg?.Dispose();

                foreach (var layer in MapLayers)
                {
                    layer?.OnShutDown();
                    layer?.Dispose();
                }
            };

            clientChannel =
                api.Network.RegisterChannel("worldmap")
                .RegisterMessageType(typeof(MapLayerUpdate))
                .RegisterMessageType(typeof(OnViewChangedPacket))
                .RegisterMessageType(typeof(OnMapToggle))
                .SetMessageHandler <MapLayerUpdate>(OnMapLayerDataReceivedClient)
            ;
        }
示例#27
0
 public override void StartClientSide(ICoreClientAPI api)
 {
     capi     = api;
     cChannel = capi.Network.RegisterChannel("remapperchannel")
                .RegisterMessageType(typeof(Message))
                .SetMessageHandler <Message>(a =>
     {
         capi       = api;
         MostLikely = JsonConvert.DeserializeObject <Dictionary <AssetLocation, AssetLocation> >(a.Assets);
         foreach (var item in MostLikely)
         {
             if (item.Key.GetBlock(capi) != null && item.Value.GetBlock(capi) != null)
             {
                 capi.SendChatMessage("/bir remap " + item.Value + " " + item.Key + " force");
             }
             else if (item.Key.GetItem(capi) != null && item.Value.GetItem(capi) != null)
             {
                 capi.SendChatMessage("/iir remap " + item.Value + " " + item.Key + " force");
             }
         }
     });
 }
示例#28
0
        public MechNetworkManager(ICoreAPI api)
        {
            this.api = api;

            if (api.World is IClientWorldAccessor)
            {
                api.World.RegisterGameTickListener(OnClientGameTick, 20);
                clientNwChannel =
                    ((ICoreClientAPI)api).Network.RegisterChannel("vsmechnetwork")
                    .RegisterMessageType(typeof(MechNetworkPacket))
                    .SetMessageHandler <MechNetworkPacket>(OnPacket)
                ;
            }
            else
            {
                api.World.RegisterGameTickListener(OnServerGameTick, 20);
                serverNwChannel =
                    ((ICoreServerAPI)api).Network.RegisterChannel("vsmechnetwork")
                    .RegisterMessageType(typeof(MechNetworkPacket))
                ;
            }
        }
        public override void StartClientSide(ICoreClientAPI capi)
        {
            this.capi     = capi;
            clientChannel =
                capi.Network.RegisterChannel("weather")
                .RegisterMessageType(typeof(WeatherState))
                .SetMessageHandler <WeatherState>(OnWeatherUpdate)
            ;

            capi.Event.RegisterGameTickListener(OnClientGameTick, 50);
            capi.Event.LevelFinalize += LevelFinalizeInit;
            capi.Event.RegisterRenderer(this, EnumRenderStage.Before, "weatherSystem");
            capi.Event.RegisterRenderer(this, EnumRenderStage.Done, "weatherSystem");
            capi.Event.LeaveWorld += () => cloudRenderer?.Dispose();

            blendedWeatherData.Ambient = new AmbientModifier().EnsurePopulated();

            simSounds      = new WeatherSimulationSound(capi as ICoreClientAPI, this);
            simParticles   = new WeatherSimulationParticles(capi as ICoreClientAPI, this);
            simLightning   = new WeatherSimulationLightning(capi as ICoreClientAPI, this);
            auroraRenderer = new AuroraRenderer(capi as ICoreClientAPI, this);
        }
 public override void StartClientSide(ICoreClientAPI Api)
 {
     this.capi            = Api;
     Api.Event.MouseDown += SendBlockAction;
     cChannel             = Api.Network.RegisterChannel("iwcr").RegisterMessageType <IWCSPacket>().SetMessageHandler <IWCSPacket>(h =>
     {
         if (h.DataType == EnumDataType.Recipes)
         {
             try
             {
                 var recipe = JsonConvert.DeserializeObject <KeyValuePair <AssetLocation, InWorldCraftingRecipe[]> >(h.SerializedData, new JsonSerializerSettings()
                 {
                     ReferenceLoopHandling = ReferenceLoopHandling.Ignore, NullValueHandling = NullValueHandling.Ignore
                 });
                 InWorldCraftingRecipes.Add(recipe.Key, recipe.Value);
             }
             catch (Exception ex)
             {
                 Api.World.Logger.Error("Exception thrown while receiving an In World Recipe packet: {0}, Data: {1}", ex, h?.SerializedData ?? "");
                 throw ex;
             }
         }
     });
 }