private void ServerRemote_RelocateStructure(IStaticWorldObject objectStructure, Vector2Ushort toPosition) { if (objectStructure.TilePosition == toPosition) { // relocation not required return; } var character = ServerRemoteContext.Character; if (!SharedValidateCanCharacterRelocateStructure(character, objectStructure, toPosition, errorMessage: out _, logErrors: true)) { return; } var fromPosition = objectStructure.TilePosition; Api.SafeInvoke( () => ServerStructureBeforeRelocating?.Invoke(character, fromPosition, objectStructure)); Server.World.SetPosition(objectStructure, toPosition); try { // ensure the structure is reinitialized (has its physics rebuilt, etc) objectStructure.ServerInitialize(); } catch (Exception ex) { Logger.Exception(ex); } ConstructionPlacementSystem.Instance.ServerNotifyOnStructurePlacedOrRelocated(objectStructure, character); Api.SafeInvoke( () => ServerStructureRelocated?.Invoke(character, fromPosition, objectStructure)); // let's deduct the tool durability if (CreativeModeSystem.SharedIsInCreativeMode(character)) { return; } // the item in hotbar is definitely a construction tool as it was validated above var itemConstructionTool = character.SharedGetPlayerSelectedHotbarItem(); ItemDurabilitySystem.ServerModifyDurability( itemConstructionTool, delta: -((IProtoObjectStructure)objectStructure.ProtoGameObject).RelocationToolDurabilityCost); }
private void ServerRemote_RelocateStructure(IStaticWorldObject objectStructure, Vector2Ushort toPosition) { if (objectStructure.TilePosition == toPosition) { // relocation not required return; } var character = ServerRemoteContext.Character; if (!SharedValidateCanCharacterRelocateStructure(character, objectStructure, toPosition, logErrors: true)) { return; } Api.SafeInvoke( () => ServerStructureBeforeRelocating?.Invoke(character, objectStructure)); Server.World.SetPosition(objectStructure, toPosition); ConstructionPlacementSystem.Instance.ServerNotifyOnStructurePlacedOrRelocated(objectStructure, character); Api.SafeInvoke( () => ServerStructureRelocated?.Invoke(character, objectStructure)); // let's deduct the tool durability if (CreativeModeSystem.SharedIsInCreativeMode(character)) { return; } // the item in hotbar is definitely a construction tool as it was validated above var itemConstructionTool = character.SharedGetPlayerSelectedHotbarItem(); ItemDurabilitySystem.ServerModifyDurability(itemConstructionTool, delta: -ToolDurabilityCostForStructureRelocation); }