public override void Init(MyObjectBuilder_EntityBase objectBuilder) { // this method is called async! always do stuff in the first update unless you're sure it must be in this one. // NOTE the objectBuilder arg is not the Entity's but the component's, and since the component wasn't loaded from an OB that means it's always null, which it is (AFAIK). block = (IMyPowerProducer)Entity; if (MyAPIGateway.Multiplayer.IsServer) { NeedsUpdate = MyEntityUpdateEnum.BEFORE_NEXT_FRAME | MyEntityUpdateEnum.EACH_100TH_FRAME | MyEntityUpdateEnum.EACH_FRAME; // allow UpdateOnceBeforeFrame() to execute, remove if not needed } var inv = (MyInventory)block.GetInventory(); //if(inv == null) //{ // inv = new MyInventory(); // block.Components.Add(inv); //} MyLog.Default.WriteLine($"got inventory {block.HasInventory} {inv} {inv == null}"); MyLog.Default.WriteLine($"got Constraint {inv.Constraint} {inv.Constraint == null}"); inv.Constraint.Add(new MyDefinitionId(typeof(MyObjectBuilder_Ore), "Ice")); MyLog.Default.WriteLine("add constraint"); }
public override void UpdateAfterSimulation100() { if (block.CubeGrid?.Physics == null) // ignore projected and other non-physical grids { return; } var MWs = Interlocked.Exchange(ref powerAccumealtor, 0); var MWh = MWs / (60 * 60); var iceMade = MWh / MWH_PER_KG_OF_ICE; //MyAPIGateway.Utilities.ShowMessage("hgen", $"p={MWh}MWh, i={iceMade}kg"); block.GetInventory().AddItems((VRage.MyFixedPoint)iceMade, Ice); }