public static bool IsBlockPoweredUp(Vector3i _blockPos, int _clrIdx) { WorldBase world = GameManager.Instance.World; if (world.IsRemote()) { //Use HasActivePower power instead since directly powering blocks doesnt work on servers. return(BlockHydroponicFarmPower.HasActivePower(world, _clrIdx, _blockPos)); } TileEntityPowered tileEntityPowered = (TileEntityPowered)GameManager.Instance.World.GetTileEntity(_clrIdx, _blockPos); if (tileEntityPowered != null) { if (tileEntityPowered.IsPowered) { DebugMsg("Block Power Is On"); return(true); } } if (BlockHydroponicFarmPower.IsSpRemotePowerAllowed(_blockPos)) { DebugMsg("No direct power found, checking for remote power"); return(BlockHydroponicFarmPower.HasActivePower(world, _clrIdx, _blockPos)); } DebugMsg("Block Power Is Off"); return(false); }
public override string GetActivationText(WorldBase _world, BlockValue _blockValue, int _clrIdx, Vector3i _blockPos, EntityAlive _entityFocusing) { string useString = Localization.Get("useWorkstation", string.Empty); string workstationName = Localization.Get("hydroponicFarmPower", string.Empty); Vector3i powerBlockPos = _blockPos; powerBlockPos.y -= 1; if (BlockHydroponicFarmPower.IsBlockPoweredUp(powerBlockPos, _clrIdx)) { return(useString + " " + workstationName); } return(useString + " " + workstationName + " (**UNPOWERED**)"); }
void Update() { if (workstationBlockRenderers == null) { GetWorkstationBlockRenderers(); } curIsPowered = BlockHydroponicFarmPower.IsBlockPoweredUp(blockPos, cIdx); if (curIsPowered != isPowered) { isPowered = curIsPowered; if (isPowered) { light[0].intensity = 1; foreach (Renderer rend in powerBlockRenderers) { rend.material.EnableKeyword("_EMISSION"); rend.material.SetColor("_EmissionColor", new Color(1, 1, 1)); } if (workstationBlockRenderers != null) { foreach (Renderer rend in workstationBlockRenderers) { rend.material.EnableKeyword("_EMISSION"); rend.material.SetColor("_EmissionColor", new Color(1, 1, 1)); } } } else { light[0].intensity = 0; foreach (Renderer rend in powerBlockRenderers) { rend.material.EnableKeyword("_EMISSION"); rend.material.SetColor("_EmissionColor", new Color(0, 0, 0)); } if (workstationBlockRenderers != null) { foreach (Renderer rend in workstationBlockRenderers) { rend.material.EnableKeyword("_EMISSION"); rend.material.SetColor("_EmissionColor", new Color(0, 0, 0)); } } } } }
public static bool IsHydroponicFarmPowered(TileEntityWorkstation tew) { Vector3i powerBlockPos = tew.ToWorldPos(); powerBlockPos.y -= 1; BlockValue powerBlockValue = GameManager.Instance.World.GetBlock(powerBlockPos); Block powerBlock = Block.list[powerBlockValue.type]; bool isPowered = false; if (powerBlock.GetBlockName() == "hydroponicFarmPower") { // Is Power block powered Chunk chunk = (Chunk)GameManager.Instance.World.GetChunkFromWorldPos(powerBlockPos); isPowered = BlockHydroponicFarmPower.IsBlockPoweredUp(powerBlockPos, chunk.ClrIdx); // Halt crafting UI EntityPlayerLocal player = GameManager.Instance.World.GetPrimaryPlayer(); LocalPlayerUI playerUI = player.PlayerUI; BlockValue block = GameManager.Instance.World.GetBlock(tew.ToWorldPos()); string text = string.Format("workstation_{0}", Block.list[block.type].GetBlockName()); if (playerUI.windowManager.Contains(text)) { XUiC_WorkstationWindowGroup workstationWindowGroup = ((XUiC_WorkstationWindowGroup)((XUiWindowGroup)playerUI.windowManager.GetWindow(text)).Controller); if (workstationWindowGroup.WorkstationData != null && workstationWindowGroup.WorkstationData.TileEntity == tew) { // The name of the XUiC_CraftingQueue field of XUiC_WorkstationWindowGroup is obfuscated so we find it by type to call it. XUiC_CraftingQueue craftingQueue = null; var listOfFieldNames = typeof(XUiC_WorkstationWindowGroup).GetFields(); foreach (FieldInfo fieldInfo in listOfFieldNames) { FieldInfo field = null; if (fieldInfo.FieldType == typeof(XUiC_CraftingQueue)) { field = fieldInfo; } if (field != null) { craftingQueue = (XUiC_CraftingQueue)field.GetValue(workstationWindowGroup); } } if (craftingQueue != null) { if (!isPowered) { //workstationWindowGroup.FNW.HaltCrafting(); craftingQueue.HaltCrafting(); } else { //workstationWindowGroup.FNW.ResumeCrafting(); craftingQueue.ResumeCrafting(); } } } } TileEntityWorkstationPatchFunctions.ChangePlantIfNeeded(tew); return(isPowered); } return(true); }