public override void OnBlockAdded(int value, int oldValue, int x, int y, int z) { try { Point3 point = new Point3(x, y, z); int id = ILibrary.getItemId(value); int bid = Terrain.ExtractContents(value); if (bid == 1003) { switch (id) { //39,40,41为动态储罐 case 27: //燃煤发电机 ILibrary.addCoalGeneratorEntity(Project, point, 1024); devices.Add(point); break; case 30: //太阳能发电 ILibrary.addBaseEnergyEntity(Project, "SolarEnergyBlock", point, 1024); //1k eu电量 devices.Add(point); break; case 40: NewMutiBlockCheck.Result result = mutiBlockCheck.checkMutiBlocks(SubsystemTerrain.Terrain, point, dynamic_outsideaccept, dynamic_insideaccept, dynamic_sideaccept, dynamic_faceaccept); if (result.finish) { int v = result.Size.X * result.Size.Y * result.Size.Z; if (!MutiDevices.ContainsKey(result.savaPoint)) { MutiDevices.Add(result.savaPoint, result.blocks); ILibrary.addMekDynamicEntity(Project, result.savaPoint, 1000 * v); } if (component != null) { component.ComponentGui.DisplaySmallMessage($"动态储罐成型,储量{1000 * result.Size.X * result.Size.Y * result.Size.Z}MB t:{result.Size}", false, false); } } break; case 41: result = mutiBlockCheck.checkMutiBlocks(SubsystemTerrain.Terrain, point, dynamic_outsideaccept, dynamic_insideaccept, dynamic_sideaccept, dynamic_faceaccept); if (result.finish) { int v = result.Size.X * result.Size.Y * result.Size.Z; if (!MutiDevices.ContainsKey(result.savaPoint)) { MutiDevices.Add(result.savaPoint, result.blocks); ILibrary.addMekDynamicEntity(Project, result.savaPoint, 1000 * v); } if (component != null) { component.ComponentGui.DisplaySmallMessage($"动态储罐成型,储量{1000 * result.Size.X * result.Size.Y * result.Size.Z}MB t:{result.Size}", false, false); } } break; case 63: //基础能量立方 ILibrary.addBaseEnergyEntity(Project, "BaseEnergyBlock", point, 1024 * 1024); //1k eu电量 devices.Add(point); break; case 64: //传送机 NewMutiBlockCheck.TranmitResult tranmitResult = mutiBlockCheck.checkTransmit(SubsystemTerrain, point, new List <int>() { Terrain.MakeBlockValue(1003, 0, 64), Terrain.MakeBlockValue(1003, 0, 65) }, Terrain.MakeBlockValue(1007)); if (tranmitResult.finished) { component.ComponentGui.DisplaySmallMessage("传送门成型", false, false); if (!tranmitPoints.ContainsKey(tranmitResult.savePoint)) { tranmitPoints.Add(tranmitResult.savePoint, tranmitResult); } } break; case 65: //传送框架 tranmitResult = mutiBlockCheck.checkTransmit(SubsystemTerrain, point, new List <int>() { Terrain.MakeBlockValue(1003, 0, 64), Terrain.MakeBlockValue(1003, 0, 65) }, Terrain.MakeBlockValue(1007)); if (tranmitResult.finished) { component.ComponentGui.DisplaySmallMessage("传送门成型", false, false); if (!tranmitPoints.ContainsKey(tranmitResult.savePoint)) { tranmitPoints.Add(tranmitResult.savePoint, tranmitResult); } } break; case 47: //粉碎机 ILibrary.addCrusherEntity(Project, point, 1024); //1k eu电量 devices.Add(point); break; case 72: //充能冶炼炉 ILibrary.addMekSmeltEntity(Project, point, 1024); //1k eu电量 devices.Add(point); break; case 78: ILibrary.addEnrichEntity(Project, point, 1024); //1k eu电量 devices.Add(point); break; case 80: //合金炉 ILibrary.addAlloyEntity(Project, point, 1024); //1k eu电量 devices.Add(point); break; case 82: //制造厂 ILibrary.addManufactorymeltEntity(Project, point, 1024); //1k eu电量 devices.Add(point); break; } } else if (bid == 1007) { switch (id) { case 39: NewMutiBlockCheck.Result result = mutiBlockCheck.checkMutiBlocks(SubsystemTerrain.Terrain, point, dynamic_outsideaccept, dynamic_insideaccept, dynamic_sideaccept, dynamic_faceaccept); if (result.finish) { int v = result.Size.X * result.Size.Y * result.Size.Z; if (!MutiDevices.ContainsKey(result.savaPoint)) { MutiDevices.Add(result.savaPoint, result.blocks); ILibrary.addMekDynamicEntity(Project, result.savaPoint, 1000 * v); } if (component != null) { component.ComponentGui.DisplaySmallMessage($"动态储罐成型,储量{1000 * result.Size.X * result.Size.Y * result.Size.Z}MB t:{result.Size}", false, false); } } break; } } updateList(); } catch (Exception e) { if (component != null) { component.ComponentGui.DisplaySmallMessage(e.ToString(), false, false); } } }
public override bool OnInteract(TerrainRaycastResult raycastResult, ComponentMiner componentMiner) { ComponentEnergyMachine mcomponent; ComponentFluidStore componentFluidStore; PanelWidget panelWidget = new PanelWidget(); int value = raycastResult.Value; Point3 point = raycastResult.CellFace.Point; int ID = ILibrary.getItemId(value); if (Terrain.ExtractContents(value) == 1003) { switch (ID) { case 27: mcomponent = subsystemBlockEntities.GetBlockEntity(point.X, point.Y, point.Z).Entity.FindComponent <ComponentCoalGenerator>(true); componentMiner.ComponentPlayer.ComponentGui.ModalPanelWidget = new CoalGeneratorWidget((ComponentCoalGenerator)mcomponent); break; case 30: mcomponent = subsystemBlockEntities.GetBlockEntity(point.X, point.Y, point.Z).Entity.FindComponent <CptEgySolarGtor>(true); componentMiner.ComponentPlayer.ComponentGui.ModalPanelWidget = new AspSolarWidget((CptEgySolarGtor)mcomponent); break; case 40: NewMutiBlockCheck.Result result = mutiBlockCheck.checkMutiBlocks(SubsystemTerrain.Terrain, point, dynamic_outsideaccept, dynamic_insideaccept, dynamic_sideaccept, dynamic_faceaccept); if (result.finish) { componentFluidStore = subsystemBlockEntities.GetBlockEntity(result.savaPoint.X, result.savaPoint.Y, result.savaPoint.Z).Entity.FindComponent <ComponentMekDynamic>(true); componentMiner.ComponentPlayer.ComponentGui.ModalPanelWidget = new MekDynamicWidget((ComponentMekDynamic)componentFluidStore); } break; case 41: result = mutiBlockCheck.checkMutiBlocks(SubsystemTerrain.Terrain, point, dynamic_outsideaccept, dynamic_insideaccept, dynamic_sideaccept, dynamic_faceaccept); if (result.finish) { componentFluidStore = subsystemBlockEntities.GetBlockEntity(result.savaPoint.X, result.savaPoint.Y, result.savaPoint.Z).Entity.FindComponent <ComponentMekDynamic>(true); componentMiner.ComponentPlayer.ComponentGui.ModalPanelWidget = new MekDynamicWidget((ComponentMekDynamic)componentFluidStore); } break; case 47: mcomponent = subsystemBlockEntities.GetBlockEntity(point.X, point.Y, point.Z).Entity.FindComponent <ComponentCrusher>(); componentMiner.ComponentPlayer.ComponentGui.ModalPanelWidget = new CrusherWidget((ComponentCrusher)mcomponent); break; case 48: break; case 49: break; case 50: break; case 51: break; case 52: break; case 63: //基础能量立方 mcomponent = subsystemBlockEntities.GetBlockEntity(point.X, point.Y, point.Z).Entity.FindComponent <ComponentEnergyMachine>(true); componentMiner.ComponentPlayer.ComponentGui.ModalPanelWidget = new EnergyCubeWidget(mcomponent); break; case 64: if (Terrain.ExtractContents(componentMiner.ActiveBlockValue) == 1006 && Terrain.ExtractData(componentMiner.ActiveBlockValue) == 500) { return(true); } if (tranmitPoints.TryGetValue(point, out NewMutiBlockCheck.TranmitResult tranmitResult)) { componentMiner.ComponentPlayer.ComponentGui.DisplaySmallMessage("conn:" + tranmitResult.connectPoint.ToString(), false, false); } break; case 65: break; case 72: //充能冶炼炉 mcomponent = subsystemBlockEntities.GetBlockEntity(point.X, point.Y, point.Z).Entity.FindComponent <ComponentSmelt>(true); componentMiner.ComponentPlayer.ComponentGui.ModalPanelWidget = new MekSmeltWidget((ComponentSmelt)mcomponent); break; case 78: //富集仓 mcomponent = subsystemBlockEntities.GetBlockEntity(point.X, point.Y, point.Z).Entity.FindComponent <ComponentEnrich>(true); componentMiner.ComponentPlayer.ComponentGui.ModalPanelWidget = new EnrichWidget((ComponentEnrich)mcomponent); break; case 80: //合金炉 mcomponent = subsystemBlockEntities.GetBlockEntity(point.X, point.Y, point.Z).Entity.FindComponent <ComponentAlloy>(true); componentMiner.ComponentPlayer.ComponentGui.ModalPanelWidget = new AlloyWidget((ComponentAlloy)mcomponent); break; case 82: //制造厂 mcomponent = subsystemBlockEntities.GetBlockEntity(point.X, point.Y, point.Z).Entity.FindComponent <ComponentManufactory>(true); componentMiner.ComponentPlayer.ComponentGui.ModalPanelWidget = new ManufactoryWidget((ComponentManufactory)mcomponent); break; default: panelWidget.setText(subsystemItemElectric.scanSlot(SubsystemTerrain.Terrain, point)); component.ComponentGui.ModalPanelWidget = panelWidget; break; } } else if (Terrain.ExtractContents(value) == 1007) { switch (ID) { case 39: NewMutiBlockCheck.Result result = mutiBlockCheck.checkMutiBlocks(SubsystemTerrain.Terrain, point, dynamic_outsideaccept, dynamic_insideaccept, dynamic_sideaccept, dynamic_faceaccept); if (result.finish) { componentFluidStore = subsystemBlockEntities.GetBlockEntity(result.savaPoint.X, result.savaPoint.Y, result.savaPoint.Z).Entity.FindComponent <ComponentMekDynamic>(true); componentMiner.ComponentPlayer.ComponentGui.ModalPanelWidget = new MekDynamicWidget((ComponentMekDynamic)componentFluidStore); } break; } } return(false); }