public override void PlaceInWorld(int i, int j, Item item) { // TODO: TileObject.CanPlace is throwing null-ref exceptions. why??? MachineItem mItem = item.modItem as MachineItem; GetDefaultParams(out _, out uint width, out uint height, out _); Point16 tePos = new Point16(i, j) - new Point16((int)width / 2, (int)height - 1); int type = (item.modItem as MachineItem).TileType; MachineEntity entity = TileUtils.tileToEntity[type]; if (entity.Find(tePos.X, tePos.Y) < 0) { int id = entity.Place(tePos.X, tePos.Y); if (Main.netMode == NetmodeID.MultiplayerClient) { NetMessage.SendData(MessageID.TileEntitySharing, remoteClient: -1, ignoreClient: Main.myPlayer, number: id); } } //Restore the saved data, if it exists MachineEntity placed = TileEntity.ByPosition[tePos] as MachineEntity; if (mItem.entityData != null) { placed.Load(mItem.entityData); } //If this structure has a powered entity on it, try to connect it to nearby networks Point16 checkOrig = tePos - new Point16(1, 1); bool canUseWires = placed is PoweredMachineEntity; bool canUseItemPipes = placed.SlotsCount > 0; bool canUseFluidPipes = placed is ILiquidMachine || placed is IGasMachine; for (int cx = checkOrig.X; cx < checkOrig.X + width + 2; cx++) { for (int cy = checkOrig.Y; cy < checkOrig.Y + height + 2; cy++) { WorldGen.TileFrame(cx, cy); //Ignore the corners if ((cx == 0 && cy == 0) || (cx == width + 1 && cy == 0) || (cx == 0 && cy == height + 1) || (cx == width + 1 && cy == height + 1)) { continue; } Point16 test = new Point16(cx, cy); if (canUseWires && NetworkCollection.HasWireAt(test, out WireNetwork wireNet)) { wireNet.AddMachine(placed); } if (canUseItemPipes && NetworkCollection.HasItemPipeAt(test, out ItemNetwork itemNet)) { itemNet.AddMachine(placed); itemNet.pipesConnectedToMachines.Add(test); } if (canUseFluidPipes && NetworkCollection.HasFluidPipeAt(test, out FluidNetwork fluidNet)) { fluidNet.AddMachine(placed); } } } if (Main.netMode == NetmodeID.MultiplayerClient) { NetMessage.SendTileRange(Main.myPlayer, checkOrig.X, checkOrig.Y, (int)width + 1, (int)height + 1); } }