public void HighlightIncompleteParts(IWorldAccessor world, IPlayer player, BlockPos centerPos) { List <BlockPos> blocks = new List <BlockPos>(); List <int> colors = new List <int>(); for (int i = 0; i < TransformedOffsets.Count; i++) { Vec4i offset = TransformedOffsets[i]; Block block = world.BlockAccessor.GetBlock(centerPos.X + offset.X, centerPos.Y + offset.Y, centerPos.Z + offset.Z); AssetLocation desireBlockLoc = BlockCodes[offset.W]; if (!WildcardUtil.Match(BlockCodes[offset.W], block.Code)) { blocks.Add(new BlockPos(offset.X, offset.Y, offset.Z).Add(centerPos)); if (block.Id != 0) { colors.Add(ColorUtil.ColorFromRgba(215, 94, 94, 64)); } else { int col = world.SearchBlocks(desireBlockLoc)[0].GetColor(world.Api as ICoreClientAPI, centerPos); col &= ~(255 << 24); col |= 96 << 24; colors.Add(col); } } } world.HighlightBlocks(player, HighlightSlotId, blocks, colors); }